Promoter est une implémentation Webhooks pour les notifications d'alarme AlertManager. Il prend actuellement en charge钉钉
et企业微信
et prend en charge l'affichage de graphiques d'alarme en temps réel dans les notifications de message.
Le projet est écrit en langage Go et il existe de nombreuses façons d'installer Promoter.
Clonez directement le projet et construisez-le manuellement :
$ git clone https://github.com/cnych/promoter.git
$ cd promoter
$ go build -a -o promoter cmd/promoter/main.go
$ ./promoter --config.file= < your_file >
L'image du promoteur est téléchargée sur Docker Hub. Vous pouvez essayer d'utiliser la commande suivante pour démarrer le service :
$ docker run --name promoter -d -p 8080:8080 cnych/promoter:main
La configuration suivante couvre essentiellement la configuration utilisée par 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
Sous global, vous pouvez configurer des attributs globaux, tels que les clés d'entreprise WeChat ou DingTalk. Sous S3, il existe une configuration de stockage d'objets (Alibaba Cloud OSS peut également être utilisé) pour enregistrer les images générées par l'icône de surveillance.
receivers
ci-dessous se trouvent les récepteurs configurés pour différents messages. Vous pouvez configurer Enterprise WeChat et DingTalk en même temps dans un seul récepteur. Il prend en charge deux formats : text
et markdown
. name
est très moyen. Par exemple, le nom ici est rcv1
. le destinataire L'adresse du Webhook est : http://<promoter-url>/rcv1/send
, qui doit être configurée dans le Webhook AlertManager.
Il est à noter que le format Markdown d'Enterprise WeChat ne prend pas en charge l'affichage direct des images.
Le modèle par défaut se trouve dans template/default.tmpl
et peut être personnalisé selon vos propres besoins :
{{ 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 }}