API Key 与服务接入文档

← 返回状态页  ·  管理后台

1. 架构概览

本站部署在云端(SG),监控分两类:

心跳上报有两种实现方式:内网探测代理(一台机器替全部目标上报,推荐)和业务程序自行推送(脚本末尾加一行 curl)。

2. 获取 API Key

  1. 登录 管理后台 → 「API 密钥」→ 输入备注 → 创建密钥。
  2. 完整 Key(sk_ 开头)仅在创建时显示一次,请立即保存;列表中只保留前缀。
  3. Key 可随时禁用或删除;丢失后删除旧 Key 重新创建即可。每个用户管理自己的 Key。

权限范围:API Key 只能推送心跳(/api/push)和拉取代理探测清单(/api/agent/targets),不能读取或修改任何后台配置,泄露风险有限,但仍建议妥善保管。

3. 接口参考

3.1 推送心跳 — GET/POST /api/push/{slug}

参数必填说明
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。

3.2 代理探测清单 — GET /api/agent/targets

返回所有已启用且填写了探测目标的心跳监控项,供内网代理使用:

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:portTCP 连接测延时tcp://192.168.50.91:22
ping://host系统 ICMP Pingping://192.168.5.1
http(s)://…HTTP GET,5xx 视为异常http://192.168.21.98:18088/admin/
(留空)代理跳过,由业务程序自行推送—

4. 方式一:内网探测代理 local_agent.py(推荐)

在任意一台能访问内网各目标的机器上运行(纯 Python 标准库,无需 pip 安装依赖)。每轮流程:

local_agent.py(内网) status.chinadong.net(SG) │ │ │ ① GET /api/agent/targets?key=sk_xxx │ │ ◄─── 心跳监控清单(slug + target + 超时) ─────┤ │ │ │ ② 本地逐个探测(10 并发): │ │ tcp:// → socket 连接测延时 │ │ ping:// → 系统 ping │ │ http:// → GET 请求 │ │ │ │ ③ 每项推送:/api/push/<slug>?key=… │ │ &status=up|down&latency=… ───────────────►│ 记录检测、更新心跳时间、 │ │ 状态变化时发告警邮件 │ ④ 休眠 300 秒,回到 ① │

启动方式

# 常驻模式(默认每 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。

免维护:后台新增 / 修改 / 暂停心跳监控项,代理下一轮自动生效,无需改任何配置文件。

5. 方式二:业务程序自行推送

适合备份脚本、定时任务这类「程序活着就该冒个泡」的场景。在后台建一个心跳监控(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"

6. 超时判定与推送频率

💡 所有请求走 HTTPS;Key 放在 URL 参数里对自有服务器是可接受的,如程序支持自定义 Header,优先用 X-API-Key。