一个运行在 Cloudflare Workers 和 D1 数据库上的高性能、无服务器(Serverless)状态监控工具。 无需购买服务器,利用 Cloudflare 强大的全球边缘网络监控您的网站和 API。
- 完全无服务器: 部署在 Cloudflare Workers 上,依托 Cron Triggers 定时触发,成本极低(个人使用通常免费)。
- 多协议支持: 支持 HTTP(S) (GET/HEAD) 和 TCP 端口监控。
- 内置状态页: 自带美观的单页应用 (SPA) 状态页,展示实时可用性和历史趋势。
- 通知系统:
- 邮件: 通过 Resend 发送告警邮件。
- Webhook: 支持自定义回调 URL,可对接飞书、钉钉、Telegram 等。
- 高级配置:
- 防抖动 (Grace Period): 连续失败多次才报警,避免网络波动导致的误报。
- 自定义验证: 支持自定义 HTTP 状态码验证(如 200, 201, 204)。
- 分组与标签: 灵活对监控项进行分组和打标签(支持自定义颜色)。
- 故障公告: 支持在配置文件中手动添加维护公告或故障说明。
小白也能轻松上手的部署指南。
- 一个 Cloudflare 账号。
- 本地安装了 Node.js 环境。
- 安装并登录 Wrangler CLI:
npm install -g wrangler wrangler login
git clone https://github.com/your-username/CF-Worker-Uptime.git
cd CF-Worker-Uptime
npm install我们需要一个 D1 数据库来存储监控历史。运行以下命令:
npx wrangler d1 create uptime-dbdatabase_id,复制它!
打开项目根目录下的 wrangler.jsonc 文件,找到 d1_databases 部分,替换 database_id:
将数据表结构写入数据库:
npx wrangler d1 execute uptime-db --file=./schema.sql --remoteconfig.yaml 是本项目的核心配置文件。你可以直接修改它来添加你要监控的网站。
# 编辑配置文件
code config.yaml(详细配置说明请见下文 ⚙️ 配置详解)
npx wrangler deploy部署完成后,你会获得一个 https://uptime-monitor.你的子域.workers.dev 的链接,访问它即可看到你的状态页!
config.yaml 拥有丰富的功能,以下是一些特色字段的详细介绍:
| 字段 | 说明 | 推荐值 |
|---|---|---|
title |
状态页的标题 | "我的服务监控" |
notification_on_down_only |
🌟 特色: 如果设为 true,则只在服务挂掉 (DOWN) 时发送通知,恢复时不再发送。适合不想被恢复通知打扰的用户。 |
true |
summary_exclusion |
🌟 特色: 在这里填入分组 ID,该分组将不会计入页面顶部的"系统整体状态"。适合用于监控一些非核心服务(如测试环境)。 | ["test_group"] |
callback_url |
通用 Webhook 地址,状态变更时会向此 URL 发送 POST 请求。 | "" |
每个监控项都有很多可调参数:
monitors:
- id: "blog_main"
name: "个人博客"
type: "http" # 支持 'http' 或 'tcp'
url: "https://blog.example.com"
method: "HEAD" # 使用 HEAD 请求可以减少流量消耗
timeout: 5000 # 超时时间 (毫秒)
expected_latency: 500 # 期望延迟,虽然目前不影响状态,但用于图表参考
# 🌟 特色: 防抖动机制
# 只有连续失败 3 次,才会判定为 DOWN 并发送通知
grace_period: 3
# 🌟 特色: 自定义验证
validation:
status: [200, 301, 302] # 允许的状态码列表
display:
chart: true # 是否显示延迟图表
public_link: true # 点击名称是否跳转你可以在 config.yaml 中手动发布故障信息或维护计划,它们会置顶显示在状态页。
incidents:
- id: "incident-001"
title: "数据库维护"
type: "maintenance" # maintenance (维护) 或 incident (故障)
status: "in_progress" # scheduled, in_progress, completed, resolved
start_time: "2024-01-01T10:00:00Z"
affected_monitors: ["blog_main"] # 关联受影响的监控项 ID
updates:
- timestamp: "2024-01-01T10:00:00Z"
message: "正在进行数据库迁移..."
status: "in_progress"本项目集成了 Resend 邮件服务(免费额度足够个人使用)。
- 注册 Resend 并获取 API Key。
- 在 Cloudflare Workers 设置 Secret 环境变量(为了安全,不要写在代码里):
# 设置 API Key
npx wrangler secret put RESEND_KEY
# (输入你的 Resend API Key)
# 设置发件人 (必须在 Resend 验证过域名)
npx wrangler secret put RESEND_SEND
# (输入如: alert@yourdomain.com)
# 设置收件人
npx wrangler secret put RESEND_RECEIVE
# (输入你的邮箱)在 config.yaml 中配置 callback_url。当状态发生变化时,Worker 会向该 URL 发送如下 JSON:
{
"monitor_id": "google",
"status": "DOWN",
"time": 1704364800000,
"incident_id": "..."
}你可以使用 Serverless 函数或自动化工具(如 n8n, IFTTT)接收此 Webhook 并推送到任意平台。
-
本地运行:
npx wrangler dev
这会在本地启动服务,方便调试 UI 和逻辑。
-
查看实时日志:
npx wrangler tail
如果部署后发现不工作,可以使用此命令查看线上报错。
Cloudflare Workers 的 Cron Triggers 默认配置在 wrangler.jsonc 中:
"triggers": {
"crons": ["* * * * *"] // 默认为每分钟执行一次
}如果需要修改频率,请更改此处的 Cron 表达式。