监控告警方案
版本:v1.0
最后更新:2025-01
负责人:基础架构组
状态:已评审
1. 监控体系架构
1.1 监控分层
本平台采用"全栈可观测性"理念,从基础设施到业务层实现全覆盖。
| 层级 |
工具 |
覆盖范围 |
数据保留 |
| 基础设施 |
Node Exporter + Prometheus |
CPU/内存/磁盘/网络 |
30 天 |
| 数据库 |
Pigsty 内置(PG Exporter) |
PG 指标 451 个 |
90 天 |
| 缓存 |
Redis Exporter |
命中率/内存/key数 |
30 天 |
| 消息队列 |
RabbitMQ Exporter |
队列深度/消费者/速率 |
30 天 |
| 应用 |
自定义 Metrics + OpenTelemetry |
QPS/延迟/错误率 |
30 天 |
| 日志 |
Loki + Promtail |
结构化日志收集查询 |
90 天 |
| 链路追踪 |
OpenTelemetry + Jaeger |
全链路 Trace |
14 天 |
1.2 数据流
┌─────────────┐ ┌──────────────────┐ ┌───────────────────────────────┐
│ 应用服务 │────▶│ OTel Agent/Sidecar│────▶│ OTel Collector │
└─────────────┘ └──────────────────┘ │ ├─→ Prometheus(指标) │
┌─────────────┐ ┌──────────────────┐ │ ├─→ Jaeger(链路追踪) │
│ 基础设施 │────▶│ Node Exporter │────▶│ └─→ Loki(日志) │
└─────────────┘ └──────────────────┘ └───────────────────────────────┘
┌─────────────┐ ┌──────────────────┐
│ 数据库 │────▶│ PG Exporter │────▶ Prometheus
└─────────────┘ └──────────────────┘
┌─────────────┐ ┌──────────────────┐
│ 缓存 │────▶│ Redis Exporter │────▶ Prometheus
└─────────────┘ └──────────────────┘
┌─────────────┐ ┌──────────────────┐
│ 消息队列 │────▶│ RabbitMQ Exporter│────▶ Prometheus
└─────────────┘ └──────────────────┘
数据流路径:应用 → OpenTelemetry Agent → Collector → Prometheus + Jaeger + Loki
1.3 技术选型依据
| 方面 |
选型 |
理由 |
| 指标存储 |
Prometheus |
云原生事实标准,与 Grafana 深度集成 |
| 日志 |
Loki |
轻量级,与 Prometheus 标签体系一致,成本低 |
| 链路追踪 |
Jaeger |
兼容 OpenTelemetry,社区成熟 |
| 采集 |
OpenTelemetry Collector |
统一采集标准,多协议支持 |
| 可视化 |
Grafana |
灵活看板,告警支持,生态丰富 |
| 告警 |
Alertmanager |
与 Prometheus 原生集成,支持路由/分组/抑制 |
1.4 部署架构
┌─────────────────────────────────────────────────┐
│ Grafana(统一看板) │
│ 告警 → Alertmanager → 飞书/短信/电话 │
└─────────────────────────────────────────────────┘
▲ ▲ ▲
Prometheus Loki Jaeger
▲ ▲ ▲
└──────────────┴──────────────┘
▲
OTel Collector(网关)
▲ ▲ ▲ ▲
应用服务 基础设施 数据库 中间件
2. 业务指标监控
2.1 核心业务指标
| 指标 |
Metric 名称 |
计算方式 |
正常范围 |
采集频率 |
告警阈值 |
| 查价 QPS |
b2b_rate_request_total |
rate(request_count[1m]) |
基线 ±30% |
实时(15s) |
< 基线50% 或 > 基线200% |
| 缓存命中率 |
b2b_cache_hit_ratio |
cache_hit / total |
> 85% |
每分钟 |
< 70% |
| 查价穿透率 |
b2b_cache_miss_ratio |
cache_miss / total |
< 15% |
每分钟 |
> 30% |
| 试单成功率 |
b2b_trial_success_ratio |
success / trial |
> 90% |
每分钟 |
< 80% |
| 订单确认率 |
b2b_order_confirm_ratio |
confirmed / ordered |
> 95% |
每小时 |
< 85% |
| 查价 P99 延迟 |
b2b_rate_latency_p99 |
histogram_quantile(0.99, ...) |
< 500ms |
实时(15s) |
> 2s |
| 查价 P95 延迟 |
b2b_rate_latency_p95 |
histogram_quantile(0.95, ...) |
< 200ms |
实时(15s) |
> 800ms |
| 供应商可用率 |
b2b_supplier_up_ratio |
up_check / total |
> 99% |
每分钟 |
< 95% |
| 代理商活跃数 |
b2b_agent_active_count |
distinct(active_agents) |
> 0 |
每分钟 |
= 0 |
| 订单创建速率 |
b2b_order_create_rate |
rate(order_created[5m]) |
基线 ±20% |
每分钟 |
异常波动 |
| 库存同步延迟 |
b2b_inventory_sync_lag |
now() - last_sync_time |
< 5min |
每分钟 |
> 15min |
| 价格更新延迟 |
b2b_price_update_lag |
now() - last_price_update |
< 2min |
每分钟 |
> 10min |
2.2 业务看板
2.2.1 实时大屏(运营中心)
- 顶部指标卡:实时 QPS、成功率(试单/订单)、P99 延迟、活跃供应商数
- 时序趋势图:查价 QPS 24h 趋势、成功率趋势、延迟分位图
- 地图视图:查询热力分布(按城市/区域)
- 告警横幅:当前活跃告警数量及最高级别
2.2.2 供应商健康度矩阵
| 供应商 |
可用率 |
平均延迟 |
成功率 |
最近告警 |
趋势 |
| 供应商A |
99.8% |
120ms |
98.5% |
无 |
↗ |
| 供应商B |
97.2% |
350ms |
92.1% |
P2 |
→ |
| ... |
... |
... |
... |
... |
... |
- 按可用率排序,红黄绿三色标记
- 点击可下钻到供应商详情页
- 支持按城市、星级筛选
2.2.3 代理商 TOP10
- 下单量 TOP10
- GMV TOP10
- 查价频次 TOP10
- 异常行为检测(频繁试单不下单)
2.2.4 收入趋势
- 日/周/月 GMV 趋势
- 各供应商收入占比
- 佣金收入趋势
- 同比/环比分析
2.3 自定义指标接入规范
// 应用内 Metrics 定义示例
var (
rateRequestTotal = promauto.NewCounterVec(
prometheus.CounterOpts{
Name: "b2b_rate_request_total",
Help: "Total number of rate requests",
},
[]string{"supplier", "hotel_code", "status"},
)
rateLatency = promauto.NewHistogramVec(
prometheus.HistogramOpts{
Name: "b2b_rate_latency_seconds",
Help: "Rate request latency",
Buckets: []float64{.01, .025, .05, .1, .25, .5, 1, 2, 5, 10},
},
[]string{"supplier", "hotel_code"},
)
)
3. 系统指标监控
3.1 服务器监控
3.1.1 基础指标
| 指标 |
Metric |
采集工具 |
告警条件 |
| CPU 使用率 |
node_cpu_seconds_total |
Node Exporter |
> 85% 持续 5min |
| 内存使用率 |
node_memory_MemAvailable_bytes |
Node Exporter |
> 85% 持续 5min |
| 磁盘使用率 |
node_filesystem_avail_bytes |
Node Exporter |
> 80% 持续 10min |
| 磁盘 I/O |
node_disk_read_time_seconds_total |
Node Exporter |
iowait > 20% |
| 网络带宽 |
node_network_receive_bytes_total |
Node Exporter |
> 链路带宽 80% |
| 网络连接数 |
node_netstat_Tcp_CurrEstab |
Node Exporter |
> 50000 |
| 系统负载 |
node_load1 / node_load5 / node_load15 |
Node Exporter |
load1 > CPU核数×1.5 |
| 文件描述符 |
process_open_fds |
Node Exporter |
> 80% ulimit |
3.1.2 Docker 容器监控
| 指标 |
Metric |
告警条件 |
| 容器 CPU |
container_cpu_usage_seconds_total |
> Limit 90% |
| 容器内存 |
container_memory_working_set_bytes |
> Limit 85% |
| 容器重启 |
container_restart_count |
> 3 次/小时 |
| 容器 OOM |
container_oom_events_total |
> 0 |
3.2 数据库监控
3.2.1 PostgreSQL 核心指标
| 指标 |
Metric |
正常范围 |
告警条件 |
| 活跃连接数 |
pg_stat_activity_count |
< max_connections×70% |
> 80% |
| TPS |
pg_stat_database_tup_fetched |
基线 ±30% |
异常波动 |
| 复制延迟 |
pg_replication_lag_seconds |
< 1s |
> 10s |
| 锁等待 |
pg_locks_waiting_count |
0 |
> 5 |
| 死锁数 |
pg_deadlocks_total |
0 |
> 0 |
| 事务冲突 |
pg_conflict_count |
< 10/min |
> 100/min |
| 缓存命中率 |
pg_stat_database_blks_hit / (hit+read) |
> 99% |
< 95% |
| WAL 生成速率 |
pg_stat_wal_bytes |
基线 ±20% |
> 基线 200% |
| autovacuum |
pg_autovacuum_running |
正常运行 |
长时间挂起 |
3.2.2 慢查询监控
# 慢查询采集配置
pg_stat_statements:
min_execution_time: 1000 # > 1s 记录为慢查询
track: all
max: 10000
- 所有 > 1s 的查询自动记录到
pg_stat_statements
-
5s 的查询触发 P2 告警
-
30s 的查询触发 P1 告警
- 慢查询 Top10 看板每小时更新
3.2.3 表大小增长趋势
- 每日采集前 20 大表及其增长速率
- 表大小增长率 > 10%/天 触发 P3 通知
- 自动生成清理建议(vacuum/归档)
3.2.4 死锁检测
-- 死锁监控查询
SELECT datname, query, wait_event, state, wait_event_type
FROM pg_stat_activity
WHERE wait_event_type = 'Lock'
AND state = 'active'
AND query_start < now() - interval '30 seconds';
- 任何死锁立即触发 P1 告警
- 自动记录死锁详情到日志
- 与 AI Agent 联动自动分析死锁原因
3.3 缓存监控(Redis)
| 指标 |
Metric |
正常范围 |
告警条件 |
| 命中率 |
redis_keyspace_hits / (hits+misses) |
> 90% |
< 70% |
| 内存使用 |
redis_used_memory_bytes |
< maxmemory×80% |
> 90% |
| Key 数量 |
redis_db_keys |
基线 ±20% |
异常增长 |
| 连接数 |
redis_connected_clients |
< 1000 |
> 800 |
| 被拒绝连接 |
redis_rejected_connections_total |
0 |
> 0 |
| 阻塞客户端 |
redis_blocked_clients |
0 |
> 10 |
| 过期 Key 速率 |
redis_expired_keys_total |
基线 |
异常 |
| 淘汰 Key 速率 |
redis_evicted_keys_total |
0 |
> 0 |
| 慢日志 |
redis_slowlog_length |
< 10 |
> 100 |
| 主从延迟 |
redis_master_slave_last_io_seconds |
< 1s |
> 5s |
3.4 消息队列监控(RabbitMQ)
| 指标 |
Metric |
正常范围 |
告警条件 |
| 队列深度 |
rabbitmq_queue_messages |
< 1000 |
> 10000 |
| 消费者数量 |
rabbitmq_queue_consumers |
> 0 |
= 0 |
| 消息积压速率 |
rate(queue_messages[5m]) |
稳定 |
持续增长 |
| 发布速率 |
rabbitmq_queue_messages_published_total |
基线 |
异常 |
| 投递速率 |
rabbitmq_queue_messages_delivered_total |
≈发布速率 |
差异 > 20% |
| ACK 率 |
ack / delivered |
> 99.9% |
< 99% |
| Unacked 消息 |
rabbitmq_queue_messages_unacked |
< 100 |
> 1000 |
| 连接数 |
rabbitmq_connections |
< 500 |
> 400 |
| Channel 数 |
rabbitmq_channels |
< 5000 |
> 4000 |
| 磁盘告警 |
rabbitmq_node_disk_free_bytes |
> 1GB |
< 500MB |
4. 告警分级与路由
4.1 告警分级
| 级别 |
名称 |
响应时间 |
通知方式 |
影响范围 |
示例 |
| P0 |
紧急 |
< 5 分钟 |
电话 + 飞书 + 短信 |
全站不可用 |
数据库宕机、主节点宕机 |
| P1 |
严重 |
< 15 分钟 |
飞书 + 短信 |
核心功能受损 |
核心供应商不可用、缓存雪崩 |
| P2 |
警告 |
< 1 小时 |
飞书 |
部分功能降级 |
查价成功率下降、队列积压 |
| P3 |
通知 |
工作日处理 |
飞书(静默) |
无直接影响 |
磁盘 > 70%、证书即将过期 |
| P4 |
信息 |
人工查阅 |
邮件(每日汇总) |
无影响 |
资源使用趋势变化 |
4.2 告警规则
4.2.1 基础设施告警规则
| # |
指标 |
条件 |
持续时长 |
级别 |
通知渠道 |
说明 |
| 1 |
CPU 使用率 |
> 85% |
5min |
P2 |
飞书 |
服务器 CPU 过载 |
| 2 |
CPU 使用率 |
> 95% |
2min |
P1 |
飞书+短信 |
服务器 CPU 严重过载 |
| 3 |
内存使用率 |
> 85% |
5min |
P2 |
飞书 |
内存不足风险 |
| 4 |
内存使用率 |
> 95% |
2min |
P1 |
飞书+短信 |
内存即将耗尽 |
| 5 |
磁盘使用率 |
> 80% |
10min |
P3 |
飞书(静默) |
磁盘空间预警 |
| 6 |
磁盘使用率 |
> 90% |
5min |
P2 |
飞书 |
磁盘空间紧张 |
| 7 |
磁盘使用率 |
> 95% |
2min |
P1 |
飞书+短信 |
磁盘即将满 |
| 8 |
节点可用性 |
down |
1min |
P0 |
电话+飞书+短信 |
服务器宕机 |
| 9 |
系统负载 |
load1 > CPU核数×2 |
5min |
P2 |
飞书 |
系统过载 |
4.2.2 数据库告警规则
| # |
指标 |
条件 |
持续时长 |
级别 |
通知渠道 |
说明 |
| 10 |
PG 主节点 |
down |
30s |
P0 |
电话+飞书+短信 |
主库不可用 |
| 11 |
PG 从节点 |
down |
1min |
P1 |
飞书+短信 |
从库不可用 |
| 12 |
PG 复制延迟 |
> 10s |
2min |
P1 |
飞书+短信 |
主从延迟过大 |
| 13 |
PG 复制延迟 |
> 30s |
1min |
P0 |
电话+飞书+短信 |
主从即将断裂 |
| 14 |
PG 活跃连接 |
> 80% max |
3min |
P2 |
飞书 |
连接池即将耗尽 |
| 15 |
PG 锁等待 |
> 5 |
2min |
P2 |
飞书 |
锁竞争严重 |
| 16 |
PG 死锁 |
> 0 |
即时 |
P1 |
飞书+短信 |
检测到死锁 |
| 17 |
PG 慢查询 |
> 5s |
1min |
P2 |
飞书 |
严重慢查询 |
| 18 |
PG 慢查询 |
> 30s |
即时 |
P1 |
飞书+短信 |
超慢查询 |
| 19 |
PG 磁盘 |
> 85% |
5min |
P2 |
飞书 |
数据库磁盘告急 |
4.2.3 应用告警规则
| # |
指标 |
条件 |
持续时长 |
级别 |
通知渠道 |
说明 |
| 20 |
服务可用性 |
HTTP 5xx > 5% |
2min |
P1 |
飞书+短信 |
服务异常 |
| 21 |
服务可用性 |
HTTP 5xx > 20% |
30s |
P0 |
电话+飞书+短信 |
服务严重故障 |
| 22 |
服务可用性 |
实例 down |
30s |
P2 |
飞书 |
实例掉线 |
| 23 |
查价 P99 延迟 |
> 2s |
3min |
P2 |
飞书 |
响应变慢 |
| 24 |
查价 P99 延迟 |
> 5s |
1min |
P1 |
飞书+短信 |
严重变慢 |
| 25 |
请求错误率 |
> 10% |
2min |
P2 |
飞书 |
错误率升高 |
4.2.4 业务告警规则
| # |
指标 |
条件 |
持续时长 |
级别 |
通知渠道 |
说明 |
| 26 |
查价 QPS |
< 基线 50% |
5min |
P1 |
飞书+短信 |
流量异常下降 |
| 27 |
试单成功率 |
< 80% |
3min |
P2 |
飞书 |
试单失败增多 |
| 28 |
试单成功率 |
< 50% |
1min |
P1 |
飞书+短信 |
试单大面积失败 |
| 29 |
订单确认率 |
< 85% |
30min |
P2 |
飞书 |
订单确认率低 |
| 30 |
供应商可用率 |
< 95% |
5min |
P2 |
飞书 |
供应商异常 |
| 31 |
供应商可用率 |
= 0 |
2min |
P1 |
飞书+短信 |
供应商完全不可用 |
| 32 |
缓存命中率 |
< 70% |
5min |
P2 |
飞书 |
缓存命中率低 |
| 33 |
缓存命中率 |
< 30% |
1min |
P0 |
电话+飞书+短信 |
疑似缓存雪崩 |
| 34 |
队列积压 |
> 10000 |
10min |
P2 |
飞书 |
消息积压严重 |
| 35 |
队列消费者 |
= 0 |
1min |
P1 |
飞书+短信 |
消费者全部掉线 |
4.2.5 中间件告警规则
| # |
指标 |
条件 |
持续时长 |
级别 |
通知渠道 |
说明 |
| 36 |
Redis 可用性 |
down |
30s |
P0 |
电话+飞书+短信 |
Redis 宕机 |
| 37 |
Redis 内存 |
> 90% max |
5min |
P2 |
飞书 |
内存即将耗尽 |
| 38 |
Redis 淘汰 |
evicted_keys > 0 |
5min |
P2 |
飞书 |
出现 Key 淘汰 |
| 39 |
RabbitMQ 可用性 |
down |
30s |
P0 |
电话+飞书+短信 |
MQ 宕机 |
| 40 |
RabbitMQ 磁盘 |
< 500MB |
2min |
P1 |
飞书+短信 |
磁盘不足将阻塞 |
4.3 告警抑制与聚合
4.3.1 抑制规则
# Alertmanager 抑制配置
inhibit_rules:
# P0 抑制同服务 P1/P2
- source_match:
severity: P0
target_match_re:
severity: 'P1|P2'
equal: ['alertname', 'service']
# 节点 down 抑制该节点所有其他告警
- source_match:
alertname: NodeDown
target_match_re:
alertname: '.*'
equal: ['instance']
# PG 主库 down 抑制从库告警
- source_match:
alertname: PGPrimaryDown
target_match_re:
alertname: 'PGReplicationLag.*'
equal: ['cluster']
4.3.2 聚合规则
# Alertmanager 路由与聚合
route:
group_by: ['alertname', 'cluster', 'service']
group_wait: 30s # 同组告警等待 30s
group_interval: 5m # 同组新告警 5min 后发送
repeat_interval: 4h # 重复告警 4h 一次
routes:
- match:
severity: P0
repeat_interval: 5m # P0 每 5min 重复
- match:
severity: P3
group_interval: 1h
repeat_interval: 24h # P3 每日一次
4.3.3 维护窗口静默
# 创建静默规则示例(维护窗口)
amtool silence add \
--author="ops" \
--comment="计划维护:数据库版本升级" \
--duration=2h \
matcher="cluster=hotel-prod" \
matcher="severity=~P1|P2|P3"
- 发布流程自动创建静默窗口
- 维护结束后自动解除
- 静默期间 P0 告警仍然发出
4.4 告警通知模板
4.4.1 飞书机器人消息模板
🚨 [P1-严重] PG 主库复制延迟过高
📌 告警详情
• 集群:hotel-prod-pg-primary
• 指标:复制延迟 = 32.5s
• 阈值:> 10s
• 持续:2 分钟
• 时间:2025-01-15 14:32:18
🔗 快速链接
• Grafana 看板:https://grafana.internal/d/pg-overview
• 值班手册:https://wiki.internal/runbook/pg-replication-lag
• 确认处理:https://alertmanager.internal/silence/xxx
👤 通知人:@值班-DBA @值班-运维
5. AI Agent 自动响应
与第 12 章 AI 智能运营层联动,实现告警的自动诊断与修复。
5.1 分级自动处理策略
| 告警级别 |
AI 处理策略 |
人工介入 |
示例 |
| L1(P3/P4) |
全自动处理,事后通知 |
不需要 |
清理临时文件、重启 hung 进程 |
| L2(P1/P2) |
AI 自动诊断 + 建议修复方案,执行后通知 |
可选审批 |
扩容、切换供应商、重启服务 |
| L3(P0) |
AI 快速诊断 + 止血措施,必须人工确认 |
强制审批 |
主从切换、回滚发布、熔断 |
5.2 AI Agent 能力
5.2.1 自动诊断
告警触发 → AI Agent 接收
├─ 收集上下文(指标、日志、链路追踪、变更记录)
├─ 关联分析(最近部署、配置变更、流量变化)
├─ 根因推断(基于知识库 + 历史案例)
└─ 输出诊断报告
5.2.2 自动止血操作
| 场景 |
AI 自动操作 |
审批 |
| 缓存雪崩 |
降级为数据库直查 + 限流 |
L3 |
| 供应商不可用 |
自动切换备用供应商 |
L2 |
| 队列积压 |
动态扩容消费者 |
L2 |
| 服务 OOM |
自动重启 + 采集 heap dump |
L2 |
| 磁盘满 |
清理日志/临时文件 |
L1 |
| CPU 过载 |
临时限流 + 扩容建议 |
L2 |
5.2.3 自动修复与验证
# AI Agent 修复流程
ai_remediation:
steps:
1. 诊断:
- 执行根因分析
- 匹配 Runbook
2. 执行:
- 调用运维 API 执行修复
- 记录操作审计日志
3. 验证:
- 检查指标是否恢复
- 确认告警自动解除
4. 通知:
- 发送处理报告
- 更新事故单状态
5. 沉淀:
- 生成事故复盘草稿
- 更新知识库
5.3 AI Agent 接口规范
{
"alert": {
"id": "alert-20250115-001",
"severity": "P1",
"name": "PGReplicationLagHigh",
"instance": "hotel-prod-pg-primary",
"value": 32.5,
"threshold": 10,
"duration": "2m"
},
"ai_response": {
"diagnosis": "从节点 IO 压力过大导致复制延迟,根因为大批量数据导入任务",
"action": "暂停数据导入任务,复制延迟预计 30s 内恢复",
"confidence": 0.92,
"requires_approval": false,
"knowledge_base_refs": ["KB-PG-001", "RUNBOOK-PG-LAG"]
}
}
6. 值班与响应流程
6.1 值班制度(OPC 模式)
6.1.1 值班模式
┌─────────────────────────────────────────┐
│ AI 7×24 全天候监控 │
│ ┌─────────┐ ┌──────────┐ ┌────────┐ │
│ │ 指标监控 │ │ 日志分析 │ │ 异常检测│ │
│ └────┬────┘ └────┬─────┘ └───┬────┘ │
│ └────────────┼────────────┘ │
│ ▼ │
│ ┌──────────────────┐ │
│ │ AI Agent 诊断 │ │
│ └────────┬─────────┘ │
│ ▼ │
│ ┌─────────────┼──────────────┐ │
│ │ L1 自动处理 │ L2/L3 升级 │ │
│ └─────────────┘ ▼ │ │
│ ┌──────────────┐ │ │
│ │ 人工值班响应 │ │ │
│ └──────────────┘ │ │
└─────────────────────────────────────────┘
6.1.2 值班排班
| 时段 |
负责角色 |
响应范围 |
联系方式 |
| 工作日 09:00-18:00 |
运维值班(On-call) |
P0-P4 全部 |
飞书 + 内线 |
| 工作日 18:00-次日09:00 |
电话值班 |
P0/P1 |
电话 + 短信 |
| 周末/节假日 |
电话值班 |
P0/P1 |
电话 + 短信 |
| 全天候 |
AI Agent |
L1 自动处理 |
系统自动 |
6.1.3 值班交接
- 每日 09:00 前完成交接
- 交接内容:昨日告警汇总、未解决事项、今日变更计划
- AI 自动生成值班日报
6.2 事故响应流程
6.2.1 五步事故响应
1. 发现(Detect) 2. 诊断(Diagnose)
┌──────────────┐ ┌──────────────────┐
│ 监控告警触发 │───────▶ │ AI 自动诊断 │
│ 用户反馈 │ │ • 指标分析 │
│ 定期巡检 │ │ • 日志分析 │
└──────────────┘ │ • 变更关联 │
│ • 历史对比 │
└────────┬─────────┘
▼
3. 止损(Mitigate) 4. 修复(Resolve)
┌──────────────────┐ ┌──────────────────┐
│ AI/人工执行止血 │ │ 根因修复 │
│ • 降级/限流 │◀──────│ • 代码修复 │
│ • 切换/回滚 │ │ • 配置修正 │
│ • 扩容 │ │ • 架构优化 │
└──────────────────┘ └────────┬─────────┘
▼
5. 复盘(Review)
┌──────────────────────────────────────────┐
│ 事故复盘会议(P0/P1 必须,P2 建议) │
│ • 根因分析(5 Why) │
│ • 时间线梳理 │
│ • 改进措施 │
│ • 知识库更新 │
└──────────────────────────────────────────┘
6.2.2 各阶段 SLA
| 阶段 |
P0 |
P1 |
P2 |
P3 |
| 发现 → 认领 |
2min |
5min |
15min |
4h |
| 认领 → 诊断 |
5min |
10min |
30min |
— |
| 诊断 → 止损 |
10min |
15min |
1h |
— |
| 止损 → 修复 |
1h |
4h |
24h |
— |
| 修复 → 复盘 |
24h |
48h |
1 周 |
— |
6.2.3 升级机制
| 条件 |
升级动作 |
| P0 告警 5min 未认领 |
自动拨打二线电话 |
| P0 告警 15min 未解决 |
升级至技术总监 |
| P1 告警 30min 未认领 |
升级至二线值班 |
| 同类告警 1h 内重复 3 次 |
自动升级告警级别 |
| 跨服务影响 |
创建事故 War Room |
6.3 事故复盘模板
6.3.1 复盘文档结构
# 事故复盘报告
## 基本信息
- **事故编号**:INC-2025-001
- **事故等级**:P0
- **影响时间**:2025-01-15 14:30 ~ 15:45(75 分钟)
- **影响范围**:全部查价服务,影响约 2,000 家代理商
- **负责人**:张三
- **复盘日期**:2025-01-16
## 事故描述
(简要描述事故现象及用户影响)
## 时间线
| 时间 | 事件 |
|------|------|
| 14:30 | 监控告警触发:Redis P99 延迟 > 5s |
| 14:32 | AI Agent 诊断:Redis 大 Key 导致阻塞 |
| 14:35 | 值班人员认领,确认影响 |
| 14:40 | 执行手动清理大 Key |
| 14:45 | 服务逐步恢复 |
| 15:45 | 全部恢复正常 |
## 根因分析(5 Why)
1. Why 查价服务不可用?→ Redis 响应超时
2. Why Redis 超时?→ 存在超大 Key(800MB)
3. Why 存在超大 Key?→ 缓存预热逻辑未做分片
4. Why 未做分片?→ 代码 Review 未覆盖此场景
5. Why Review 未覆盖?→ 缺少大 Key 检测规范
## 影响评估
- 查价请求失败:约 45,000 次
- 订单损失:约 120 单
- 预估 GMV 损失:约 ¥180,000
## 修复措施
- [x] 紧急:手动清理大 Key
- [x] 修复:缓存预热增加分片逻辑
- [x] 部署:上线 v2.3.1 hotfix
- [ ] 长期:引入 Redis 大 Key 自动检测告警
## 预防措施
1. 增加 Redis 大 Key 监控告警(> 10MB)
2. 代码 Review Checklist 增加缓存设计规范
3. 压测场景增加异常数据构造
## 经验教训
- 缓存设计需要考虑数据量上限
- 监控需要覆盖中间件内部状态
6.3.2 自动沉淀机制
事故关闭 → AI 自动生成复盘草稿
├─ 提取告警时间线
├─ 关联变更记录
├─ 匹配相似历史事故
├─ 生成根因建议
└─ 创建复盘文档 + 知识库条目
- P0/P1 事故 24h 内必须完成复盘
- P2 事故 1 周内完成复盘
- 复盘结论自动转化为改进项(Jira/飞书任务)
- 改进项纳入下一次迭代 Review
附录
A. Prometheus 关键配置
global:
scrape_interval: 15s
evaluation_interval: 15s
alerting:
alertmanagers:
- static_configs:
- targets: ['alertmanager:9093']
rule_files:
- /etc/prometheus/rules/*.yml
scrape_configs:
- job_name: 'otel-collector'
scrape_interval: 15s
static_configs:
- targets: ['otel-collector:8889']
- job_name: 'node-exporter'
static_configs:
- targets: ['node-exporter:9100']
- job_name: 'pg-exporter'
static_configs:
- targets: ['pg-exporter:9630']
- job_name: 'redis-exporter'
static_configs:
- targets: ['redis-exporter:9121']
- job_name: 'rabbitmq-exporter'
static_configs:
- targets: ['rabbitmq-exporter:9419']
B. Grafana 看板清单
| 编号 |
看板名称 |
URL |
用途 |
| D001 |
运营总览大屏 |
/d/overview |
实时业务监控 |
| D002 |
基础设施概览 |
/d/infra |
服务器资源监控 |
| D003 |
PostgreSQL 监控 |
/d/pg-overview |
数据库健康度 |
| D004 |
Redis 监控 |
/d/redis-overview |
缓存健康度 |
| D005 |
RabbitMQ 监控 |
/d/rabbitmq-overview |
消息队列监控 |
| D006 |
供应商健康矩阵 |
/d/supplier-health |
供应商可用性 |
| D007 |
告警大盘 |
/d/alert-overview |
告警统计分析 |
| D008 |
慢查询分析 |
/d/slow-query |
数据库性能分析 |
C. Runbook 索引
| 编号 |
场景 |
处理手册 |
AI 自动化 |
| RB001 |
数据库主库宕机 |
[链接] |
✅ L3 辅助 |
| RB002 |
Redis 缓存雪崩 |
[链接] |
✅ L2 自动 |
| RB003 |
队列消息积压 |
[链接] |
✅ L2 自动 |
| RB004 |
服务 OOM |
[链接] |
✅ L2 自动 |
| RB005 |
供应商不可用 |
[链接] |
✅ L2 自动 |
| RB006 |
磁盘空间不足 |
[链接] |
✅ L1 自动 |
| RB007 |
证书过期 |
[链接] |
✅ L1 自动 |
| RB008 |
DNS 解析异常 |
[链接] |
✅ L1 自动 |
| RB009 |
主从复制延迟 |
[链接] |
✅ L2 辅助 |
| RB010 |
网络分区 |
[链接] |
❌ 人工处理 |
D. 告警规则 YAML 示例
groups:
- name: b2b-business-alerts
rules:
- alert: RateSuccessRateLow
expr: |
(
sum(rate(b2b_rate_request_total{status="success"}[5m]))
/
sum(rate(b2b_rate_request_total[5m]))
) < 0.5
for: 3m
labels:
severity: P1
team: platform
annotations:
summary: "查价成功率低于 50%"
description: "当前成功率: {{ $value | humanizePercentage }}"
runbook: "https://wiki.internal/runbook/rate-success-low"
dashboard: "https://grafana.internal/d/overview"
- alert: CacheHitRateLow
expr: |
(
sum(rate(b2b_cache_hit_total[5m]))
/
sum(rate(b2b_cache_request_total[5m]))
) < 0.3
for: 1m
labels:
severity: P0
team: platform
annotations:
summary: "缓存命中率低于 30%,疑似缓存雪崩"
description: "当前命中率: {{ $value | humanizePercentage }}"
runbook: "https://wiki.internal/runbook/cache-avalanche"
本文档随系统演进持续更新。如有疑问请联系基础架构组。