O Promoter é uma implementação de Webhooks para notificações de alarme do AlertManager. Atualmente, ele suporta钉钉
e企业微信
e suporta a exibição de gráficos de alarme em tempo real em notificações de mensagens.
O projeto está escrito na linguagem Go e há várias maneiras de instalar o Promoter.
Clone diretamente o projeto e construa-o manualmente:
$ git clone https://github.com/cnych/promoter.git
$ cd promoter
$ go build -a -o promoter cmd/promoter/main.go
$ ./promoter --config.file= < your_file >
A imagem do Promotor é carregada no Docker Hub. Você pode tentar usar o seguinte comando para iniciar o serviço:
$ docker run --name promoter -d -p 8080:8080 cnych/promoter:main
A configuração a seguir cobre basicamente a configuração usada pelo Promotor:
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
Em global, você pode configurar atributos globais, como chaves corporativas WeChat ou DingTalk. Em S3, há uma configuração de armazenamento de objetos (Alibaba Cloud OSS também pode ser usado) para salvar as imagens geradas pelo ícone de monitoramento.
Abaixo receivers
estão os receptores configurados para várias mensagens. Você pode configurar o Enterprise WeChat e o DingTalk ao mesmo tempo em um receptor. Ele suporta dois formatos: text
e markdown
. Por exemplo, name
nome aqui é rcv1
. o destinatário O endereço do Webhook é: http://<promoter-url>/rcv1/send
, que precisa ser configurado no AlertManager Webhook.
Deve-se observar que o formato Markdown do Enterprise WeChat não oferece suporte à exibição direta de imagens.
O modelo padrão está localizado em template/default.tmpl
e pode ser personalizado de acordo com suas necessidades:
{{ 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 }}