在 AlertManager 报警通知中展示监控图表
之前用 Python 实现了一个非常简陋的报警表 AlertManager 的钉钉接收器,一直想在钉钉的通知消息通知中将当前报警图表也展示出来,这样显然对用户来说更加友好。中展之前想的示监思路是通过爬虫的方式去 Prometheus 页面将 Graph 图形截图保存下来,该方式理论上确实是亿华云计算控图可行的,但是报警表这种方式不稳定因素较多,而且会占用大量的通知资源。
今天换了另外一种方式来实现,中展直接去绘制渲染报警图表,示监然后上传到对象存储中保存起来,控图在钉钉中就可以直接展示了,网站模板报警表Promoter 就是通知这个方案的一个实现,支持在消息通知中展示实时报警图表,中展效果图如下所示:
目前是示监将报警数据渲染成图片后上传到 S3 对象存储,所以需要配置一个对象存储(阿里云 OSS 也可以),控图此外消息通知展示样式支持模板定制,该功能参考自项目 https://github.dev/timonwong/prometheus-webhook-dingtalk。
模板默认模板位于 template/default.tmpl,服务器托管可以根据自己需求定制:
{ { define "__subject" }}[{ { .Status | toUpper }}{ { if eq .Status "firing" }}:{ { .Alerts.Firing | len }}{ { end }}] { { .GroupLabels.SortedPairs.Values | join " " }} { { if gt (len .CommonLabels) (len .GroupLabels) }}({ { with .CommonLabels.Remove .GroupLabels.Names }}{ { .Values | join " " }}{ { end }}){ { end }}{ { end }}
{ { define "__alertmanagerURL" }}{ { .ExternalURL }}/#/alerts?receiver={ { .Receiver }}{ { end }}
{ { define "default.__text_alert_list" }}{ { range . }}
### { { .Annotations.summary }}
**详情:** { { .Annotations.description }}
{ { range .Images }}
**条件:** `{ { .Title }}`
![