linux系统监控之实时警报

前面我们讲过怎么用prometheus和grafana,加node_exporter全面监控linux系统的各个指标和历史曲线。作为运维人员,有这样一个控制台可以查看运行状态是必要的,但是,不能一直在控制台上面查看,所以,prometheus提供了alert的功能,这个功能在grafana中也支持,但是grafana中,只能支持曲线展示的graph才可以添加alert,而且通知的信息内容在定制方面也差很多,所以,官方也是建议如果使用alert,最好是使用alertmanager来提供警报。所以,这里我们使用prometheus的alertmanager来作为警报系统。

linux系统监控之实时警报

architecture

从prometheus整个生态系统的架构图中,可以很清楚看出来,prometheus server发出警报给alertmanager,然后alertmanager根据不同的路由来发送到不同的通知渠道。这里我们在docker-compose.yml中,添加alertmanager的启动,并使prometheus连接到alertmanager。

linux系统监控之实时警报

下面,我们需要修改prometheus的配置文件,设置prometheus的alert push的target地址。

linux系统监控之实时警报

alerting 配置

这里我们把alert push到了alertmanager的9093端口,因为我们在docker-compose文件中,做了连接。如果有多个alertmanager的话,我们可以写多个targets。

然后,要添加rule文件,来定义警告规则。

linux系统监控之实时警报

rules

我们来看一下rule文件是怎么配置的。

linux系统监控之实时警报

rules.yml

我们可以定义多个alert,这里我们就定义了一个简单的警告,机器当前的内存使用超过102400 bytes时候,会发出警告。for: 30s表示,prometheus在第一次遇到这个警报后,等待30s,如果还是处于活动状态的话,再触发警报,如果处于活动状态(Active),但没有触发(Firing)处于暂挂状态(Pending),这就是alert的一个静默期。否则,警告就会一直不停的发送。

annotations可以把当前query到的结果综合到一个长的表达式里面,然后在alert的template中,直接获取这段表达。比如当前,我们设置了一个summary,说明变量为instance的这个node内存使用过高,当前内存使用是多少。

定义好prometheus的rules之后,我们就可以修改alertmanager的配置。

linux系统监控之实时警报

config.yml

这里我们可以定义多个receivers,来指定不同的警报接受者,最新的alertmanager已经支持了企业微信的通知,所以大家可以注册一个企业微信,来接受警报通知。需要到自己的企业微信后台,拿到企业id (corp_id),然后创建一个应用,可以拿到agent_id和api_secret。把对应的信息填写到这里。

上面的routes定义了各个级别的警报的接受者,下面的templates,我们可以在里面定义通知的内容,基于什么样的模板来发送。

linux系统监控之实时警报

这里,我们定义了wechat的默认信息模板,首先是消息的标题,然后我们会遍历所有的alerts,然后输出alerts的简要信息,这个是我们之前定义的annotation里面写的summary。

然后,我们就可以在企业微信中,当内存超过阈值的时候,就可以收到警报信息了。

linux系统监控之实时警报

警报信息

ok,到这我们就简单配好了prometheus的alertmanager把警报信息发送到企业微信中。谢谢大家。


分享到:


相關文章: