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

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

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

本页内容
  1. 从一个问题开始
  2. 保持合同稳定
  3. 保护敏感数据
  4. 验证事件

结构化日志记录指南

结构化日志记录将事件记录为命名字段,而不是将每个详细信息放在句子中。诸如 checkout failed for account 42 after 812 ms 之类的消息是可读的,但 SQL 必须先解析它,然后才能对故障进行分组或计算延迟。结构化事件分别存储event_nameaccount_idstatuserror_typelatency_ms

从一个问题开始

在选择字段之前写下操作或产品问题。 “哪个结帐步骤最常失败?”意味着稳定的步骤名称、状态、错误类别和时间戳。 “哪些客户受到影响?”还需要一个安全的帐户标识符。没有可能的过滤器、分组、计算或调试用途的领域可能是噪音。

优先选择有意义的边界内的一个事件:请求完成、作业用尽重试、Webhook 进行重复数据删除或用户达到激活里程碑。避免为同一工作流程的每个分支发出不同的表。一致的 status 场使成功和失败具有可比性。

await telemetry.log("checkout_completed", {
  checkout_version: "v2",
  account_id: account.id,
  status: "failed",
  error_type: "payment_declined",
  latency_ms: 812,
  attempt: 1,
});

保持合同稳定

使用 snake_case 名称、显式单位(例如 _ms_bytes)以及 UTC 时间戳。当您需要可靠的分组维度时,请存储 payment_declined 等类别,而不是完整的例外文本。保持事件中的标识符一致,以便可以通过系统跟踪请求、帐户、发布或作业。

不要默默地将字段从数字更改为字符串。如果其含义发生变化,请添加版本字段或新的事件契约。 事件架构设计指南 更详细地解释了命名、所有权和演变。

保护敏感数据

将每个新字段视为可能出现在查询结果、仪表板或导出中的数据。请勿发送凭据、cookie、授权标头、完整请求正文、付款详细信息或原始提示。与电子邮件和自由格式的用户内容相比,更喜欢内部标识符和受控类别。在活动施工边界应用许可名单;摄入后的脱敏是一种后备措施,而不是主要控制措施。

验证事件

使用合成数据练习成功、失败、超时和重试分支。检查结果表,确认字段类型,并运行引发事件的查询。然后,仅在结果与业务定义匹配后才创建可视化或告警。

继续使用 结构化日志管理指南典型的广泛事件结构化事件与文本日志,或从 SQL配方库 复制完整查询。

相关产品功能

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

内容责任与技术参考

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

查看编辑规范