Promoter는 AlertManager 알람 알림을 위한 Webhooks 구현입니다. 현재钉钉
및企业微信
지원하며 메시지 알림에 실시간 알람 차트 표시를 지원합니다.
프로젝트는 Go 언어로 작성되었으며 Promoter를 설치하는 방법은 다양합니다.
프로젝트를 직접 복제하고 수동으로 빌드합니다.
$ git clone https://github.com/cnych/promoter.git
$ cd promoter
$ go build -a -o promoter cmd/promoter/main.go
$ ./promoter --config.file= < your_file >
프로모터 이미지가 Docker Hub에 업로드됩니다. 다음 명령을 사용하여 서비스를 시작할 수 있습니다.
$ docker run --name promoter -d -p 8080:8080 cnych/promoter:main
다음 구성은 기본적으로 프로모터에서 사용하는 구성을 다룹니다.
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
글로벌에서는 엔터프라이즈 WeChat 또는 DingTalk 키와 같은 글로벌 속성을 구성할 수 있습니다. S3에서는 모니터링 아이콘으로 생성된 사진을 저장하기 위한 개체 스토리지(Alibaba Cloud OSS도 사용할 수 있음) 구성이 있습니다.
아래 receivers
다양한 메시지에 대해 구성된 수신기입니다. 하나의 수신기에서 동시에 Enterprise WeChat과 DingTalk를 구성할 수 있습니다. 이는 text
및 markdown
두 가지 형식을 지원합니다. 예를 들어 여기서 name
은 rcv1
입니다. 수신자 Webhook 주소는 http://<promoter-url>/rcv1/send
이며 AlertManager Webhook에서 구성해야 합니다.
Enterprise WeChat의 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 }}