跳转到内容
Telemetry
实用结构化日志记录指南

围绕问题而不是字符串构建的结构化日志管理

将重要的应用程序结果建模为类型化 JSON 事件。将调试、测量和改进工作流程所需的上下文放在一起,然后使用可读的 SQL 将这些事件转化为团队可以验证的结果。

工作流程

  1. 1仪表化已完成的工作单元
  2. 2摄取类型化、注重隐私的 JSON
  3. 3查询明确的业务问题
  4. 4将结果共享为图表、仪表板、导出或警报

定义

结构化日志管理有何变化

传统的应用程序日志对于描述本地执行很有价值,但重要的问题通常会跨越许多消息:结账是否完成?哪些账户受到影响?重试恢复了吗?新版本是否改变了延迟?结构化事件将结果及其分析上下文记录为一个类型对象。

结构化日志管理是定义这些对象、控制其架构和隐私边界、将它们保留为可查询表以及操作结果搜索、SQL 查询、可视化、仪表板和警报的实践。它补充了跟踪和指标;它并不要求每条调试消息都成为业务事件。

有用的事件赢得它的字段

从问题和决定开始。每个字段都应该有助于过滤、分组、关联、计算、保护或解释工作流程。无限制的有效负载会带来成本和隐私风险,并且无法保证更好的答案。

文本日志和结构化事件

不同的形状适合不同的工作

关注面向消息的日志规范结构化事件
主要单位关于本地代码路径的一条消息一项已完成的工作流程或有意义的状态更改
背景通常分布在许多线路和服务中稳定的标识符、结果、持续时间和维度
分析搜索和解析模式类型过滤器、组、连接、百分位数、漏斗和群组
模式隐含在散文和格式中具有明确类型、单位和允许值的命名字段
JSON

规范的完成事件

json
{
  "event": "checkout_completed",
  "timestamp": "2026-07-28T18:42:16Z",
  "request_id": "req_01K1A9",
  "account_id": "acct_812",
  "plan": "growth",
  "status": "success",
  "duration_ms": 842,
  "amount_usd": 129.00,
  "payment": {
    "provider": "stripe",
    "attempt": 1
  }
}

活动合约

保持分析持久性的设计规则

选择决策边界

当请求、作业、Webhook、智能体运行、账单更改或产品里程碑达到某人可能需要解释的结果时发出事件。

一次捕获足够的上下文

包括稳定事件名称、UTC 时间、状态、持续时间、环境、发布、安全标识符以及已知问题所需的有界维度。

保护区类型和单位

将数字保留为数字,将布尔值保留为布尔值,将单位保留在字段名称中。避免稍后解析消息字符串中的延迟、金钱或计数。

限制敏感内容

排除机密、凭据、授权标头、原始提示、付款详细信息和不必要的个人数据。更喜欢分类错误上下文。

DataFusion SQL

将事件转化为可操作的答案

sql
SELECT
  date_trunc('hour', timestamp_utc) AS hour,
  COUNT(*) AS checkouts,
  SUM(CASE WHEN status = 'success' THEN 1 ELSE 0 END) AS succeeded,
  ROUND(
    100.0 * SUM(CASE WHEN status = 'success' THEN 1 ELSE 0 END)
      / NULLIF(COUNT(*), 0),
    2
  ) AS success_rate_pct,
  approx_percentile_cont(duration_ms, 0.95) AS p95_duration_ms
FROM checkout_events
WHERE timestamp_utc >= now() - INTERVAL '24 hours'
GROUP BY date_trunc('hour', timestamp_utc)
ORDER BY hour;

一起解读趋势和分母

14:00
99.4%
15:00
98.9%
16:00
94.7%
17:00
97.8%

图表显示 16:00 的变化;同一查询保留结帐计数和 p95 持续时间以供解释。仅在确认分母足够大后,才能按版本、提供商、计划或帐户细分受影响的时间。

调查顺序

  1. 1.检测速率、延迟、成本或数量方面的有意义的变化。
  2. 2.确认时间窗口、分母和事件新鲜度。
  3. 3.通过有限的所有权或推出维度来分解变更。
  4. 4.检查相关事件中受影响的请求或帐户。
  5. 5.保存经过验证的查询并记录响应。

添加埋点

使用结构化日志记录和架构指南来定义安全的类型化事件契约。

打开埋点指南

分析

从经过测试的 SQL 模式开始,以确保可靠性、工作、产品、收入、AI 或数据质量。

浏览 SQL 查询示例

操作

在将结果提升到仪表板或警报之前验证摄取和查询行为。

排除摄取故障

从一个工作流程开始

发送合成事件并回答第一个问题

在跨应用程序扩展检测之前,使用安全测试数据证明事件契约。

探索结构化事件