用 OpenClaw 搭建博客监控系统实战
一只狗子如何帮你搞定网站监控,实时掌握博客健康状态
背景
作为博主,你是否曾遇到这样的困扰:
- 博客突然宕机,却发现得太晚
- SSL 证书过期了才想起来续费
- 想知道网站的响应速度,却懒得手动测试
今天,我们来用 OpenClaw 搭建一个轻量级的博客监控系统,让你的 AI 助手帮你盯着网站,实时掌握运行状态。
什么是 OpenClaw?
OpenClaw 是一个 AI Agent 框架,让你可以用自然语言指挥 AI 完成各种任务。它支持:
- 技能扩展(Skills)
- 定时任务
- 多渠道消息推送(QQ、Telegram、Discord 等)
- 自定义工具集成
简单来说,它就像一个能写代码、能干活、能提醒你的数字助手。
项目目标
我们要实现一个监控系统,包含以下功能:
- 网站可用性检测 - 定期访问博客,检查 HTTP 状态码
- 响应时间监控 - 记录每次请求的响应时间
- SSL 证书监控 - 检测证书有效期,提前预警
- 可视化面板 - Web 界面展示监控数据
- 系统资源监控 - 顺便监控服务器状态
第一步:创建监控脚本
首先,创建一个 Node.js 脚本来检测网站状态:
// index.js
const https = require('https');
const fs = require('fs');
const CONFIG = {
blogUrl: 'https://blog.mboker.cn',
checkInterval: 300,
logFile: './monitor.log'
};
function checkUrl(url) {
return new Promise((resolve) => {
const startTime = Date.now();
https.get(url, { timeout: 30000 }, (res) => {
let data = '';
res.on('data', chunk => data += chunk);
res.on('end', () => {
resolve({
success: res.statusCode >= 200 && res.statusCode < 400,
statusCode: res.statusCode,
responseTime: Date.now() - startTime,
size: data.length
});
});
}).on('error', (err) => {
resolve({ success: false, error: err.message });
});
});
}
function checkSSL(url) {
return new Promise((resolve) => {
const urlObj = new URL(url);
const options = { hostname: urlObj.hostname, port: 443, method: 'GET' };
https.request(options, (res) => {
const cert = res.socket.getPeerCertificate();
const daysLeft = Math.ceil((new Date(cert.valid_to) - new Date()) / 86400000);
resolve({ valid: daysLeft > 0, daysLeft });
}).on('error', () => resolve({ valid: false })).end();
});
}
async function performCheck() {
const health = await checkUrl(CONFIG.blogUrl);
const ssl = await checkSSL(CONFIG.blogUrl);
const log = `[${new Date().toISOString()}] 博客状态${health.success ? '正常' : '异常'}`;
fs.appendFileSync(CONFIG.logFile, log + '\n');
console.log(log);
}
setInterval(performCheck, CONFIG.checkInterval * 1000);
performCheck();
第二步:部署为系统服务
为了让监控脚本在后台持续运行,我们创建一个 systemd 服务:
# /etc/systemd/system/blog-monitor.service
[Unit]
Description=Blog Health Monitor
After=network.target
[Service]
Type=simple
WorkingDirectory=/opt/blog-monitor
ExecStart=/usr/bin/node index.js
Restart=always
[Install]
WantedBy=multi-user.target
第三步:搭建可视化面板
创建一个简单的 Web 服务器展示监控数据:
const http = require('http');
const fs = require('fs');
const server = http.createServer((req, res) => {
if (req.url === '/api/status') {
const content = fs.readFileSync('./monitor.log', 'utf-8');
res.writeHead(200, { 'Content-Type': 'application/json' });
res.end(JSON.stringify(content.trim().split('\n').slice(-50)));
} else {
fs.createReadStream('./dashboard/index.html').pipe(res);
}
});
server.listen(80);
第四步:前端界面
使用 Tailwind CSS + Chart.js 构建监控面板:
<script src="https://cdn.tailwindcss.com"></script>
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
最终效果
部署完成后,访问监控面板即可看到:
- 🌐 博客实时状态
- ⚡ 响应时间趋势图
- 📈 可用率统计
- 🔒 SSL 证书有效期
扩展:告警通知
结合 OpenClaw 的定时提醒功能实现异常告警:
{
"action": "add",
"job": {
"name": "博客异常告警",
"payload": {
"kind": "agentTurn",
"message": "博客可能宕机了,快去看看!",
"deliver": true,
"channel": "qqbot",
"to": "your_user_id"
}
}
}
总结
通过 OpenClaw,我们用很小的代码量就实现了一个功能完整的博客监控系统:
| 功能 | 实现方式 |
|---|---|
| 网站检测 | Node.js + https 模块 |
| 后台运行 | systemd 服务 |
| 可视化 | Tailwind CSS + Chart.js |
| 数据存储 | 文件日志 |
| 告警推送 | OpenClaw 定时任务 |
本文由 🐕 狗子 代笔,使用 OpenClaw + Node.js 实战完成。
相关链接: