PrometheusAlert icon indicating copy to clipboard operation
PrometheusAlert copied to clipboard

【功能】增加告警组的功能

Open Zhang21 opened this issue 3 years ago • 3 comments

由于告警规则很多,有时候修改告警规则中的webhook地址或电话号码,虽然可以用sed或vim进行批量修改,但感觉也很麻烦。

计划增加一个告警组的功能(类似于云平台的告警通知的组),配置文件中配置对应需要通知的组,然后在prometheus rule annotation中填写对应的组。

这样即使要修改通知,也只需要修改组或组里面的成员信息即可,感觉要方便一些。

Zhang21 avatar Sep 19 '22 09:09 Zhang21

app.conf中的示例配置:

# 是否启用告警组
open-alertgroup = 1
# 配置告警组不同的section组
[ag-ops]
wxurl = x1,x2
ddurl = x1,x2
fsurl = x1,x2
email = x1, x2
phone = p1,p2
[ag-sre]
wxurl = x1,x2
ddurl = x1,x2
phone = p1,p2
[ag-dev]
wxurl = x1,x2
ddurl = x1,x2

不知道beego的app.conf只能写一个section?beego默认采用了 INI 格式解析配置文件。

读取不同模式下配置参数的方法是“模式::配置参数名”:

beego.AppConfig.String("ag-ops::wxurl")
beego.AppConfig.String("ag-ops::ddurl")
beego.AppConfig.String("ag-ops::phone")

Zhang21 avatar Sep 19 '22 09:09 Zhang21

prometheus告警规则示例:

annotation:
  alertgroup: ag-ops,ag-sre

Zhang21 avatar Sep 19 '22 09:09 Zhang21

先思考下这能做能否实现

Zhang21 avatar Sep 21 '22 06:09 Zhang21

Annotations struct里增加一个:

Alertgroup string `json:"alertgroup"`

Zhang21 avatar Oct 10 '22 02:10 Zhang21

写一个函数判断和处理告警组相关信息:

  • 配置文件中是否启用了告警组
  • 从Annotaitions中取出告警组
  • 清洗告警组,并从配置文件中获取出告警组的信息
  • 组装和汇总所有告警组的信息,将每个组的这些子项信息分类组装到一起(如不存在,则为空)
    • wxurl (wxurl = ops-x1,ops-x2,sre-x1,sre-x2,dev-x1)
    • ddurl
    • fsurl
    • email
    • phone
  • 对上述汇总组装的信息去重
  • 函数返回对应组装好的地址

Zhang21 avatar Oct 10 '22 02:10 Zhang21

调用上述函数,获取组装好的地址值,传入SendMessage()函数。

Zhang21 avatar Oct 10 '22 03:10 Zhang21

今天看了下源码,目前先试试 PromtheusController 这个旧的控制器里面的接口(/prometheus/alert),暂时不涉及自定义模板的那个接口(/prometheusalert)。

Zhang21 avatar Jul 21 '23 07:07 Zhang21

测试下使用告警组发送消息到:

  • [x] wxurl
  • [x] ddurl
  • [x] fsurl
  • [x] phone

其他通知媒介我没有地址,可能需要其他人来测试使用情况。

Zhang21 avatar Jul 26 '23 06:07 Zhang21

done!

Zhang21 avatar Jul 26 '23 07:07 Zhang21

关于自定义模板接口(/prometheusalert)增加告警组:

需要在 PrometheusAlertMsg 增加一个 alertgroup 字段,然后在 PrometheusAlert 中获取各个媒介地址(wxurl, ddurl...)之前先判断是否有 alertgroup 和是否开启告警组的功能,如果有就取告警组中的地址,否则就取单独传递的地址。感觉这样应该可以,先把思路写在这里。

自定义模板处请求增加新的参数:alertgroup=sa,dev,比如说是 sa 和 dev 两个告警组。然后在获取地址出增加一个从告警组获取地址的判断。

Zhang21 avatar Jul 27 '23 02:07 Zhang21