promoter
0.2.3
Promoter 是一個用於AlertManager 警報通知的Webhooks 實現,目前支援钉钉
和企业微信
,支援在訊息通知中展示即時警報圖表。
該專案使用Go 語言編寫,有多種方式來安裝Promoter。
直接clone 專案手動建置:
$ git clone https://github.com/cnych/promoter.git
$ cd promoter
$ go build -a -o promoter cmd/promoter/main.go
$ ./promoter --config.file= < your_file >
Promoter 映像上傳到了Docker Hub,你可以嘗試使用下面的指令來啟動服務:
$ docker run --name promoter -d -p 8080:8080 cnych/promoter:main
下面的配置基本上涵蓋了Promoter 使用的配置:
global :
prometheus_url : http://192.168.31.31:30104
wechat_api_secret : <secret>
wechat_api_corp_id : <secret>
dingtalk_api_token : <secret>
dingtalk_api_secret : <secret>
s3 :
access_key : <secret>
secret_key : <secret>
endpoint : oss-cn-beijing.aliyuncs.com
region : cn-beijing
bucket : <bucket>
receivers :
- name : rcv1
wechat_configs :
- agent_id : <agent_id>
to_user : " @all "
message_type : markdown
message : ' {{ template "wechat.default.message" . }} '
dingtalk_configs :
- message_type : markdown
markdown :
title : ' {{ template "dingtalk.default.title" . }} '
text : ' {{ template "dingtalk.default.content" . }} '
at :
atMobiles : [ "123456" ]
isAtAll : false
在global 下面可以配置全域屬性,例如企業微信或釘釘的金鑰,S3 下面是一個物件儲存(阿里雲OSS 也可以)配置,用來保存監控圖示產生的圖片。
receivers
下面是配置的各種訊息的接收器,可以在一個接收器中同時配置企業微信和釘釘,支援text
和markdown
兩種格式,其中的name
非常中, 例如這裡名稱叫rcv1
,那麼該接收器的Webhook 位址為: http://<promoter-url>/rcv1/send
,在AlertManager Webhook 中需要設定該位址。
需要注意企業微信的Markdown 格式不支援直接展示圖片
預設模板位於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 "default.__text_alert_list" }}{{ range . }}
**{{ .Annotations.summary }}**
{{ range .Images }}
![click there get alert image]({{ .Url }})
{{- end }}
**description:**
> {{ .Annotations.description }}
**labels:**
{{ range .Labels.SortedPairs }}{{ if and (ne (.Name) "severity") (ne (.Name) "summary") }}> - {{ .Name }}: {{ .Value | markdown | html }}
{{ end }}{{ end }}
{{ end }}{{ end }}
{{ define "dingtalk.default.title" }}{{ template "__subject" . }}{{ end }}
{{ define "dingtalk.default.content" }}
{{ if gt (len .Alerts.Firing) 0 -}}
### {{ .Alerts.Firing | len }} Alerts Firing:
{{ template "default.__text_alert_list" .Alerts.Firing }}
{{ range .AtMobiles }}@{{ . }}{{ end }}
{{- end }}
{{ if gt (len .Alerts.Resolved) 0 -}}
### **{{ .Alerts.Resolved | len }} Alerts Resolved:**
{{ template "default.__text_alert_list" .Alerts.Resolved }}
{{ range .AtMobiles }}@{{ . }}{{ end }}
{{- end }}
{{- end }}
{{ define "wechat.default.message" }}
{{ if gt (len .Alerts.Firing) 0 -}}
### {{ .Alerts.Firing | len }} Alerts Firing:
> {{ template "default.__text_alert_list" .Alerts.Firing }}
{{- end }}
{{ if gt (len .Alerts.Resolved) 0 -}}
### **{{ .Alerts.Resolved | len }} Alerts Resolved:**
{{ template "default.__text_alert_list" .Alerts.Resolved }}
{{- end }}
{{- end }}
{{ define "wechat.default.to_user" }}{{ end }}
{{ define "wechat.default.to_party" }}{{ end }}
{{ define "wechat.default.to_tag" }}{{ end }}
{{ define "wechat.default.agent_id" }}{{ end }}