- 配置如下:
alertmanager:
route:
receiver: web.hook
group_by: ['curve_id', "bandwidth_percentage"]
group_wait: 30s
group_interval: 5m
repeat_interval: 24h
receiver: 'web.hook'
receivers:
- name: 'web.hook'
webhook_configs:- url: 'http://10.30.1.7:81/webhook/'
send_resolved: false
- url: 'http://10.30.1.7:81/webhook/'
prometheus:
global:
scrape_interval: 15s
evaluation_interval: 5m
alerting:
alertmanagers:
- static_configs:
- targets:
- localhost:9093
rule_files:
- localhost:9093
- targets:
- /root/prometheus-2.28.0.linux-amd64/rules/*.rules
scrape_configs: - job_name: prometheus
static_configs:- targets:
- localhost:9090
labels:
group: myself
- localhost:9090
- targets:
- job_name: "10713"
static_configs:- targets:
- ip:port
labels:
alarm_type: traffic_low_alarm
system: online
metrics_path: /metrics/10713
scrape_interval: 1h
- ip:port
- targets:
预想的情况是:
每隔一个小时抓取一次exporter, 当使用率小于某个值的情况下告警,重复告警间隔1天(因为使用率是为昨天的最大值所以一天内不会改变),将告警记录存入数据库中
实际碰到的情况:
数据库中6小时内接收到了两次告警并且有一次告警带了两条alert(因为group_by根据'curve_id', "bandwidth_percentage"组里面最多只有一个alert,有两条是不正常的)
调查结果:
我的第一次告警是在18:32分, 如果按照repeat_interval为24h下次告警应为第二天的18:32分, 调查后发现当表达式的value被改变了以后(我的情况是改变后依然符合告警), 这时候alertManger就会等待group_interval重新向webhook告警, 具体流程为:
image.png
后续调查:
发现一个很坑的东西, 如果在rule里面设置了变量如{{lable.XX}}等只要变量一改变prometheus就会认为这是一条新的告警就会在group_interval后重新发一条告警信息, repeat_interval则不生效, 解决方法就是讲value这些变量放在Annotations中