group_wait(default: 30s) #
How long to initially wait to send a notification for a group of alerts. Allows to wait for an inhibiting alert to arrive or collect more initial alerts for the same group. (Usually ~0s to few minutes.) 一组告警第一次发送之前等待的时间。用于等待抑制告警,或等待同一组告警采集更多初始告警后一起发送。(一般设置为0秒 ~ 几分钟)
group_interval(default: 5m) #
How long to wait before sending a notification about new alerts that are added to a group of alerts for which an initial notification has already been sent. (Usually ~5m or more.) 一组已发送初始通知的告警接收到新告警后,再次发送通知前等待的时间(一般设置为5分钟或更多)
repeat_interval(default: 4h) #
How long to wait before sending a notification again if it has already been sent successfully for an alert. (Usually ~3h or more). 一条成功发送的告警,在再次发送通知之前等待的时间。 (通常设置为3小时或更长时间)。
global:
scrap_interval 从目标抓取监控数据间隔
scrap_timeout 从目标抓取数据超时时间
evaluation_interval 告警规则评估时间间隔
route:
group_wait 初次发送告警的等待时间
group_interval 同一个组其他新发生的告警发送时间间隔
repeat_interval 重复发送同一个告警的时间间隔
示例 #
# group_wait: 10s
# group_interval: 30m
# repeat_interval: 50m
group_wait 设置为 2 秒:表示如果在 2 秒内收到相同的告警,系统将等待将它们归为同一个组。
group_interval 设置为 1 分钟:表示在生成了汇总告警后,系统将等待 1 分钟再次检查是否有新的相同类型的告警需要汇总。
repeat_interval 设置为 2 分钟:表示在系统生成了一条告警后,如果在 2 分钟内又收到了相同类型的告警,系统会等待 2 分钟再次生成一条相同类型的告警。
告警过程 #
- alertmanager收到告警后,等待group_wait(10s),发送第一次通知
- 未达到group_interval(30m 10s),休眠
- 达到group_interval(30m 10s)时,小于repeat_interval(50m 10s),休眠
- 到下一个group_interval(60m 10s),大于repeat_interval(50m 10s),发送第二次通知
Firing(0s) - 第一次通知(10s) - 第二次通知(60m 10s)
- 当repeat_interval小于group_interval时,repeat_interval不影响告警
- 当repeat_interval大于group_interval,且不为group_interval倍数,影响告警
- 当repeat_interval大于group_interval,且为group_interval倍数,可能影响告警
告警规则 #
groups:
- name: metrics_service_name
rules:
- alert: alertname
expr: round(((topk(1,metrics_1{name="TEST"}) and rate(metrics_1{name="TEST"}[30s])!=0 )- on (name) group_left () metrics_2{name="TEST"}),0.001) > 0.7
for: 0s
labels:
alertname: alertname
severity: critical
instance: 127.0.0.1:80
service: backend
errorcode: E60001
annotations:
metrics: metrics_1
summary: |
名称: {{ $labels.name }},
X: {{ $labels.x }},
metrics_3: {{ with query (printf "metrics_3{name='%s'}" $labels.name) }}{{ . | first | value }}{{ end }} unit,
差值: {{ $value }},
value: {{ with query (printf "topk(1, metrics_1{name='%s', x='%s'})" $labels.name $labels.x) }}{{ if . | len }}{{ printf "%.2f" (value (index . 0)) }}{{ else }}N/A{{ end }}{{ end }},
metrics_2: {{ with query (printf "metrics_2{name='%s'}" $labels.name) }}{{ . | first | value }}{{ end }}
source: alertname
热更新配置 #
curl -X POST http://localhost:9090/-/reload