普罗米修斯告警规则是Prometheus监控系统中用于定义告警条件的核心配置,通过Alertmanager组件实现告警通知。告警规则基于PromQL查询表达式,当指标数据满足特定条件时触发告警。
告警规则基本结构
告警规则通常以YAML格式配置,包含以下关键字段:
groups:
- name: example
rules:
- alert: HighRequestLatency
expr: job:request_latency_seconds:mean5m{job="myjob"} > 0.5
for: 10m
labels:
severity: page
annotations:
summary: "High request latency (instance {{ $labels.instance }})"
description: "{{ $labels.job }} has a high request latency above 0.5s (current value: {{ $value }}s)"
核心配置参数
alert:告警名称,用于标识告警类型
expr:PromQL表达式,定义告警触发条件,例如:
-
up == 0:服务不可用 -
node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes * 100 < 10:内存使用率超过90% -
rate(http_requests_total{code="500"}[5m]) / rate(http_requests_total[5m]) * 100 > 5:5xx错误率超过5%
for:持续时间,表示条件持续满足多长时间才触发告警,避免瞬时抖动
labels:标签集合,用于告警路由和分组,常见标签包括:
-
severity: critical/warning/info -
team: devops/backend/frontend
annotations :告警详情,支持模板变量,如{``{ $labels.instance }}、{``{ $value }}
常用告警规则示例
1. 服务可用性告警
- alert: ServiceDown
expr: up == 0
for: 1m
labels:
severity: critical
annotations:
summary: "服务 {{ $labels.job }} 已下线"
description: "实例 {{ $labels.instance }} 已超过1分钟不可用"
2. CPU使用率告警
- alert: HighCpuUsage
expr: 100 - (avg by(instance) (irate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 80
for: 5m
labels:
severity: warning
annotations:
summary: "CPU使用率过高 (instance {{ $labels.instance }})"
description: "CPU使用率超过80% (当前值: {{ $value }}%)"
3. 内存使用率告警
- alert: HighMemoryUsage
expr: (node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes) / node_memory_MemTotal_bytes * 100 > 85
for: 5m
labels:
severity: warning
annotations:
summary: "内存使用率过高 (instance {{ $labels.instance }})"
description: "内存使用率超过85% (当前值: {{ $value }}%)"
4. 磁盘使用率告警
- alert: HighDiskUsage
expr: (node_filesystem_size_bytes{mountpoint="/"} - node_filesystem_avail_bytes{mountpoint="/"}) / node_filesystem_size_bytes{mountpoint="/"} * 100 > 80
for: 10m
labels:
severity: warning
annotations:
summary: "磁盘使用率过高 (instance {{ $labels.instance }})"
description: "根分区使用率超过80% (当前值: {{ $value }}%)"
5. 网络错误率告警
- alert: HighNetworkErrorRate
expr: rate(node_network_receive_errs_total[5m]) / rate(node_network_receive_packets_total[5m]) * 100 > 1
for: 2m
labels:
severity: warning
annotations:
summary: "网络接收错误率过高 (instance {{ $labels.instance }})"
description: "网络接收错误率超过1% (当前值: {{ $value }}%)"
告警规则最佳实践
-
合理设置for持续时间:避免瞬时抖动触发告警,建议根据业务场景设置1-10分钟
-
使用标签分组 :通过
group_by在Alertmanager中实现告警分组,避免告警风暴 -
设置告警静默:对于计划内维护,提前设置静默规则
-
告警分级:根据影响范围设置不同严重级别(critical/warning/info)
-
定期评审告警规则:清理无效告警,优化告警阈值
-
测试告警规则 :使用
promtool验证规则语法,确保告警能正常触发
告警规则文件加载
告警规则文件通常通过Prometheus配置文件中的rule_files字段加载:
rule_files:
- "rules/*.yml"
- "first_rules.yml"
配置完成后,需要重启Prometheus服务或通过/-/reload端点热加载配置。