Skip to content

05 · 可观测性基础设施:日志/指标/告警 ​

发布只是开始,线上到底怎么样靠可观测性回答。本篇讲日志、指标、告警三件套怎么搭、怎么定告警规则、怎么控制成本。先给结论:可观测性不是"多上几个监控系统",而是三个信号(日志/指标/追踪)各有分工,加上"会叫的告警"。

速览卡 ​

项内容
一句话定位把"线上发生了什么"变成可查询、可告警、可追溯的基础设施
核心内容三信号分工、日志采集、指标与 SLO、告警规则、成本与演进
读完能回答日志、指标、追踪各解决什么?告警怎么定才不吵又不漏?
相关板块C08 · 可观测性 | D04 · Linux 入门 | A12 · 前端可观测性

一、先给结论:三个信号,各管一段 ​

信号回答类比前端
日志具体某次发生了什么console.log + 上报
指标现在整体什么水位性能面板的曲线
追踪一次请求经过了哪些服务接口调用链

一句话:指标告诉你"变慢了",日志告诉你"为什么慢",追踪告诉你"慢在哪一环"。三者配合才是可观测。


二、日志:采集、结构化、检索 ​

2.1 采集路径 ​

text
应用打 stdout → 采集器(如 Vector/Fluent Bit)→ 存储(Loki/ES)→ 查询面板

2.2 结构化日志 ​

json
{"ts":"2026-10-13T10:00:00Z","level":"ERROR","service":"order-api","trace_id":"abc","msg":"order failed"}
要点说明
JSON 结构化方便按字段检索,别纯文本拼字符串
带 trace_id关联请求与追踪,跨服务串起来
级别收敛ERROR 才告警,DEBUG 别进生产
不落敏感信息手机号/密码脱敏(见 S05)

成本意识:日志存量大、检索慢、贵。给日志设保留期(如 30 天)和采样策略(如 DEBUG 不存),别把全量日志当指标用。


三、指标与 SLO:把"健康"定义出来 ​

3.1 黄金四信号 ​

信号含义
延迟请求多快返回(分位如 p95)
流量每秒多少请求
错误5xx/4xx 比例
饱和度CPU/内存/连接是否快满

3.2 SLO 是把体验变成数字 ​

text
目标:99.9% 的请求 p95 延迟 < 500ms
概念说明
SLI实际测到的指标(p95 延迟)
SLO目标承诺(99.9% 达标)
错误预算允许出错的额度,用完了要收敛发布

为什么 SLO 有用:它把"我们要多稳定"量化,让团队能回答"这周能不能发版"。


四、告警:会叫但不吵 ​

4.1 告警原则 ​

text
告警 = 需要人行动的异常,不是"信息"
坏告警好告警
磁盘 > 50% 就报警磁盘 > 85% 且持续 15 分钟才报
每台机都单独报服务维度聚合,去重
只有触发没有说明附 runbook:先看什么、找谁、怎么缓解

4.2 告警四问 ​

  1. 这个信号变化代表用户体验受损吗?
  2. 触发后人有明确动作吗?
  3. 有对应的排查文档/runbook 吗?
  4. 会误报还是漏报?怎么调阈值?

告警疲劳是真实风险:报警太多,人会选择性无视。宁可少而准,配 runbook。


五、追踪:跨服务定位慢请求 ​

text
一次下单 → API 网关 → 订单服务 → 支付服务 → 数据库
              每段都记录 trace_id 与耗时
术语含义
Trace一次完整请求
Span其中一段(一个服务/一次 DB 调用)
Trace ID贯穿全链路的标识

前端对照:像 DevTools 的 Performance 面板,只是跨了进程。后端排障"接口慢"时,先看追踪找最慢的 span,而不是猜。


六、落地与成本:从最小可行开始 ​

阶段做什么工具示例
1结构化日志 + 查询Loki + Grafana
2关键指标 + 基础告警Prometheus + Alertmanager
3请求追踪OpenTelemetry + Jaeger/Tempo
4SLO 与错误预算指标 + 告警联动

演进原则:先解决"出事了能查到",再谈 SLO。别一上来就上全家桶,成本和维护会压垮小团队。


七、自检清单 ​

  • [ ] 日志结构化、带 trace_id、不落敏感信息
  • [ ] 有保留期与采样策略,成本可控
  • [ ] 定义了黄金四信号与至少一个 SLO
  • [ ] 告警少而准,每条带 runbook
  • [ ] 慢请求能靠追踪定位到具体服务/调用

八、常见误区 ​

误区事实
"监控系统多就是可观测"三信号配合 + 会叫的告警才是
"日志能当指标用"日志量大且不聚合,做指标成本高且慢
"告警越多越安全"告警疲劳会让真告警被忽略
"SLO 是运维的 KPI"它是让团队统一"稳定"定义的契约
"追踪是微服务才需要"单体里的慢 SQL/慢调用同样值得追踪

九、动手练习 ​

练习 A:日志结构化改造 ​

把自己服务的日志输出改成 JSON 格式,加 trace_id 与级别字段,用查询面板按字段过滤。

练习 B:定一条告警 ​

选一个关键指标(如 5xx 比例),设计阈值、持续时间、runbook 三项,说清为什么这样定。

练习 C:接一次追踪 ​

给一个二服务调用的 demo 接 OpenTelemetry,模拟慢请求,用追踪图指出最慢的 span。


相关文档 ​

本区 ​

其他域 ​