可观测性
可观测性是通过系统输出理解内部状态的能力。常见遥测数据包括日志、指标和链路追踪。三者相互关联,但用途不同:日志保存离散事件,指标展示聚合趋势,追踪描述一次请求跨组件的路径。
采集数据的目标不是越多越好,而是能够回答“发生了什么、影响多大、从哪里开始、如何恢复”。
日志
结构化日志使用固定字段,而不是把所有信息拼成一段文本。建议包含时间、级别、服务名、请求编号、事件编号、接口、状态和耗时。
{
"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 编号适合关联一次分布式调用。两者可以同时存在,不必使用同一个值。
告警
告警应围绕用户影响和系统容量,而不是每条错误日志。持续错误率、延迟分位数、队列积压和关键状态停留时间通常比单次异常更有意义。
告警需要包含服务、时间范围、当前值、阈值和排查入口。没有行动路径的告警只会增加噪声。
数据边界
遥测平台同样需要访问控制、保留期限和脱敏规则。日志字段在写入前就应最小化,不能寄希望于后续搜索时再隐藏。
采样可以控制追踪成本。普通成功请求按比例采样,错误或高延迟请求提高采样率,但仍要避免采集完整密钥和认证信息。