可观测性

可观测性是通过系统输出理解内部状态的能力。常见遥测数据包括日志、指标和链路追踪。三者相互关联,但用途不同:日志保存离散事件,指标展示聚合趋势,追踪描述一次请求跨组件的路径。

采集数据的目标不是越多越好,而是能够回答“发生了什么、影响多大、从哪里开始、如何恢复”。

日志

结构化日志使用固定字段,而不是把所有信息拼成一段文本。建议包含时间、级别、服务名、请求编号、事件编号、接口、状态和耗时。

{
  "time": "2026-07-21T08:00:00Z",
  "level": "info",
  "service": "api-gateway",
  "trace_id": "...",
  "request_id": "...",
  "event": "request.completed",
  "duration_ms": 83
}

异常日志要记录错误分类和关键上下文,但避免重复输出大段正文或敏感字段。

指标

接口常见指标包括请求量、错误率和延迟分布。只看平均延迟会掩盖少量很慢的请求,因此通常还观察分位数。后台任务还需要队列长度、最老任务等待时间、重试次数和最终失败数。

类别示例
流量每分钟请求量、事件接收量
错误4xx、5xx、验签失败、状态冲突
延迟接口响应、依赖调用、任务处理时间
饱和度连接池、线程池、队列和数据库连接使用率

链路追踪

链路追踪为一次请求生成 trace,并把每个组件中的处理片段记录为 span。上下游通过标准上下文传递关联信息,从而看到请求在网关、应用、数据库和消息任务之间的路径。

请求编号适合用户或运维定位单条记录,trace 编号适合关联一次分布式调用。两者可以同时存在,不必使用同一个值。

告警

告警应围绕用户影响和系统容量,而不是每条错误日志。持续错误率、延迟分位数、队列积压和关键状态停留时间通常比单次异常更有意义。

告警需要包含服务、时间范围、当前值、阈值和排查入口。没有行动路径的告警只会增加噪声。

数据边界

遥测平台同样需要访问控制、保留期限和脱敏规则。日志字段在写入前就应最小化,不能寄希望于后续搜索时再隐藏。

采样可以控制追踪成本。普通成功请求按比例采样,错误或高延迟请求提高采样率,但仍要避免采集完整密钥和认证信息。

参考资料