设计监控告警平台
架构设计
监控分层
| 层次 | 指标 | 工具 |
|---|---|---|
| 基础设施 | CPU/内存/磁盘/网络 | Node Exporter |
| 容器平台 | Pod/Node/Deployment | kube-state-metrics |
| 中间件 | MySQL/Redis/Kafka | 各自 Exporter |
| 应用层 | QPS/延迟/错误率 | Prometheus SDK |
| 业务层 | 订单量/转化率 | 自定义指标 |
告警规则设计
alert-rules.yaml
groups:
- name: service-alerts
rules:
# 核心指标告警
- alert: HighErrorRate
expr: |
sum(rate(http_requests_total{status=~"5.."}[5m]))
/ sum(rate(http_requests_total[5m])) > 0.05
for: 2m
labels:
severity: critical
annotations:
summary: "{{ $labels.service }} 5xx 错误率 {{ $value | humanizePercentage }}"
# 防抖:持续 5 分钟才告警
- alert: HighLatency
expr: histogram_quantile(0.99, rate(http_duration_seconds_bucket[5m])) > 3
for: 5m
labels:
severity: warning
告警分级与路由
| 级别 | 响应时间 | 通知方式 | 示例 |
|---|---|---|---|
| P0 Critical | 5 分钟 | 电话 + IM + 工单 | 服务不可用 |
| P1 Error | 15 分钟 | IM + 工单 | 错误率上升 |
| P2 Warning | 1 小时 | IM | 磁盘预警 |
| P3 Info | 下个工作日 | 邮件 | 证书即将过期 |
常见面试问题
Q1: 如何解决告警风暴(Alert Storm)?
答案:
- 告警聚合:Alertmanager
group_by将同类告警归组,减少通知数量 - 告警抑制:高级别告警触发时自动抑制低级别(如服务宕机抑制其下游超时告警)
- 静默规则:维护窗口期间临时屏蔽告警
- 合理阈值:避免阈值过敏感,告警必须有
for持续时间 - 分级通知:不是所有告警都打电话,P2/P3 走 IM 即可