什么是分组
我现在有200台主机,上面都部署了node-exporter。 我的告警规则和前面一样监听node节点的服务是否正常
现在突然服务器宕机了,这200台节点的告警会同时触发,然后向你发送200个邮件告警((っ °Д °;)っ)完犊子
但是配置了分组后,200条告警发送到alertmanager,一看标签都是一样那就分到一个组里,合并成一条告警进行发送。以此来减少无用的邮箱信息
#先来看一下我们的配置
#cat /etc/alertmanager/alertmanager.yml
route:
group_by: ['alertname']
group_wait: 5s
group_interval: 5s
repeat_interval: 5m
receiver: 'email'
#这里有一个group_by的参数,它的作用就是将相同k/v的标签放到一个组里
我们这里将两台node-exporter关掉看一下
如上,标签alertname的value是相同的,所以会分到一个组中,可以在alertmanager中查看
查看邮件,可以看到已经将两条告警合并了
我们这里再添加一条告警触发规则
cat >> /etc/prometheus/rules/node_up.yml <<EOF
- name: grafana
rules:
- alert: node-up #这个相当于alertname的值,与之前匹配的相同
expr: up{job="grafana"} == 0
for: 10s
labels:
severity: 1
team: grafana #这里标签设置不同的一会用
annotations:
summary: "{{ \$labels.instance }} 已停止运行超过 15s"
description: hello world
EOF
#重载prometheus
systemctl restart prometheus
我们这里将grafana停掉,因为这里alertname的值和上面的node相同,应该会分配到一个组中告警
如上,grafana已经被分配到和node一个组中,我们下面看下邮件
已经合并了,但是我们一般告警名称是不会相同,这里我们去匹配定义告警时的子标签
#我们先看一下设置了那些子标签
groups:
- name: node-up
rules:
....
severity: 1
team: node
...
- name: grafana
rules:
...
labels: #这个是我们自定义告警时附加的标签
severity: 1
team: grafana #注意,两边的team的值是不同的,我们使用这个去对比
...
修改alertmanager分组(3个节点)
vi /etc/alertmanager/alertmanager.yml
...
route:
group_by: ['alertname','team'] #在这里添加team匹配的标签
group_wait: 5s
group_interval: 5s
repeat_interval: 5m
receiver: 'email'
...
#重载服务
systemctl restart alertmanager
从下图我们可以看到当有多个标签匹配时,有任意标签k/v不相同时,就不会分为同一组(可以按照不同集群来分发)
我们的邮件也被分成两个组进行发送了