prometheus+grafana+AlertManager监控Linux之告警设置(八)

一、grafana自带告警插件原理

在进行告警设置的时候,刚开始使用的是的grafana自带的告警插件Alert List,但是监控集群的时候发现,此告警插件有个明显的bug,举例来说:当你使用grafana配置了linux的CPU使用率一旦超过80%就进行告警,当A机器达到阈值一段时间后,B机器C机器也达到阈值,此时grafana自带告警插件Alert List虽然会显示告警状态,但是只会记录第一台机器的告警阈值;当A机器恢复正常时,其他机器CPU使用率依然有超过80%时,此时Alert List仍然还是记录的第一台A机器的阈值信息,只有整个集群恢复正常时,Alert List才会恢复正常。即grafana自带告警插件Alert List只会记录相同告警项的第一个告警信息,当后续有相同告警项进来时,只显示告警状态,不会更新告警机器,这是grafana自带的告警插件Alert List的设计逻辑。官方文档

grafana 收集告警信息设计 grafana设置告警_grafana 收集告警信息设计


因为grafana自带的告警插件Alert List的设计逻辑导致在实际监控中我们无法获取最准确的告警机器,所以采用了AlertManager这个软件,并与grafana告警设置相结合。

二、AlertManager安装(默认端口9093)

1.下载地址:https://prometheus.io/download/#alertmanager

放在/jiankong/app文件夹下

2.安装:

# cd /jiankong/app
# tar xvfz alertmanager-0.20.0.linux-amd64.tar.gz

3.运行

# cd /jiankong/app/alertmanager-0.20.0.linux-amd64
# ./alertmanager --config.file=alertmanager.yml

4.访问

http:// alertmanager IP:9093

三、编写告警规则的yml文件(放在Prometheus下)

注意:此配置文件的名字要与四中红框的名字一样

grafana 收集告警信息设计 grafana设置告警_List_02

#cd /jiankong/app/prometheus
#touch alertmanager_rules.yml
#vim alertmanager_rules.yml
groups:
    - name: test-rules
      rules:
      - alert: InstanceDown   #(告警一)
        expr: up == 0
        for: 1m
        labels:
          status: warning
        annotations:
          summary: "{{$labels.instance}}: has been down"
          description: "{{$labels.instance}}: job {{$labels.job}} has been down"
    - name: base-monitor-rule
      rules:
      - alert: NodeCpuUsage    #(告警二)
        expr: (100 - (avg by (instance) (irate(node_cpu_seconds_total{job=~".*",mode="idle"}[5m])) * 100)) > 10
        for: 1m
        labels:
          service_name: test
          level: warning
        annotations:
          description: "{{$labels.instance}}: CPU usage is above 10% (current value is: {{ $value }}"
参数解释:
	   - alert:  # 告警名称
     	expr: # 告警的判定条件,参考Prometheus高级查询来设定(是promSQL简单改写的,参考上面CPU的,建议先做一个低数值测试,成功后改为需要的告警数值)
    	 for:  # 满足告警条件持续时间多久后,才会发送告警
     	labels: #标签项
      	team: node
     	annotations: # 解析项,详细解释告警信息
		{{$labels.instance}}可以显示故障机ip端口
		{{ $value }}当前的值

注意:不能用tab缩进,仅监控此配置文件中内容即可。因需要grafana面板结合使用,具体告警数值和条件自行修改,但要与grafana面板告警配置一致。格式对齐

四、在prometheus配置文件中引入AlertManager配置文件

如图所示,在Prometheus.yml中,将注释打开,并配置alertmanager所在ip端口,加上告警规则的yml文件

grafana 收集告警信息设计 grafana设置告警_List_03


五、重启Prometheus

如果打开了alertmanager_rules.yml或prometheus.yml,需关闭后运行,否则无法启动

# cd /jiankong/app/prometheus-*
# ./prometheus --config.file=prometheus.yml --web.enable-lifecycle &

或(如果prometheus 在启动时使用了–web.enable-lifecycle参数,可使用下面热加载方式)

#curl -X POST http://localhost:9090/-/reload

六、访问

http://Prometheus IP:9090/alerts

grafana 收集告警信息设计 grafana设置告警_grafana 收集告警信息设计_04


grafana 收集告警信息设计 grafana设置告警_grafana 收集告警信息设计_05


grafana 收集告警信息设计 grafana设置告警_grafana 收集告警信息设计_06


9093端口也同样能展示异常信息,只有警告到达红色时会出现在9093端口,9090端口更为敏捷

grafana 收集告警信息设计 grafana设置告警_grafana 收集告警信息设计_07


需要注意的是:prometheus强制使用的是UTC时间,我们需要的时间增加8小时就是异常出现的时间

七、AlertManager结合grafana设置告警

alertmanager_rules.yml中alert的值要与grafana告警设置的告警名一致,这样方便我们看

grafana 收集告警信息设计 grafana设置告警_grafana 收集告警信息设计_08


grafana 收集告警信息设计 grafana设置告警_List_09


进入相应的监控组进行修改(新版本为铃铛图标)

grafana 收集告警信息设计 grafana设置告警_配置文件_10

关于query中三个参数修改方法:如要修改B为C,直接点击B即可

grafana 收集告警信息设计 grafana设置告警_List_11


其中node jinggao 是Notification channels中设置的

grafana 收集告警信息设计 grafana设置告警_配置文件_12


以下为新版grafana

grafana 收集告警信息设计 grafana设置告警_grafana 收集告警信息设计_13


grafana 收集告警信息设计 grafana设置告警_List_14

grafana 收集告警信息设计 grafana设置告警_linux_15


保存告警设置

每修改一次告警设置,都要进行保存,否则不会生效

grafana 收集告警信息设计 grafana设置告警_grafana 收集告警信息设计_16