【功能】增加告警组的功能
由于告警规则很多,有时候修改告警规则中的webhook地址或电话号码,虽然可以用sed或vim进行批量修改,但感觉也很麻烦。
计划增加一个告警组的功能(类似于云平台的告警通知的组),配置文件中配置对应需要通知的组,然后在prometheus rule annotation中填写对应的组。
这样即使要修改通知,也只需要修改组或组里面的成员信息即可,感觉要方便一些。
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")
prometheus告警规则示例:
annotation:
alertgroup: ag-ops,ag-sre
先思考下这能做能否实现
Annotations struct里增加一个:
Alertgroup string `json:"alertgroup"`
写一个函数判断和处理告警组相关信息:
- 配置文件中是否启用了告警组
- 从Annotaitions中取出告警组
- 清洗告警组,并从配置文件中获取出告警组的信息
- 组装和汇总所有告警组的信息,将每个组的这些子项信息分类组装到一起(如不存在,则为空)
- wxurl (
wxurl = ops-x1,ops-x2,sre-x1,sre-x2,dev-x1) - ddurl
- fsurl
- phone
- wxurl (
- 对上述汇总组装的信息去重
- 函数返回对应组装好的地址
调用上述函数,获取组装好的地址值,传入SendMessage()函数。
今天看了下源码,目前先试试 PromtheusController 这个旧的控制器里面的接口(/prometheus/alert),暂时不涉及自定义模板的那个接口(/prometheusalert)。
测试下使用告警组发送消息到:
- [x] wxurl
- [x] ddurl
- [x] fsurl
- [x] phone
其他通知媒介我没有地址,可能需要其他人来测试使用情况。
done!
关于自定义模板接口(/prometheusalert)增加告警组:
需要在 PrometheusAlertMsg 增加一个 alertgroup 字段,然后在 PrometheusAlert 中获取各个媒介地址(wxurl, ddurl...)之前先判断是否有 alertgroup 和是否开启告警组的功能,如果有就取告警组中的地址,否则就取单独传递的地址。感觉这样应该可以,先把思路写在这里。
自定义模板处请求增加新的参数:alertgroup=sa,dev,比如说是 sa 和 dev 两个告警组。然后在获取地址出增加一个从告警组获取地址的判断。