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. 躲坑指南:血泪经验总结
标签爆炸预防
# 错误示范:标签包含随机生成的Pod名称 expr: process_resident_memory_bytes{pod=~".*"} # 正确方案:按服务聚合 expr: sum by(service) (process_resident_memory_bytes)静默策略
使用/silences页面临时屏蔽已知维护期的告警,避免深夜被骚扰。黄金指标监控
重点关注四类指标:错误率、流量、延迟、饱和度(Google SRE推荐)。
7. 应用场景
- 金融系统:秒级检测支付延迟异常
- 电商大促:实时预警流量突增
- IoT边缘计算:离线节点快速发现
8. 总结:构建智能告警的四个层次
- 基础告警:CPU/内存等基础指标
- 业务告警:订单失败率等业务指标
- 预测告警:基于时序预测模型
- 关联告警:建立事件因果关系链
评论