跳转到内容
Telemetry
浏览文档

指南更新于 2026年10月2日阅读约需 4 分钟

让编程智能体使用这篇文档

打开 Claude Code、Codex、Cursor 或其他编码代理的集中提示包,然后将其适应此处介绍的工作流程。

本页内容
  1. 先决条件
  2. 1.安装Telemetry SDK
  3. 2、初始化Telemetry
  4. 3. 创建心跳检查
  5. 4. 安排心跳
  6. 5. 查询正常运行时间
  7. 6. 探索 Telemetry 的正常运行时间
  8. 后续步骤

监控网站正常运行时间

心跳记录成功和失败的检查。这使得中断变得可见,但也揭示了监控作业本身何时停止发送数据。

网站心跳时间线,包含成功检查、两次 HTTP 503 故障和一次十分钟事件

定期检查将停机时间和意外的沉默转变为可查询的事件。

使用 Telemetry SDK 为每次网站检查发送心跳,然后查询失败的检查和数据发送中断的时段。

先决条件

  • Telemetry 的有效 API 密钥
  • 对JavaScript和Node.js有基本了解

1.安装Telemetry SDK

首先,您需要在项目中安装 Telemetry SDK。如果您还没有这样做,请运行以下命令:

npm install telemetry-sh axios

2、初始化Telemetry

使用 Node.js 18 或更新版本。运行脚本前,在服务器环境中设置 TELEMETRY_API_KEY;不要将密钥放入浏览器代码。

import telemetry from "telemetry-sh";
import axios from "axios";

const apiKey = process.env.TELEMETRY_API_KEY;
if (!apiKey) throw new Error("Set TELEMETRY_API_KEY in server-side configuration");
telemetry.init(apiKey);

3. 创建心跳检查

要监控正常运行时间,您可以设置心跳功能,定期向 Telemetry 服务发送 ping。心跳将记录您网站的状态,使您可以监控其可用性。

这是心跳函数的基本示例:

const sendHeartbeat = async (url) => {
  const startedAt = performance.now();
  let heartbeat;

  try {
    const response = await axios.get(url, {
      timeout: 10_000,
      validateStatus: () => true,
    });
    const isOnline = response.status >= 200 && response.status < 400;
    heartbeat = {
      url,
      timestamp: new Date().toISOString(),
      status_code: response.status,
      status: isOnline ? "check_passed" : "http_error",
      is_online: isOnline,
      latency_ms: performance.now() - startedAt,
    };
  } catch {
    heartbeat = {
      url,
      timestamp: new Date().toISOString(),
      status_code: 0,
      status: "probe_error",
      is_online: false,
      error_type: "request_failed",
      latency_ms: performance.now() - startedAt,
    };
  }

  try {
    await telemetry.log("website_uptime", heartbeat);
  } catch {
    try { console.warn("Heartbeat export failed"); } catch {}
  }
  return heartbeat;
};

这是从单台主机进行的基本检查,并非生产环境可用性保证。只使用不含凭据或令牌的公开 URL。HTTP 2xx/3xx 满足此示例的检查条件;超时或传输失败表示探测失败,不能证明网站对所有人都不可用。Axios 的十秒超时不是严格的总时间上限。

事件导出单独等待,导出失败不会改变 HTTP 结果。此处 SDK 没有可配置的发送超时:导出阻塞可能延迟后续检查。生产环境应使用应用自行管理的有界队列或 HTTP 客户端隔离导出,并独立监控检查器。

4. 安排心跳

立即开始一次检查,并在当前检查和导出完成后安排下一次运行:

const urlToMonitor = "https://example.com"; // Replace with a public URL.
const interval = 5 * 60 * 1000;

async function runHeartbeat() {
  try {
    await sendHeartbeat(urlToMonitor);
  } catch {
    try { console.warn("Heartbeat check failed"); } catch {}
  } finally {
    setTimeout(runHeartbeat, interval);
  }
}

void runHeartbeat();

此调度器立即启动,等待一次检查和导出完成,再等待五分钟后开始下一次运行。它避免检查重叠,但时间会漂移;它不是固定五分钟周期或持久化调度器。

5. 查询正常运行时间

查询已记录探测中通过 HTTP 检查的比例:

const results = await telemetry.query(`
  SELECT
    url,
    COUNT(*) AS total_pings,
    SUM(CASE WHEN is_online THEN 1 ELSE 0 END) AS online_pings,
    (SUM(CASE WHEN is_online THEN 1 ELSE 0 END) * 100.0 / COUNT(*)) AS observed_check_success_percentage
  FROM
    website_uptime
  WHERE
    timestamp_utc >= now() - INTERVAL '30 days'
  GROUP BY
    url
`);

console.log(results);

查询计算已观测探测中通过检查的比例。缺失的计划检查不在分母中,因此它不是按实际经过时间计算的正常运行率或 SLA。使用预期检查登记表和独立监控器,区分覆盖缺失与已观测失败。

6. 探索 Telemetry 的正常运行时间

Telemetry 的 UI 允许您以交互方式可视化和探索正常运行时间数据。访问 Telemetry仪表板 并使用您的凭据登录,以根据您的正常运行时间监控数据创建仪表板、图表等。

后续步骤

正常运行时间百分比无法检测停止运行的监视器。添加 缺少心跳食谱 并在最新检查早于预期计划加上一小段宽限期时发出告警。

相关功能

将审核的 SQL 提升到自有阈值和响应工作流程中。

页面作者和参考资料

Telemetry 编辑团队负责维护本文;产品团队审核功能行为、示例和适用范围。

我们如何审核文档