可观测性三大支柱
1. 三支柱
| 支柱 | 回答的问题 | 数据形态 |
|---|---|---|
| Metrics(指标) | "发生了什么"——QPS 跌了 50% | 时间序列数字 |
| Logs(日志) | "细节是什么"——具体哪个用户 | 结构化文本事件 |
| Traces(链路) | "慢/错在哪"——哪个微服务 | 父子 span 树 |
三者协作:
- 指标告警 → 日志 / 链路定位 → 修复
2. Metrics
核心方法论:
2.1 RED(针对请求的服务)
- Rate:请求量
- Error:错误率
- Duration:延迟(P50/P95/P99)
2.2 USE(针对资源)
- Utilization:使用率
- Saturation:饱和度(队列长度)
- Error:错误数
2.3 SLO / SLI / SLA
- SLI(指标):99.9% 请求 < 1s
- SLO(目标):本月 SLI 达 99.5%
- SLA(合同):达不到给客户赔偿
错误预算(Error Budget)= (1 - SLO) 的服务时间。每月 99.9% = 43 分钟可挂。用完了停止 risky 变更。
3. Logs
详见 日志体系(ELK/Loki) 和模块 01 系统日志。
核心要求:
- 结构化:JSON,字段化,可检索
- 关联:每条日志带 traceId / requestId
- 分级:error / warn / info / debug
- 脱敏:不写密码、token、信用卡
4. Traces
核心:跨服务传递 traceId,构建 span 树。
5. 关联:黄金三角
工业级实践:用 traceId 串联三者。
用户报障 → 找时间 → 看 Grafana 错误率指标
↓ 异常
查 Loki 日志
↓ 看到 ERROR + traceId
Tempo 查 trace
↓ 看到具体哪个微服务
定位代码
Grafana 现在原生支持三者无缝跳转。
6. 实施路径(前端项目)
第 1 步:日志结构化
// pino 一行搞定
const logger = require('pino')()
logger.info({ userId, requestId }, '用户登录')
部署到 K8s → stdout → promtail → Loki。
第 2 步:基础指标
应用暴露 /metrics → Prometheus 抓取 → Grafana 看板。
最小集:
- HTTP RPS / 错误率 / P95 延迟
- Pod CPU / 内存
- Node CPU / 内存 / 磁盘
第 3 步:错误监控
接 Sentry。
第 4 步:链路追踪
OTel SDK + Collector + Tempo。
第 5 步:告警
Prometheus Alertmanager + 飞书 / Slack。
第 6 步:SLO
定义关键 SLO,按错误预算决策变更节奏。
7. 工具栈对比
7.1 全开源(自建)
Loki + Promtail + Grafana (logs)
Prometheus + Grafana + Alertmanager (metrics)
Tempo + OTel Collector (traces)
+ Sentry self-hosted (errors)
部署 Helm 一键,运维成本中等。
7.2 Grafana Stack
- Loki(logs)
- Prometheus / Mimir(metrics)
- Tempo(traces)
- Pyroscope(profiling)
- Alloy(统一 agent)
一站式 Grafana 全家桶。
7.3 商业 SaaS
| 厂商 | 特点 |
|---|---|
| Datadog | 最全,最贵 |
| New Relic | 中位 |
| Honeycomb | 高基数追踪强 |
| 阿里 ARMS | 国内 SaaS |
| 字节火山 APM | 国内云 |
省心但贵。中小团队 SaaS 快速上手 → 量大了自建。
8. 前端可观测性特殊点
后端三支柱 + 前端独有:
- RUM(Real User Monitoring):真实用户性能、错误(Sentry / 自建)
- Web Vitals:LCP / INP / CLS
- Session Replay:用户操作录制(Sentry / FullStory)
- API 调用追踪:fetch / XHR 自动 trace
- 路由切换性能
9. 数据保留策略
| 数据 | 推荐保留 | 成本 |
|---|---|---|
| 高分辨率指标 | 15 天 | 中 |
| 聚合指标 | 1-2 年 | 低 |
| INFO 日志 | 7-14 天 | 高 |
| ERROR 日志 | 30-90 天 | 中 |
| Trace(采样) | 7 天 | 中 |
| 审计日志 | 1-7 年(合规) | 低 |
10. 常见反模式
- 只有指标:错误率涨了 5%,但不知道是哪个用户哪个接口
- 只有日志:grep 一上午
- 只有错误监控:性能问题看不见
- 三者数据不互通:每个工具单独看,效率差
- 告警不可执行:发了警报但没说怎么处理
- SLO 拍脑袋:和业务无关
- 采样率拍脑袋:100% 烧钱,1% 漏
11. 延伸阅读
- 《Distributed Systems Observability》Cindy Sridharan(O'Reilly 免费)
- 《Observability Engineering》Charity Majors
- OpenTelemetry 官方
- Google SRE Book - Monitoring
- SLO 实战 - Grafana