跳到主要内容

设计监控告警平台

架构设计

监控分层

层次指标工具
基础设施CPU/内存/磁盘/网络Node Exporter
容器平台Pod/Node/Deploymentkube-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 Critical5 分钟电话 + IM + 工单服务不可用
P1 Error15 分钟IM + 工单错误率上升
P2 Warning1 小时IM磁盘预警
P3 Info下个工作日邮件证书即将过期

常见面试问题

Q1: 如何解决告警风暴(Alert Storm)?

答案

  1. 告警聚合:Alertmanager group_by 将同类告警归组,减少通知数量
  2. 告警抑制:高级别告警触发时自动抑制低级别(如服务宕机抑制其下游超时告警)
  3. 静默规则:维护窗口期间临时屏蔽告警
  4. 合理阈值:避免阈值过敏感,告警必须有 for 持续时间
  5. 分级通知:不是所有告警都打电话,P2/P3 走 IM 即可

相关链接