المروج عبارة عن تطبيق Webhooks لإشعارات إنذار AlertManager وهو يدعم حاليًا钉钉
و企业微信
، ويدعم عرض مخططات التنبيه في الوقت الفعلي في إشعارات الرسائل.
المشروع مكتوب بلغة Go وهناك طرق عديدة لتثبيت المروج.
استنساخ المشروع مباشرة وإنشائه يدويًا:
$ 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.
تجدر الإشارة إلى أن تنسيق Markdown الخاص بـ Enterprise WeChat لا يدعم العرض المباشر للصور.
يوجد القالب الافتراضي في 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 }}