1. 引言:为什么需要告警系统?

在Kubernetes集群中,成百上千的Pod和节点日夜运行。假设你的数据库突然崩溃,或者某个服务响应时间激增,如果不能及时发现问题,后果可能像深夜煮泡面忘关火一样灾难。Prometheus+AlertManager的组合,正是为解决这类问题而生——它像一位24小时值班的运维哨兵,实时监控并推送关键告警。


2. 核心组件快速入门

2.1 Prometheus的"侦察兵"角色

Prometheus负责从Kubernetes采集指标数据(比如CPU、内存、网络流量),这些数据存储在时序数据库中,并通过PromQL查询语言进行分析。

scrape_configs:
  - job_name: 'kubernetes-pods'
    kubernetes_sd_configs:
    - role: pod
    relabel_configs:
    - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_scrape]
      action: keep
      regex: true
2.2 AlertManager的"信使"使命

当Prometheus触发告警规则时,AlertManager负责对这些告警进行分组、去重,并通过邮件、Slack、Webhook等方式推送通知。


3. 手把手配置告警规则

3.1 编写告警规则的三个要素
# alert_rules.yml
groups:
- name: node-alerts
  rules:
  - alert: HighNodeCPU
    expr: 100 - (avg by(instance) (irate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 85
    for: 5m
    annotations:
      summary: "节点CPU过载 (实例 {{ $labels.instance }})"
      description: "{{ $labels.instance }} CPU使用率持续5分钟高于85%"
      severity: critical

关键解析:

  • expr:用PromQL判断CPU空闲率低于15%
  • for:避免瞬时抖动,持续5分钟才触发
  • annotations:告警详情模板,支持变量插值
3.2 实战规则示例集

场景一:Pod频繁重启

- alert: PodCrashLooping
  expr: kube_pod_container_status_restarts_total{namespace=~"prod.*"} > 3
  for: 10m
  annotations:
    summary: "Pod频繁重启 ({{ $labels.pod }})"

场景二:节点失联

- alert: NodeDown
  expr: up{job="kubernetes-nodes"} == 0
  for: 2m
  labels:
    severity: page
  annotations:
    runbook: "https://wiki.example.com/node-recovery"

4. AlertManager通知配置精讲

4.1 路由树的分层设计
# alertmanager.yml
route:
  receiver: 'slack-notifications'
  group_by: [alertname, cluster]
  group_wait: 30s
  group_interval: 5m
  repeat_interval: 3h
  routes:
  - match_re:
      severity: critical
    receiver: 'sms-alert'
  - match:
      team: frontend
    receiver: 'frontend-pager'
4.2 集成企业微信案例
receivers:
- name: 'wechat-work'
  wechat_configs:
  - send_resolved: true
    corp_id: 'xxxxxx'
    to_party: '2'
    agent_id: '1000002'
    api_secret: 'v7qRo7xTxxxxxxxxxx'

5. 技术优缺点全景分析

优势 挑战
原生Kubernetes集成,动态服务发现 PromQL学习曲线陡峭
灵活的标签系统支持多维告警分类 大规模集群可能产生告警风暴
开源生态丰富(Grafana等工具链完善) 持久化存储需要额外配置(如Thanos)

6. 躲坑指南:血泪经验总结

  1. 标签爆炸预防

    # 错误示范:标签包含随机生成的Pod名称
    expr: process_resident_memory_bytes{pod=~".*"}
    
    # 正确方案:按服务聚合
    expr: sum by(service) (process_resident_memory_bytes)
    
  2. 静默策略
    使用/silences页面临时屏蔽已知维护期的告警,避免深夜被骚扰。

  3. 黄金指标监控
    重点关注四类指标:错误率、流量、延迟、饱和度(Google SRE推荐)。


7. 应用场景

  • 金融系统:秒级检测支付延迟异常
  • 电商大促:实时预警流量突增
  • IoT边缘计算:离线节点快速发现

8. 总结:构建智能告警的四个层次

  1. 基础告警:CPU/内存等基础指标
  2. 业务告警:订单失败率等业务指标
  3. 预测告警:基于时序预测模型
  4. 关联告警:建立事件因果关系链