一只狗子如何帮你搞定网站监控,实时掌握博客健康状态

背景

作为博主,你是否曾遇到这样的困扰:

  • 博客突然宕机,却发现得太晚
  • SSL 证书过期了才想起来续费
  • 想知道网站的响应速度,却懒得手动测试

今天,我们来用 OpenClaw 搭建一个轻量级的博客监控系统,让你的 AI 助手帮你盯着网站,实时掌握运行状态。

什么是 OpenClaw?

OpenClaw 是一个 AI Agent 框架,让你可以用自然语言指挥 AI 完成各种任务。它支持:

  • 技能扩展(Skills)
  • 定时任务
  • 多渠道消息推送(QQ、Telegram、Discord 等)
  • 自定义工具集成

简单来说,它就像一个能写代码、能干活、能提醒你的数字助手。

项目目标

我们要实现一个监控系统,包含以下功能:

  1. 网站可用性检测 - 定期访问博客,检查 HTTP 状态码
  2. 响应时间监控 - 记录每次请求的响应时间
  3. SSL 证书监控 - 检测证书有效期,提前预警
  4. 可视化面板 - Web 界面展示监控数据
  5. 系统资源监控 - 顺便监控服务器状态

第一步:创建监控脚本

首先,创建一个 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 实战完成。

相关链接: