告警机制
告警机制是运维工作的核心功能,通过及时通知系统异常,帮助运维人员快速响应和处理问题,保障系统稳定运行。
📋 告警体系架构
🎯 告警规则设计
1. 告警规则分类
系统级告警:
- CPU使用率:CPU使用率过高
- 内存使用率:内存使用率过高
- 磁盘使用率:磁盘空间不足
- 网络异常:网络流量异常
应用级告警:
- 服务可用性:服务不可用
- 响应时间:接口响应时间过长
- 错误率:接口错误率过高
- 请求量:请求量异常
业务级告警:
- 业务指标:业务指标异常
- 订单量:订单量异常
- 支付成功率:支付成功率下降
- 用户活跃度:用户活跃度异常
2. Prometheus 告警规则
告警规则配置示例:
yaml
# alert_rules.yml
groups:
- name: system_alerts
interval: 30s
rules:
# CPU使用率告警
- alert: HighCPUUsage
expr: 100 - (avg(irate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 85
for: 5m
labels:
severity: warning
team: infrastructure
annotations:
summary: "CPU使用率过高"
description: "CPU使用率持续5分钟超过85%,当前值:{{ $value }}%"
runbook_url: "https://wiki.example.com/runbook/high-cpu"
# 内存使用率告警
- alert: HighMemoryUsage
expr: (node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes) / node_memory_MemTotal_bytes * 100 > 90
for: 5m
labels:
severity: critical
team: infrastructure
annotations:
summary: "内存使用率过高"
description: "内存使用率持续5分钟超过90%,当前值:{{ $value }}%"
runbook_url: "https://wiki.example.com/runbook/high-memory"
# 磁盘使用率告警
- alert: HighDiskUsage
expr: (node_filesystem_size_bytes - node_filesystem_avail_bytes) / node_filesystem_size_bytes * 100 > 85
for: 10m
labels:
severity: warning
team: infrastructure
annotations:
summary: "磁盘使用率过高"
description: "磁盘使用率持续10分钟超过85%,当前值:{{ $value }}%"
runbook_url: "https://wiki.example.com/runbook/high-disk"
- name: application_alerts
interval: 30s
rules:
# 服务不可用告警
- alert: ServiceDown
expr: up{job="app-service"} == 0
for: 1m
labels:
severity: critical
team: backend
annotations:
summary: "服务不可用"
description: "服务 {{ $labels.instance }} 不可用超过1分钟"
runbook_url: "https://wiki.example.com/runbook/service-down"
# 接口错误率告警
- alert: HighErrorRate
expr: rate(http_requests_total{status=~"5.."}[5m]) / rate(http_requests_total[5m]) * 100 > 5
for: 2m
labels:
severity: warning
team: backend
annotations:
summary: "接口错误率过高"
description: "接口错误率持续2分钟超过5%,当前值:{{ $value }}%"
runbook_url: "https://wiki.example.com/runbook/high-error-rate"
# 接口响应时间告警
- alert: SlowAPI
expr: histogram_quantile(0.95, rate(http_request_duration_seconds_bucket[5m])) > 1
for: 5m
labels:
severity: warning
team: backend
annotations:
summary: "接口响应时间过长"
description: "95%接口响应时间持续5分钟超过1秒,当前值:{{ $value }}秒"
runbook_url: "https://wiki.example.com/runbook/slow-api"3. 告警规则最佳实践
规则设计原则:
- 明确阈值:设置明确的告警阈值
- 合理持续时长:避免短时间波动触发告警
- 分级告警:根据严重程度分级(warning、critical)
- 告警收敛:避免告警风暴
告警级别:
| 级别 | 严重程度 | 响应时间 | 通知方式 |
|---|---|---|---|
| Critical | 严重 | 立即 | 电话+短信+钉钉 |
| Warning | 警告 | 15分钟内 | 钉钉+邮件 |
| Info | 信息 | 1小时内 | 邮件 |
🎯 AlertManager 配置
1. AlertManager 架构
架构图:
2. AlertManager 配置
alertmanager.yml 配置示例:
yaml
global:
resolve_timeout: 5m
smtp_smarthost: 'smtp.example.com:587'
smtp_from: 'alerts@example.com'
smtp_auth_username: 'alerts@example.com'
smtp_auth_password: 'password'
route:
group_by: ['alertname', 'cluster', 'service']
group_wait: 10s
group_interval: 10s
repeat_interval: 12h
receiver: 'default'
routes:
# 严重告警路由
- match:
severity: critical
receiver: 'critical-alerts'
continue: true
# 基础设施告警路由
- match:
team: infrastructure
receiver: 'infrastructure-team'
# 后端服务告警路由
- match:
team: backend
receiver: 'backend-team'
receivers:
- name: 'default'
email_configs:
- to: 'ops@example.com'
send_resolved: true
- name: 'critical-alerts'
email_configs:
- to: 'ops-oncall@example.com'
send_resolved: true
webhook_configs:
- url: 'http://dingtalk-webhook/api/alert'
send_resolved: true
# 短信通知(需要集成短信服务)
# sms_configs:
# - to: '+8613800138000'
# send_resolved: true
- name: 'infrastructure-team'
email_configs:
- to: 'infra-team@example.com'
send_resolved: true
webhook_configs:
- url: 'http://dingtalk-webhook/api/alert?team=infrastructure'
send_resolved: true
- name: 'backend-team'
email_configs:
- to: 'backend-team@example.com'
send_resolved: true
webhook_configs:
- url: 'http://dingtalk-webhook/api/alert?team=backend'
send_resolved: true🎯 告警降噪
1. 告警聚合
聚合策略:
- 按告警名称聚合:相同告警合并
- 按服务聚合:同一服务的告警合并
- 按时间窗口聚合:时间窗口内的告警合并
聚合示例:
yaml
route:
group_by: ['alertname', 'cluster', 'service']
group_wait: 10s # 等待10秒聚合告警
group_interval: 10s # 同一分组内的告警间隔10秒
repeat_interval: 12h # 重复告警间隔12小时2. 告警抑制
抑制规则:
yaml
inhibit_rules:
# 如果服务不可用,抑制其他告警
- source_match:
alertname: 'ServiceDown'
target_match:
alertname: 'HighErrorRate'
equal: ['instance', 'service']
# 如果系统宕机,抑制所有告警
- source_match:
alertname: 'SystemDown'
target_match_re:
alertname: '.*'3. 告警静默
静默规则:
- 维护窗口:维护期间静默告警
- 已知问题:已知问题的告警静默
- 测试环境:测试环境告警静默
🎯 通知渠道
1. 邮件通知
邮件配置:
yaml
email_configs:
- to: 'ops@example.com'
headers:
Subject: '{{ .GroupLabels.alertname }}'
html: |
<h2>告警信息</h2>
<p><strong>告警名称:</strong>{{ .GroupLabels.alertname }}</p>
<p><strong>严重程度:</strong>{{ .CommonLabels.severity }}</p>
<p><strong>告警时间:</strong>{{ .StartsAt }}</p>
<p><strong>告警详情:</strong>{{ .CommonAnnotations.description }}</p>2. 钉钉/企业微信通知
Webhook配置:
yaml
webhook_configs:
- url: 'http://dingtalk-webhook/api/alert'
http_config:
bearer_token: 'your-token'
send_resolved: true钉钉消息格式:
json
{
"msgtype": "markdown",
"markdown": {
"title": "告警通知",
"text": "## 告警信息\n\n**告警名称**:{{ .GroupLabels.alertname }}\n\n**严重程度**:{{ .CommonLabels.severity }}\n\n**告警时间**:{{ .StartsAt }}\n\n**告警详情**:{{ .CommonAnnotations.description }}"
}
}3. 短信/电话通知
紧急告警通知:
- 电话通知:Critical级别告警电话通知
- 短信通知:Critical级别告警短信通知
- 轮询机制:无人接听时轮询下一个联系人
🎯 告警升级
1. 升级规则
升级策略:
升级配置:
yaml
route:
routes:
- receiver: 'oncall-primary'
group_wait: 10s
group_interval: 10s
repeat_interval: 15m
continue: true
- receiver: 'oncall-secondary'
match:
repeat_interval: '>15m'
group_wait: 0s
repeat_interval: 30m
continue: true
- receiver: 'escalation'
match:
repeat_interval: '>30m'2. 值班轮换
值班配置:
- On-Call轮换:按周或按月轮换
- 告警分发:按值班表分发告警
- 值班日历:值班日历管理
📋 告警最佳实践
1. 告警规则设计
设计原则:
- 避免告警疲劳:合理设置告警阈值
- 明确告警含义:告警消息清晰明确
- 提供处理建议:告警包含处理建议
- 告警收敛:避免重复告警
2. 告警分级
分级标准:
- Critical:影响业务,需要立即处理
- Warning:可能影响业务,需要关注
- Info:信息类告警,记录即可
3. 告警处理流程
处理流程:
- 告警接收:接收告警通知
- 问题确认:确认问题是否真实
- 问题处理:处理问题
- 告警恢复:问题解决后恢复告警
- 复盘总结:复盘告警处理过程
📖 学习资源
视频教程
书籍推荐
- 《Prometheus监控实战》 - Prometheus和AlertManager使用指南
- 《SRE:Google运维解密》 - Google告警机制实践
- 《监控的艺术》 - 监控和告警设计最佳实践
- 《告警系统设计》 - 告警系统设计方法论
网站资源
工具推荐
- 告警管理:AlertManager、PagerDuty、OpsGenie
- 通知渠道:邮件、短信、钉钉、企业微信、Slack
- 告警分析:Grafana、Kibana
✅ 告警机制检查清单
- [ ] 告警规则已设计
- [ ] 告警阈值已设置
- [ ] 告警级别已定义
- [ ] 通知渠道已配置
- [ ] 告警降噪已实施
- [ ] 告警升级已配置
- [ ] 值班轮换已建立
- [ ] 告警处理流程已制定