Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Closed
Zhang21 opened this issue Sep 19, 2022 · 10 comments
Closed

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

Zhang21 opened this issue Sep 19, 2022 · 10 comments

Comments

@Zhang21
Copy link
Contributor

Zhang21 commented Sep 19, 2022

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

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

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

@Zhang21
Copy link
Contributor Author

Zhang21 commented Sep 19, 2022

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
Copy link
Contributor Author

Zhang21 commented Sep 19, 2022

prometheus告警规则示例:

annotation:
  alertgroup: ag-ops,ag-sre

@Zhang21
Copy link
Contributor Author

Zhang21 commented Sep 21, 2022

先思考下这能做能否实现

@Zhang21
Copy link
Contributor Author

Zhang21 commented Oct 10, 2022

Annotations struct里增加一个:

Alertgroup string `json:"alertgroup"`

@Zhang21
Copy link
Contributor Author

Zhang21 commented Oct 10, 2022

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

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

@Zhang21
Copy link
Contributor Author

Zhang21 commented Oct 10, 2022

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

@Zhang21
Copy link
Contributor Author

Zhang21 commented Jul 21, 2023

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

@Zhang21
Copy link
Contributor Author

Zhang21 commented Jul 26, 2023

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

  • wxurl
  • ddurl
  • fsurl
  • phone

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

@Zhang21
Copy link
Contributor Author

Zhang21 commented Jul 26, 2023

done!

@Zhang21
Copy link
Contributor Author

Zhang21 commented Jul 27, 2023

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

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

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

@Zhang21 Zhang21 closed this as completed Aug 29, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant