希望在告警通知里有以下数据:
- 告知当前系统还有多少未处理的告警。
- 告知当前告警恢复时候的具体值。
- 告警通知里增加查看未处理告警的页面链接。
具体实现
要实现上面的需求很简单,夜莺监控的数据库表alert_cur_event保存了我们所需要的当前未处理的告警总数,而且夜莺监控也提供了查询未处理告警的面板,而对于告警恢复时候的值我们只需要根据自定义的恢复promql即可查询。
最简单的方式就是直接通过notify.py脚本进行告警发送,我们只需要做一丢丢修改即可。
整体脚本如下:
需要在服务器上安装pymysql以及requests包
然后将上面的脚本放到夜莺监控面板->系统设置->通知设置->通知脚本中,并将脚本设置为启用状态。
然后新增名叫qywx的通知媒介以及名叫qywx_robot_token的联系方式,在发送告警的时候会通过通知媒介来调用通知方法,比如你的通知媒介名叫zhangsan,那么你定义的方法名就是send_zhangsan。另外还会从联系方式处获取发送的token。
然后我们来创建一个通知模板,这个模板是在原生的基础上进行更改的,如下创建一个名叫qywx的模板。
在实际发送过程中会对模板进行相应的增加。
最后,再来配置告警,比如我们现在要配置一个K8s中Pod的状态异常的告警规则,如下:
填写具体的规则名以及备注,并且填写具体的promql。
往下继续填写通知媒介以及附加信息。
其中附加信息中就有告警恢复时候的promql,在python脚本中会获取当前的promql,然后调用prometheus的接口进行查询当前值,最后填充到告警模板中去。
以上就是具体的实现思路,希望对你有所启发。
加餐
除了这种python脚本的方式,还可以通过自定义webhook的方式实现,夜莺是支持回调地址的,只需要把回调地址填写进去即可。
那这个webhook应该怎么开发呢?
其实不需要我们做啥大的开发,直接把夜莺的源码里告警相关的CV出来,改吧改吧就能直接用了。
首先,把alert_cur_event的数据结构弄过来,查表就查它。
其次,增加一个查询prometheus的接口,如下:
再则,我们就可以把需要的告警字段都动议到告警模板中,通过template自动填充数据了。
最后,就是在notify.go中做一丢丢的小修改。
比如event事件增加两个字段。
比如在notify.go中的GenNotice方法里,增加查询prometheus和数据库的代码。
整体代码也就只需要一丢丢东西。
最后
以上就是整体的实现了,这只是领导根据领导的需要做的,每个团队的需求不一样,实现方式肯定也不通,这里只是抛砖引玉。
个人建议使用webhook比较好一点,因为可以比较灵活的增加其他的功能,比如告警认领,比如告警抑制,比如告警转发等。
另外,最近刚换工作没多久,写的文章少了,但是对技术的热爱并没有减少。