一、Grafana 告警核心架构(V9+ 统一告警)
从 Grafana 9.0 开始,Grafana 采用了统一的告警系统,支持多种数据源:
1. 数据源类型
Grafana 管理型告警:直接基于数据源(Prometheus、MySQL、InfluxDB 等)查询创建告警规则
数据源管理型告警:告警规则存储在外部系统(如 Prometheus Alertmanager、Loki Ruler)
2. 核心概念
text
数据源查询 → 告警规则 → 告警策略 → 联系点 → 通知模板 → 静默/抑制规则
二、配置告警的完整流程
步骤 1:创建告警规则
方法 A:从面板创建(推荐新手)
在已有仪表板中,编辑面板
切换到 Alert 选项卡
点击 Create alert rule from this panel
方法 B:直接创建告警规则
左侧菜单:Alerting → Alert rules
点击 New alert rule
步骤 2:配置告警规则详情
yaml
# 示例:CPU 使用率告警规则
Rule name: "High CPU Usage"
Evaluation group: "default" # 评估组,控制评估频率
步骤 3:设置查询条件
sql
-- 对于 Prometheus 数据源
Query A: 100 - (avg by(instance) (rate(node_cpu_seconds_total{mode="idle", job="$job"}[5m])) * 100)
-- 对于 MySQL 数据源
SELECT AVG(cpu_usage) FROM metrics WHERE host = '$host'
步骤 4:配置告警条件
yaml
条件表达式: "WHEN avg() OF query(A, 5m, NOW) IS ABOVE 80"
评估间隔: "每30秒"
持续时间: "5分钟" # 持续5分钟才触发告警,避免抖动
步骤 5:添加标签和注解
yaml
# 标签 - 用于路由和分组
标签:
severity: warning
team: infrastructure
resource: cpu
# 注解 - 告警通知中的详细信息
注解:
summary: "高CPU使用率: {{ $labels.instance }}"
description: "CPU使用率已达到 {{ $value }}%,持续5分钟"
runbook_url: "https://wiki.company.com/runbook/high-cpu"
步骤 6:配置通知策略
左侧菜单:Alerting → Contact points
添加联系点(通知渠道):
Slack
Webhook
PagerDuty
Microsoft Teams
钉钉/企业微信
步骤 7:配置通知策略
yaml
策略名称: "紧急告警策略"
匹配标签: severity = critical
组等待时间: 30秒 # 同组告警等待时间
重复间隔: 4小时 # 重复发送间隔
联系点: "PagerDuty-OnCall"
三、告警规则配置示例
1. CPU 使用率告警
yaml
名称: CPU使用率超过80%
数据源: Prometheus
查询:
A: 100 - (avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[2m])) * 100)
条件:
WHEN avg() OF A IS ABOVE 80
FOR 2m
标签:
severity: warning
metric: cpu
2. 内存不足告警
yaml
名称: 内存可用率低于10%
查询:
A: node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes * 100
条件:
WHEN last() OF A IS BELOW 10
FOR 1m
标签:
severity: critical
3. 服务宕机告警
yaml
名称: 服务不可用
查询:
A: up{job="api-service"}
条件:
WHEN min() OF A IS BELOW 1
FOR 30s
标签:
severity: critical
4. 错误率告警
yaml
名称: HTTP错误率超过5%
查询:
A: rate(http_requests_total{status=~"5.."}[5m])
B: rate(http_requests_total[5m])
C: (A / B) * 100 # 使用表达式
条件:
WHEN avg() OF C IS ABOVE 5
FOR 2m
四、通知渠道配置示例
1. Slack 配置
json
{
"url": "https://hooks.slack.com/services/XXX/YYY/ZZZ",
"title": "{{ template "slack.default.title" . }}",
"text": "{{ template "slack.default.text" . }}",
"channel": "#alerts",
"username": "Grafana Alert",
"icon_emoji": ":warning:"
}
2. Email 配置
yaml
地址: team-alerts@company.com
主题: "[{{ .Status | toUpper }}] {{ .GroupLabels.alertname }}"
正文模板: 自定义HTML模板
3. Webhook(对接内部系统)
json
{
"url": "http://internal-api.company.com/alerts",
"method": "POST",
"headers": {"Authorization": "Bearer xyz"},
"body": {
"alert": "{{ .GroupLabels.alertname }}",
"severity": "{{ .CommonLabels.severity }}",
"value": "{{ .CommonAnnotations.value }}"
}
}
五、高级功能
1. 告警分组
yaml
分组依据: [severity, region] # 按严重性和地区分组
组等待时间: 30秒 # 同一组告警等待30秒聚合
组间隔: 5分钟 # 组间发送间隔
2. 抑制规则
防止告警风暴,当更严重的告警触发时抑制次要告警:
yaml
源匹配:
severity: critical
目标匹配:
severity: warning
条件:
source和target的[instance]标签相等
3. 静默规则
临时屏蔽告警(用于维护期间):
yaml
匹配标签:
instance: "server-.*"
或 alertname: "HighCPU"
时间:
开始: 2024-01-01 00:00
结束: 2024-01-01 06:00
创建者: "zhangsan"
注释: "计划性维护"
4. 告警模板
自定义通知格式:
gotemplate
{{ define "custom.message" }}
告警名称: {{ .GroupLabels.alertname }}
状态: {{ .Status }}
实例: {{ .CommonLabels.instance }}
值: {{ .CommonAnnotations.value }}
时间: {{ .StartsAt }}
{{ end }}
六、最佳实践
1. 告警分级原则
yaml
P0/Critical (立即响应):
- 服务不可用
- 数据丢失
- 安全漏洞
P1/Warning (当天处理):
- 性能下降
- 容量预警
- 错误率上升
P2/Info (关注):
- 趋势性异常
- 日志模式变化
2. 有效告警的 SMART 原则
Specific:明确具体
Measurable:可度量
Actionable:可操作
Relevant:相关性强
Timely:及时性
3. 避免告警疲劳
设置合理的阈值(避免过于敏感)
使用持续时间过滤抖动
合理分组减少通知数量
设置告警升级策略
4. 告警生命周期管理

七、常见问题排查
1. 告警不触发
text
检查步骤:
1. 数据源是否正常查询到数据?
2. 告警规则是否已保存并启用?
3. 评估间隔是否合适?
4. 持续时间设置是否过长?
2. 通知未发送
text
检查步骤:
1. 联系点配置是否正确?
2. 通知策略是否匹配标签?
3. 静默规则是否生效?
4. 查看 Alerting → Notifications 查看发送状态
3. 告警状态查看
Alert rules:所有告警规则状态
Alert groups:分组后的告警
Silences:当前生效的静默
Notification policies:通知策略树
八、与外部系统集成
1. 对接 Prometheus Alertmanager
yaml
# 在 Grafana 配置中
[alerting]
enabled = true
[external_alertmanagers]
urls = "http://alertmanager:9093"
2. 通过 Webhook 触发自动化
python
# 示例:自动扩容
@app.route('/webhook/scale', methods=['POST'])
def scale_service():
alert = request.json
if alert['status'] == 'firing' and alert['labels']['metric'] == 'high_cpu':
scale_up(alert['labels']['service'])
return 'OK'
总结
Grafana 告警的核心流程:
定义规则:基于数据查询设置条件
配置通知:设置联系点和通知策略
管理告警:使用分组、抑制、静默优化体验
持续优化:定期复盘告警有效性
关键建议:
从少量关键告警开始,逐步完善
告警消息必须包含具体问题和操作建议
建立告警响应 SOP(标准作业程序)
定期清理无效告警规则
Grafana 告警的强大之处在于其与可视化仪表板的紧密集成,让你可以在看到图表异常的同时,立即配置相应的告警规则。
上一条:grafana模板
下一条:没有了!
品质保证
多年的生产力软件专家
专业实力
资深技术支持项目实施团队
安全无忧
多位认证安全工程师
多元服务
软件提供方案整合,项目咨询实施
购软平台-找企业级软件,上购软平台。平台提供更齐全的软件产品、更专业的技术服务,同时提供行业资讯、软件使用教程和技巧。购软平台打造企业级数字产品综合应用服务平台。用户体验和数字类产品的专业化服务是我们不断追求的目标。购软平台您身边的企业级数字产品优秀服务商。
沪公网安备31011302006932号