教程 / 后端集成 / 使用 Better Stack 进行可用性监控
📝 文字 ● 初级 更新于 2026-05-13

使用 Better Stack 进行可用性监控

在你的客户之前发现网站宕机。注册账号、填入 URL、选择通知方式即可上手。免费套餐支持 10 个监控项,每 3 分钟检测一次。

可用性监控与错误追踪有何不同

0

你已经用 Sentry 来追踪应用内部的错误了。它能告诉你应用代码在哪里崩溃,但它无法告诉你:

  • 服务器宕机了(根本没有应用在运行)。
  • DNS 配置错误(请求根本没到达应用)。
  • TLS 证书过期(浏览器拒绝连接)。
  • CDN 服务商出现故障。
  • 托管账户被暂停。

以上这些都需要外部监控——从外部定期轮询你的网站,当无法访问时立即通知你。成本极低,但物超所值。

何时选择 Better Stack(以及备选方案)

1
  • 选择 Better Stack 的场景 — 你希望一个产品同时覆盖监控、值班排班、状态页面和日志管理。界面现代,免费套餐慷慨。
  • 选择 UptimeRobot ↗——最物美价廉的选项(免费套餐支持 50 个监控项)。
  • 选择 Pingdom ↗——历史最悠久、企业最信赖的品牌。
  • 选择 Datadog Synthetics ↗——如果你已经在使用 Datadog 进行应用监控。
  • 选择状态页面服务Statuspage ↗Instatus ↗)——仅用于对外沟通时。

Better Stack 用一个工具涵盖了大部分需求,适合还不需要为每个功能单独引入供应商的阶段。

注册账号

2

前往 betterstack.com ↗ 注册。免费套餐:10 个监控项、3 分钟检测间隔、每月 30 条 SMS 额度、1 个状态页面、1 GB 日志存储。

如果只需要可用性监控,选择 Uptime 产品即可。Better Stack 还提供 Logs(日志管理)和 Telemetry(APM)两个独立产品,初期可以忽略。

添加第一个监控项

3

进入控制台 → Monitors → Create monitor,配置以下参数:

  • URL — 要检测的地址,填写真实的生产环境 URL。
  • 检测频率 — 每 30 秒(付费)或每 3 分钟(免费)。检测越频繁,告警越及时。
  • HTTP 方法 — 默认 GET。健康检查接口也可以用 POST 或 HEAD。
  • 检测区域 — Better Stack 从多个地理位置同时发起检测,只有多个区域都报告不可达时才触发告警,避免单个节点误报。
  • 预期状态码 — 通常是 200。如果你的健康接口返回 204,相应修改即可。
  • 预期响应内容(可选)— 用于内容校验。"如果响应中不包含 'OK' 则告警。"
  • SSL/TLS 检查 — 证书在距离过期 N 天时发出告警,默认 14 天。建议始终开启。

保存后,Better Stack 立即开始检测。

为应用添加健康检查接口

4

直接监控主页也行,但专用的健康检查接口更好——它能验证应用本身和关键依赖是否正常运行,而不只是某个页面能返回 HTML。

// Node + Express
app.get("/api/health", async (req, res) => {
  try {
    // Check DB
    await db.raw("SELECT 1");
    // Check Redis / queue / etc.
    // await redis.ping();
    res.status(200).json({ status: "ok" });
  } catch (err) {
    res.status(503).json({ status: "degraded", error: err.message });
  }
});

将 Better Stack 指向 https://yourdomain.com/api/health。这样,当应用或其依赖出现问题时就会触发告警,而不只是前端页面加载失败时。

配置通知渠道

5

默认情况下,Better Stack 会通过邮件通知你。对于真正的值班体系,还需要接入更多渠道:

控制台 → On-call → Integrations,可接入:

  • Slack / Microsoft Teams — 告警触发时,机器人在频道里发消息。
  • 电话呼叫 — Better Stack 直接打电话给你(消耗 SMS 额度)。
  • SMS — 短信通知。
  • 推送通知 — 通过 Better Stack 移动端 App 接收。
  • PagerDuty / Opsgenie — 如果你已有自己的值班编排工具。
  • Discord — Webhook 集成。
  • Webhook — 用于任何自定义场景。

个人项目用推送通知 + Slack 就够了。面向真实用户的生产环境,建议再加上 SMS 或电话作为升级通知手段。

设置升级策略

6

如果你没有立即收到告警,或者收到后没有确认,接下来会发生什么?

控制台 → On-call → Escalation policies,定义一条升级链:

  1. 立即 — 推送通知 + Slack。
  2. 5 分钟后未确认 — SMS。
  3. 10 分钟后 — 电话呼叫。
  4. 15 分钟后 — 升级给团队成员。

初期不必配置这些。随着业务增长、宕机代价越来越高时再逐步完善。

确认并解决告警

7

告警触发后,你会通过所有已配置的渠道收到通知。打开 Better Stack,点击 Acknowledge,停止后续通知,表示你已在处理。

网站恢复后:Better Stack 在下一次成功检测时自动标记告警为已解决。你还可以在告警详情页添加事后复盘备注。

免费套餐(3 分钟检测间隔)平均检测延迟约 3 分钟;付费套餐(30 秒间隔)约 30 秒。

发布状态页面

8

故障期间对外沟通同样重要。Better Stack 提供免费状态页面,可根据监控数据自动更新。

控制台 → Status pages → Create status page

  • 选择要公开展示的监控项,隐藏内部监控。
  • 按服务对监控项分组("API"、"Web"、"CDN")。
  • 自定义域名:在你的 DNS 服务商 处添加 CNAME,指向 status.yourdomain.com
  • 自定义颜色、Logo 和页面标题。
  • 订阅功能:访客可订阅邮件、SMS 或 RSS 更新。

手动发布故障更新("结账服务出现异常,正在排查"),这些内容会同步显示在状态页面并推送给订阅者。

心跳监控 — 用于定时任务和异步作业

9

"我的每日备份脚本有没有跑?"可用性监控检测的是入站 HTTP;心跳监控检测的是出站 Ping 是否缺失。

控制台 → Heartbeats → Create heartbeat,配置预期间隔(例如每 24 小时 ± 1 小时)。Better Stack 会给你一个唯一 URL。

在定时任务或脚本中,每次成功执行后 Ping 该 URL:

#!/usr/bin/env bash
./run-backup.sh && curl -s https://uptime.betterstack.com/api/v1/heartbeat/xxxxxxxx

如果 Better Stack 在预期时间内没有收到 Ping,就会触发告警。非常适合捕捉那些悄悄失败的定时任务。

带响应校验的 API 监控

10

对于 API 而言,"返回 200" 还不够——你还需要验证响应结构没有被破坏。

监控配置 → Advanced → Expected response body,填入要匹配的字符串或正则表达式,例如:

Expected response body: "\"status\":\"ok\""

也可以使用 JSON 断言:验证 $.user.id 存在、$.health 等于 "ok" 等。即使状态码是 200,只要响应结构被破坏就会触发告警。

常见陷阱

11
  • 部署期间触发告警 — 部署时网站会短暂中断。解决方案:(1)在部署脚本中通过 API 临时暂停 Better Stack 监控;(2)采用零停机部署策略。
  • 任务失败时心跳仍在 Ping — 确保脚本只在成功时发送 Ping(用 && 而不是 ;)。否则备份实际失败,但心跳仍显示"正常"。
  • 告警疲劳 — 如果你有 20 个监控项,其中 5 个频繁抖动,真正的故障就会被忽视。修复抖动的监控(调整检测频率、阈值或底层问题),否则你会慢慢习惯无视告警。
  • 单个区域误报 — Better Stack 默认在 2 个以上区域都报告宕机时才告警,但这个阈值可以调整。如果某个区域持续误报,可以将其从该监控项中移除。
最快不代表最好。30 秒检测能更快发现故障,但会消耗更多月度检测配额。对于大多数个人或小型项目,3 分钟间隔完全够用——无论如何,你都会在 5 分钟内得知宕机情况。

定价说明

12

免费版:10 个监控项、3 分钟间隔、每月 30 条 SMS、状态页面。团队版:$25/月 — 50 个监控项、30 秒间隔、100 条 SMS。专业版:$80/月 — 全面升级。Better Stack 定价 ↗

免费套餐足以应对大多数独立项目。当告警量达到需要升级的规模时再考虑付费。

官方参考文档

下一步