SpringBoot整合AlertManager,实现自定义的告警收敛以及邮件处理,告警风暴,解决重复告警问题
需求
将传感器通过Http发送到微服务(SpringBoot项目)的警报消息,通知给对应的联系人。不能重复发送相同的警告
问题分析
首先分析一波问题,这里我们先假设有一个接口可以接收传感器发送过来的请求。那么我们需要做的就是,把告警消息推送给对应的联系人。这里再一次简化,假设告警消息里面就携带了联系人的信息。
意思就是我们可以直接把收到的告警消息,解析,然后获取对应的联系人,然后通过邮件、短信、电话、钉钉等通讯工具发送。
真有这么简单吗?
这里我们忽略了一个问题。如果传感器开始发出警报了,那么就意味着,在这之后的一段时间之内,微服务平台都会接收到一模一样的告警消息。自然而然用户就会接收到大量重复的告警消息,这样就会造成“狼来了”的现象。这个问题才是我们需要实际解决的问题。
如果要解决这个问题,我们的切入点就应该是,如何去除大量的重复消息?意思就是我们需要在告警消息接收端和邮件发送端中间加入一个中间件,实现对告警消息的去重、过滤。
解决方案
从上面的分析中,我们需要实现的其实就是对告警消息的去重、过滤。而AlertManager,刚好就可以做到这件事情。
具体原理我这里就不细说了,大家可以自行百度。
官方文档地址传送门:https://prometheus.io/docs/alerting/latest/configuration/