第 7 章 · 可观测性实战
本章目标:落地 指标(Metrics)→ 日志(Logs)→ 告警(Alerts)→ SLO 四层可观测性;为 demo-api 建 Dashboard 与告警规则;用 traceId 串联日志;告别「用户先于我们发现问题」。
学时建议:2.5~3 小时(含 2 小时跟练)
前置:小紫云计算 · 运维 → 监控告警;架构 ch13 SLO 理论;ops-deploy ch05 日检告警项。
7.1 场景说明
| 项目 | 内容 |
|---|---|
| 背景 | demo-mall prod 发布 1.4.3 后用户反馈「偶发慢」,但运维 Dashboard 空白 |
| 痛点 | 只有 系统容器 肉眼看日志;无 5xx 率告警;无法关联 Jenkins 发布时间 |
| 你的角色 | SRE 见习,负责 demo-api 可观测性基线 |
| 本章任务 | Dashboard ≥6 面板;2 条告警 staging 触发;traceId 串联 2 服务日志 |
| 约束 | 告警必须 可操作(每条有 runbook 链接) |
7.2 学完你能
| 能力 | 验收标准 |
|---|---|
| 黄金三角 | 说清 Metrics / Logs / Traces 分工 |
| RED 指标 | Rate、Errors、Duration 各举 PromQL |
| 配置告警 | 编写 HighErrorRate、HighP99 规则 |
| Dashboard | demo-api ≥6 面板含发布标注 |
| 日志查询 | kubectl / Loki / AI 助手三种方式 |
| SLO | 计算错误预算与冻结发布条件 |
7.3 可观测性黄金三角
Metrics(发生了什么)──┐
Logs(为什么)─────────┼──► 定位根因
Traces(路径)─────────┘
| 信号 | 工具(小紫生态) | 关键问题 |
|---|---|---|
| Metrics | Prometheus + Grafana | QPS、延迟、错误率 |
| Logs | Loki / 系统容器 日志 | 异常栈、业务上下文 |
| Traces | traceId + 网关日志 | 慢请求路径 |
Google SRE 四大黄金指标:
| 指标 | 含义 | 运维动作 |
|---|---|---|
| Latency | 延迟 | 优化/扩容/回滚 |
| Traffic | 流量 | 容量规划 ch10 |
| Errors | 错误 | 回滚/修 bug |
| Saturation | 饱和度 | HPA/加节点 |
RED 方法(服务级):Rate、Errors、Duration。
7.4 逐步跟练 · 第一步:Prometheus 告警规则(约 40 分钟)
运维 → 监控告警 → 规则管理 导入或编辑:
groups:
- name: demo-api
rules:
- alert: HighErrorRate
expr: |
sum(rate(http_requests_total{job="demo-api",status=~"5.."}[5m]))
/ sum(rate(http_requests_total{job="demo-api"}[5m])) > 0.01
for: 5m
labels:
severity: critical
service: demo-api
annotations:
summary: "demo-api 5xx 率 > 1%"
runbook: "https://wiki.internal/runbooks/high-error-rate"
- alert: HighP99Latency
expr: |
histogram_quantile(0.99,
sum(rate(http_request_duration_seconds_bucket{job="demo-api"}[5m])) by (le)
) > 0.5
for: 10m
labels:
severity: warning
annotations:
summary: "demo-api P99 > 500ms"
字段说明:
| 字段 | 含义 |
|---|---|
for: 5m | 条件持续 5min 才告警,防抖 |
severity: critical | 映射 P0/P1(ch05) |
runbook | On-call 第一步点哪里 |
你应该看到:监控告警 → 规则 列表显示 2 条规则,状态 Active。
7.5 逐步跟练 · 第二步:Grafana Dashboard(约 45 分钟)
运维 → 监控告警 → Dashboard 新建 demo-mall / demo-api:
| 面板 # | 名称 | 用途 | 查询提示 |
|---|---|---|---|
| 1 | QPS | 流量趋势 | sum(rate(http_requests_total[5m])) |
| 2 | P50/P95/P99 | 体验 | histogram_quantile |
| 3 | 5xx 率 | 可用性 | 5xx/total |
| 4 | Pod CPU | 容量 | container_cpu_usage |
| 5 | Pod 内存 | OOM 预警 | container_memory_working_set |
| 6 | 发布标注 | 变更关联 | Annotation: deploy tag |
发布标注技巧:每次 prod 发布后在 Dashboard 加 vertical line,备注 1.4.3 @ 22:15。
你应该看到:6 面板有数据;时间范围选 Last 6 hours 可见趋势。