CF-Server-Monitor 是一个部署在 Cloudflare Workers 上的服务器监控系统。服务器端安装 Agent 后会单向上报指标到 Worker,数据写入 D1,并通过 Durable Objects + WebSocket 推送到前端,实现免费托管、低维护的实时监控。
支持主流 Linux 发行版、Alpine Linux、OpenWrt、macOS、群晖 DSM、飞牛 fnOS、Windows 等系统,并提供 Docker 镜像部署方式。
高安全性:Agent 仅单向上报指标,不提供 WebSSH、远程命令下发或主控通道;支持非 root 运行,可降低监控组件被利用后的影响范围。
相比传统主控式探针,CF-Server-Monitor 更适合低成本、低维护和安全优先的监控场景:
API_SECRET 和自动更新开关变更需要重新执行安装命令。systemd --user 的 Linux 可使用普通用户安装,探针文件写入 ~/.cf-probe/。Date 头校正样本时间和 boot_time,降低服务器本地时间错误对历史图表的影响;不会修改系统时间。| 模块 | 能力 |
|---|---|
| 实时监控 | CPU、GPU、内存、交换分区、磁盘、磁盘 IO、网络、连接数、进程数、负载、运行时间 |
| 历史数据 | 7 天历史图表、长时段采样、实时网速、月流量统计与校正 |
| 网络质量 | 电信、联通、移动、BGP 节点延迟与丢包率追踪;三网详情开启时首页从 D1 最近 2 小时抽样最多 20 个真实点并缓存 5 分钟 |
| 多视图前台 | 条形图、环形图、表格、地图视图,支持桌面端和移动端 |
| 管理后台 | 服务器增删改查、拖拽排序、隐藏服务器、导入导出、批量删除、刷新服务器列表缓存、数据库维护 |
| 多系统 Agent | 主流 Linux、Alpine Linux、OpenWrt、群晖 DSM、飞牛 fnOS、FreeBSD、macOS、Windows,支持 Docker 镜像部署;默认 Go 版本,保留 Shell/PowerShell 版本 |
| 实时推送 | Durable Objects + WebSocket,Agent 上报后前端即时刷新 |
| 告警通知 | 离线告警、恢复通知、到期提醒、资源负载告警 |
| 多语言 | 前端内置中文、英文和西班牙语(拉美)切换;通知消息支持中文、英文和西班牙语;文档提供中文与英文入口 |
| 多站点 | 支持 GitHub Pages 静态前台和多个 Worker API 聚合展示 |
| 小组件 | 提供 iOS Scriptable 小组件脚本,适合移动端快速查看 |
| 安全控制 | API Secret、管理员密码、JWT、Turnstile、CORS、CSP 白名单 |
| 主题生态 | 内置主题、Mikus 模式、主题商店、第三方主题反代与预览 |
| 额度友好 | 按月表轮换、历史查询采样、缓存与限流设计,适配 Cloudflare 免费额度 |
flowchart LR
Agent["Server Agent<br/>Go / Shell / PowerShell"] -->|"POST /update"| Worker["Cloudflare Worker"]
Worker --> D1["Cloudflare D1<br/>servers / settings / history"]
Worker <--> DO["Durable Object<br/>WebSocket broadcast"]
Worker --> Assets["Vue Dashboard<br/>Admin Panel"]
Browser["Browser / Mobile / Widget"] <--> Worker
核心数据流:
API_SECRET,写入 D1,并通过 Durable Object 广播实时数据。近期变化:
2.8.7:优化定时任务逻辑,降低CPU负载,避免超出免费额度限制;/update 增加 512KB 请求体上限,超限直接返回 413;服务器被删除后,其 Agent 的 WSS 连接会在 2 分钟内自动断开;WSS 上报增加帧大小校验,D1 抖动时不再中断已认证会话;批量样本只保留最新 300 条。新增服务端自动发现机制自动绑定服务器ID。新增自定义UA;2.8.6:WSS前端订阅采用250毫秒批量上报,新增SMTP通知渠道,新增月度流量阈值告警,移除旧版数据库兼容性,新增Docker安装方式。2.8.5:支持自定义 Ping 节点名称;增加ICMP模式;优化WSS响应逻辑;API接口优化;原皮前端优化;新增4个ping节点。2.8.4:新增 Agent WSS 上报和 WSS 开启时段,提升实时数据推送及时性,并允许非目标时段自动改用 POST 降低 Do 时长消耗;该能力要求 Agent 升级到 v1.0.10+。新增账户Do用量展示,优化无前端订阅时的 Do 实时广播请求,降低空闲额度消耗。通知设置新增自定义 Webhook 渠道, 新增前端wss超时配置。2.8.3:新增磁盘 IO 统计,默认 Agent 切换为 Go 版本,新增服务器延迟与丢包率实时窗口。2.8.2:引入 Go Agent 支持。2.8.1:优化长时间历史查询 D1 读行,增加资源负载通知和主题商店接口优化。2.8.0:新增主题商店,支持一键切换第三方主题。2.7.x:重构数据库写入、月表轮换、通知模块、安全策略、服务器计费字段、导入导出和多项后台能力。Go Agent 的完整更新记录见 cfsm-agent releases。
API_SECRET,同时作为 Agent 上报密钥和初始后台密码建议优先使用「Cloudflare Workers 连接 GitHub 仓库」或「GitHub Actions 自动部署」。一键部署适合快速体验,但后续同步更新不够方便。
这是推荐方式,适合希望通过 Cloudflare 控制台自动构建和重新部署的用户。
npm run build:frontend。npx wrangler deploy。API_SECRET。图文教程:https://huilang.me/cf-server-monitor-setup/
适合希望把部署流程完全托管在 GitHub Actions 的用户。
server-monitor-db。| Secret | 必填 | 说明 |
|---|---|---|
CF_API_TOKEN |
是 | Cloudflare API Token |
CF_ACCOUNT_ID |
是 | Cloudflare Account ID |
D1_DATABASE_ID |
是 | D1 数据库 ID |
API_SECRET |
是 | Agent 上报密钥和初始后台密码 |
CORS_ALLOWED_ORIGINS |
否 | 允许跨域访问 API 的来源,多个用英文逗号分隔 |
推送到 main 分支会自动部署,也可以在 Actions 页面手动运行 Deploy to Cloudflare Workers 工作流。
部署时请确认:
npm run build:frontendAPI_SECRET 改为随机强密码,不要继续使用默认值一键部署不方便长期同步上游更新,正式使用更建议迁移到方式一或方式二。
部署成功后访问:
https://你的 Worker 域名/admin#/admin
默认凭据:
| 项目 | 默认值 |
|---|---|
| 用户名 | admin |
| 密码 | API_SECRET |
登录后建议立即修改后台用户名和密码。后台登录密码可以和 API_SECRET 分离;服务器 Agent 上报仍使用 Cloudflare 环境变量中的 API_SECRET。
/admin#/admin。如果服务器数量较多,也可以在「设置 → 站点设置」中开启 自动发现:安装 Agent 时不传 -id,首次上报时服务端会自动创建服务器,名称取 -name 参数,未传则使用请求的连接来源 IP(CF-Connecting-IP)。若已存在同名服务器则不会新建也不会复用,服务端直接拒绝本次上报(返回 404),Agent 输出提示后直接退出。新建的服务器最多延迟约 2 分钟出现在首页;建号失败、或服务端未开启自动发现(空 id 上报只收到普通 404)时,同样只输出一条提示后退出,不重试、不发送通知,也不留下任何标记文件。该开关默认关闭。
自动发现开关保存后,后台「站点设置 → 自动发现」旁会出现复制按钮,可直接复制下面这种不传 -id 的 Linux 安装命令。
不传 -id 时的安装命令(Linux、OpenWrt、Synology DSM、FreeBSD、macOS):
# 名称取本机公网 IP
curl -fsSL https://raw.githubusercontent.com/huilang-me/cfsm-agent/main/install.sh | sh -s -- install -secret=SECRET -url=WORKER_URL
# 指定名称
curl -fsSL https://raw.githubusercontent.com/huilang-me/cfsm-agent/main/install.sh | sh -s -- install -secret=SECRET -url=WORKER_URL -name=hk-1
Windows(管理员 PowerShell),同样去掉 -id:
$script = "$env:TEMP\install-cf-probe.ps1"
Invoke-WebRequest -Uri "https://raw.githubusercontent.com/huilang-me/cfsm-agent/main/install.ps1" -OutFile $script -UseBasicParsing
PowerShell -ExecutionPolicy Bypass -File $script install -secret=SECRET -url=WORKER_URL -name=hk-1
V2.8.3 起默认使用独立项目 cfsm-agent,安装后服务名为 cf-probe。新增服务器后建议直接从管理后台复制安装命令,后台会按目标系统、服务器 ID、Worker 地址和当前参数生成完整命令。
完整安装路径、日志查看、状态检查和升级行为见 https://github.com/huilang-me/cfsm-agent。
| 参数 | 说明 | 默认值 |
|---|---|---|
-id |
服务器唯一 ID | 必填(开启自动发现时可省略) |
-name |
自动建号时的服务器名称 | 连接来源 IP(CF-Connecting-IP) |
-secret |
Agent 上报密钥,需要等于 API_SECRET |
必填 |
-url |
Worker 上报地址 | 必填 |
-collect_interval |
本机采集间隔;0 表示不额外采样 |
0 |
-interval |
上报间隔,单位秒 | 60 |
-ct / -cu / -cm / -bd |
自定义网络质量测试节点,支持 host[:port] |
内置节点 |
-reset_day |
月流量重置日 | 1 |
-rx_correction |
下行月流量校正,单位 GB | 空 |
-tx_correction |
上行月流量校正,单位 GB | 空 |
-collect_interval 控制本机额外采集频率,-interval 控制上报频率。上报越频繁,Workers 请求和 D1 写入越多。
支持 systemd --user 的 Linux 环境建议使用非 root 安装。后台安装命令可选择“当前用户”或“专用 cfsm 用户”:当前用户会直接执行安装,专用用户则会自动创建并切换到 cfsm。文件保存在该用户的 ~/.cf-probe/。
普通用户安装后,如需退出登录仍保持服务运行,请由 root 执行:
loginctl enable-linger 用户名
卸载时请选择原来的安装用户。OpenWrt、Alpine/OpenRC、Synology DSM 等不支持 systemd --user 的环境,请使用对应系统命令。
后台复制安装命令的目标系统支持选择 Docker,会生成如下容器命令(服务器 ID、Secret、Worker 地址已按当前服务器自动填充,镜像标签默认 latest,可在 Agent 版本栏自定义):
docker run -d --name cf-probe --restart=unless-stopped --network=host \
-v cf-probe-data:/data \
-e SERVER_ID=<服务器ID> -e SECRET='<API_SECRET>' -e WORKER_URL=https://<你的后台地址>/update \
ghcr.io/huilang-me/cfsm-agent:latest
采集间隔、上报间隔、Ping 节点、网卡、流量重置日、上下行校正等运行参数由 Agent 按 SERVER_ID 从后台动态拉取,无需在命令中重复指定;更换镜像标签即回退/升级到指定版本。卸载容器:
docker rm -f cf-probe && docker volume rm cf-probe-data
| 变量 | 必填 | 说明 |
|---|---|---|
API_SECRET |
是 | Agent 上报密钥;也是首次登录后台的默认密码 |
API_BASE |
否 | 前端请求的 Worker API 地址,多个用英文逗号分隔;用于多 Worker 聚合或前后端分离 |
CORS_ALLOWED_ORIGINS |
否 | 允许跨域访问 API 的来源,多个用英文逗号分隔 |
| 日期 | 榜单 | 排名 | 周期新增 | 总 STAR |
|---|