本站部署在云端(SG),监控分两类:
GET/POST /api/push/<监控slug>?key=<API_Key>心跳上报有两种实现方式:内网探测代理(一台机器替全部目标上报,推荐)和业务程序自行推送(脚本末尾加一行 curl)。
sk_ 开头)仅在创建时显示一次,请立即保存;列表中只保留前缀。权限范围:API Key 只能推送心跳(/api/push)和拉取代理探测清单(/api/agent/targets),不能读取或修改任何后台配置,泄露风险有限,但仍建议妥善保管。
| 参数 | 必填 | 说明 |
|---|---|---|
key | 是 | API Key;也可用请求头 X-API-Key 传递 |
status | 否 | up(默认)或 down;down 会立即标记异常并触发告警邮件 |
latency | 否 | 延时毫秒数,计入统计和延时走势 |
msg | 否 | 附加说明,显示在检测记录和告警邮件中 |
# 正常心跳
curl -fsS "https://status.chinadong.net/api/push/mac-mini?key=sk_xxx&latency=18"
# 程序自检失败,主动报障(立即告警)
curl -fsS "https://status.chinadong.net/api/push/backup-job?key=sk_xxx&status=down&msg=backup+failed"
返回:{"ok": true, "status": "up"};Key 无效返回 401,slug 不存在返回 404,非心跳类型返回 400。
返回所有已启用且填写了探测目标的心跳监控项,供内网代理使用:
curl -s "https://status.chinadong.net/api/agent/targets?key=sk_xxx"
# → {"targets":[{"slug":"mac-mini","name":"Mac mini SSH",
# "target":"tcp://192.168.50.91:22","timeout_seconds":10,
# "interval_seconds":900,"verify_tls":1}, …]}
target 格式(在后台监控表单中填写):
| 格式 | 探测方式 | 示例 |
|---|---|---|
tcp://host:port | TCP 连接测延时 | tcp://192.168.50.91:22 |
ping://host | 系统 ICMP Ping | ping://192.168.5.1 |
http(s)://… | HTTP GET,5xx 视为异常 | http://192.168.21.98:18088/admin/ |
| (留空) | 代理跳过,由业务程序自行推送 | — |
在任意一台能访问内网各目标的机器上运行(纯 Python 标准库,无需 pip 安装依赖)。每轮流程:
# 常驻模式(默认每 300 秒一轮)
python3 local_agent.py --server https://status.chinadong.net --key sk_xxx
# 单次模式,配合 crontab(每 5 分钟)
*/5 * * * * /usr/bin/python3 /opt/scripts/local_agent.py \
--server https://status.chinadong.net --key sk_xxx --once >> /tmp/local_agent.log 2>&1
Linux 常驻推荐 systemd(单元文件模板见脚本头部注释);macOS 用 cron 或 LaunchAgent 均可。脚本位于仓库 clients/local_agent.py。
免维护:后台新增 / 修改 / 暂停心跳监控项,代理下一轮自动生效,无需改任何配置文件。
适合备份脚本、定时任务这类「程序活着就该冒个泡」的场景。在后台建一个心跳监控(target 留空),程序末尾加一行:
# Linux / macOS / OpenWrt(包装脚本 clients/heartbeat.sh)
curl -fsS "https://status.chinadong.net/api/push/<slug>?key=sk_xxx"
# Windows PowerShell(包装脚本 clients/heartbeat.ps1,含计划任务注册示例)
Invoke-RestMethod "https://status.chinadong.net/api/push/<slug>?key=sk_xxx&latency=12"
X-API-Key。