视频加载失败

【开源分享】CF-Workers-Monitor:给 Cloudflare 免费用量装上仪表盘与告警

1393 字
7 分钟
【开源分享】CF-Workers-Monitor:给 Cloudflare 免费用量装上仪表盘与告警

手上跑着不少 Cloudflare 上的小项目——本站博客本身就托管在 Pages 上,再加上各种随手写的 Worker 玩具,免费用量的消耗方越来越多。

Cloudflare 免费档其实相当大方,但额度藏在各产品的仪表盘深处:要看 KV 写了多少次、D1 扫了多少行,得在不同页面间来回跳转,而且默认没有任何告警。一旦哪个脚本失控刷爆额度,轻则当天服务中断,重则直接产生账单——对于白嫖党来说,这两种结局都很难接受。

于是自己动手,做了一个用量监控工具:CF-Workers-Monitor,折腾整理后开源分享出来。


它能做什么?#

CF-Workers-Monitor 仪表盘总览:多账户多产品用量一屏展示
CF-Workers-Monitor 仪表盘总览:多账户多产品用量一屏展示

项目分为两个独立部署单元,各司其职:

① Pages 仪表盘——实时可视化

  • 多账户支持:通过一个 EDGE 环境变量配置任意多个 Cloudflare 账户,首页总览全局统计,也可下拉切到单个账户细看。
  • 多产品用量:Workers 请求 / 错误 / 子请求 / CPU 耗时、KV 读写与存储、R2 的 A 类 / B 类操作与存储、D1 读写行数与存储、Pages 构建次数,一个页面全部展示。
  • 自动刷新与缓存:前端每 60 秒自动更新,服务端另有 60 秒缓存 + 多账户并发查询,响应快又不浪费 API 调用。
  • 亮暗主题、移动适配:原生 HTML/CSS/JS 实现,无框架依赖,手机上看也不局促。

② 监控 Worker——定时阈值告警

  • Cron 自动执行:默认每小时整点检查一次,无需打开页面。
  • 手动触发:生产环境没有手动触发定时任务的按钮,所以 Worker 额外留了 /run 接口——浏览器或 curl 访问一次即可立即执行一轮监控(接口未设鉴权,会重复消耗 GraphQL 取数额度,建议仅偶尔手动使用);顺带 / 路径会返回上次运行与推送状态,可当存活探针用。
  • 多级阈值告警:用量跨越预设阈值(如免费额度的 50% / 80% / 95%)时自动推送,阈值可按产品、按指标用环境变量逐项覆盖。
  • 按账户独立监控:每个账户单独判断、各自触发,不会互相淹没。
  • 按产品周期去重:Workers/KV/D1 按日、R2 按账单周期、Pages 构建按自然月,同一阈值一个周期只提醒一次,不会每小时轰炸。
  • 双渠道推送:Server酱(微信)与 Telegram Bot,可分别开关。
  • 省额度设计:KV 写入免费额度每天只有 1 千次,所以监控状态做了克制——低于最低阈值时不读 KV、只在跨越新阈值时才写入,监控自己不会成为额度大户。

部分计费指标的免费额度与默认告警阈值:

指标免费额度周期默认告警阈值
Workers 请求10 万/天日5 万 / 8 万 / 9.5 万
KV 读取10 万/天日5 万 / 8 万 / 9.5 万
KV 写入1 千/天日800 / 950
R2 A 类操作100 万/账期账期80 万 / 95 万
D1 读取行数500 万行/天日400 万 / 475 万
Pages 构建500 次/月自然月250 / 400 / 475

完整指标表(含 KV/R2/D1 存储及阈值覆盖方式)见仓库内的详细文档。


快速上手#

前提:Cloudflare 账户 + API 密钥(Account Analytics: Read,可加 Pages: Read)与账户 ID。

Terminal window
pnpm install
# ① Pages 仪表盘
pnpm dev:pages # 本地预览(http://localhost:8788)
pnpm deploy:pages # 部署到 Cloudflare Pages
# ② 监控阈值通知 Worker
pnpm dev:monitor # 本地运行(http://localhost:8787)
pnpm deploy:monitor # 部署到 Cloudflare Worker
pnpm secret:put EDGE # 设置敏感变量(其余令牌同理)

配置三件事:① 准备好 EDGE 账户数组(仪表盘与监控共用格式);② 新建 KV 命名空间并把 ID 填入 monitor/wrangler.toml;③ 在 Worker 控制台添加 Cron 触发器(如每小时 0 * * * *)。每个部署单元的详细步骤都写在仓库文档里,照着走即可。


一些设计取舍#

  • 为什么拆成两个部署单元? Pages Functions 不支持 Cron 定时触发器,监控必须放在独立的 Worker 上运行——索性按职责拆开:仪表盘走 Pages 托管静态资源 + Functions 查数据,监控走 Worker + Cron,互不干扰。
  • 账期 ≠ 自然月:Cloudflare 的月度额度按订阅账单周期重置,不一定从每月 1 号算起。工具会读取订阅接口拿真实账期来统计 R2 用量,读取失败时降级为自然月并推送一条告警提醒;Pages 构建额度则官方明确按自然月,单独处理。
  • 数据来源:全部走 Cloudflare 官方 GraphQL 分析接口,存储类指标取最新时间窗的最大值汇总,与官方账单口径保持一致。
  • 项目来源:本项目源自社区一个同名的开源监控工具,在其基础上大量扩展重构——新增了 KV / R2 / D1 / Pages 构建的多产品监控、账期统计、多账户独立告警、周期去重与多渠道推送——现已独立维护。致敬原作者的出色工作。

第一次给”看住钱包”这种需求造轮子,代码仓库已开放:

👉 GitHub:CF-Workers-Monitor

欢迎在仓库提交 Issue 反馈 bug 或优化建议;如果这个工具刚好帮你守住了信用卡,不妨顺手点个 Star 支持一下。

文章分享

如果这篇文章对你有帮助,欢迎分享给更多人!

【开源分享】CF-Workers-Monitor:给 Cloudflare 免费用量装上仪表盘与告警
https://awakaze.com/posts/cf-workers-monitor/
作者
awakaze
发布于
2026-09-10
许可协议
CC BY-NC-SA 4.0

评论区

Profile Image of the Author
awakaze
Hello, I'm awakaze.
公告
浮沫生灭,本无定形;随风而逝,不着痕迹。不过是在归空的间隙,记下几段转瞬即逝的微末造物。
分类
标签
最新动态
站点统计
文章
4
分类
3
标签
11
总字数
5,292
运行时长
0 天
最后活动
0 天前
站点信息
构建平台
Cloudflare Pages
博客版本
Firefly v6.16.6
文章许可
CC BY-NC-SA 4.0