跳转到内容
Telemetry
浏览文档
指南更新于 2026年7月27日由 Telemetry 编辑团队和产品团队审核阅读约需 3 分钟

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

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

本页内容
  1. 设置Telemetry
  2. 创建 Express 应用程序
  3. 添加结构化错误中间件
  4. 查询并可视化错误
  5. 后续步骤

分析网络服务器错误

错误计数表明出现了问题。结构化上下文(路由、状态代码、发布和请求 ID)可帮助您识别出现问题的内容并将其与部署关联起来。

将 5xx 峰值与版本和 POST 结帐路由关联起来的 Web 服务器错误仪表板

最有用的错误事件会保留事件期间所需的维度。

在现代 Web 开发中,监控和日志记录是维护健壮且可靠的应用程序的关键方面。 Telemetry 允许开发人员跟踪各种事件和系统指标,这对于调试和改善用户体验至关重要。在这篇文章中,我们将探讨如何使用 Telemetry API 捕获并记录 Express.js Web 服务器中的所有错误。虽然本指南仅涵盖 Express,但这些想法适用于所有 Web 服务器,从 Rails 到 Elixir 等。

设置Telemetry

在记录任何数据之前,我们需要设置 Telemetry。在此示例中,我们将使用 Telemetry JavaScript SDK。

首先,在您的项目中安装 Telemetry SDK:

npm install telemetry-sh

然后,使用 API 密钥在应用程序中初始化 Telemetry 客户端:

import telemetry from "telemetry-sh";

telemetry.init("YOUR_API_KEY");

创建 Express 应用程序

接下来,让我们设置一个基本的 Express 应用程序。如果您尚未安装 Express,可以使用以下命令将其添加到您的项目中:

npm install express

现在,创建一个简单的 Express 服务器:

const express = require('express');
const app = express();
const port = 3000;

app.get('/', (req, res) => {
  res.send('Hello World!');
});

app.listen(port, () => {
  console.log(`Example app listening at http://localhost:${port}`);
});

添加结构化错误中间件

错误处理程序属于所有路由之后。捕获安全类别和操作上下文,而不是可能包含私有值的原始主体、凭据、堆栈跟踪或异常消息。

const express = require("express");
const telemetry = require("telemetry-sh");

telemetry.init(process.env.TELEMETRY_API_KEY);

const app = express();

app.get("/api/projects/:id", async (req, res) => {
  throw Object.assign(new Error("Synthetic failure"), {
    code: "PROJECT_LOOKUP_FAILED",
  });
});

app.use(async (err, req, res, next) => {
  const statusCode = Number(err.statusCode) || 500;

  await telemetry.log("api_request_failed", {
    route_template: req.route?.path ?? "unmatched_route",
    method: req.method,
    status_code: statusCode,
    status: "error",
    error_type: err.constructor?.name ?? "Error",
    error_code: err.code ?? "UNCLASSIFIED_ERROR",
    request_id: req.get("x-request-id") ?? "missing",
    release: process.env.APP_RELEASE ?? "unknown",
  });

  res.status(statusCode).json({ error: "Request failed" });
});

app.listen(3000);

使用 /api/projects/:id 等路由模板,而不是包含客户标识符的原始路径。当这些失败对工作流程很重要时,请保持处理的 4xx 和 5xx 响应的事件架构相同。

查询并可视化错误

从按路线和版本划分的故障率开始,然后保留最近事件表以供调查:

SELECT
  route_template,
  release,
  status_code,
  error_code,
  COUNT(*) AS failures,
  MAX(timestamp_utc) AS last_seen_at
FROM api_request_failed
WHERE timestamp_utc >= now() - INTERVAL '24 hours'
GROUP BY route_template, release, status_code, error_code
ORDER BY failures DESC, last_seen_at DESC;

为了获得真实的错误率,请使用共享的 statusstatus_code 字段将成功和失败的请求记录到同一个表中。仅故障表可以对错误进行排名,但无法提供分母。

后续步骤

使用 API 路由配方错误率 进行分母安全查询、示例可视化、仪表板布局和告警指导。将其与 API 延迟百分位 配对,以便事件视图涵盖正确性和速度。

相关功能

记录稳定的事件名称、类型明确的字段,以及经过隐私审核的上下文。

页面作者和参考资料

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

我们如何审核文档