一、前言
要实现Prometheus的告警发送需要通过alertmanager组件,当prometheus触发告警策略时,会将告警信息发送给alertmanager,然后alertmanager根据配置的策略发送到邮件或者钉钉中,发送到钉钉需要安装额外的prometheus-webhook-dingtalk组件,用于发送告警信息到钉钉中,如果是用邮件的话直接在alertmanager配置即可,不用安装额外组件
二、部署
这里就主要讲解发送告警信息到钉钉中的配置
2.1部署alertmanager
下载altermanager安装包,我这边下载的是0.25.0版本
下载路径:Releases · prometheus/alertmanager · GitHub
mkdir /opt/alertmanager && cd /opt/alertmanager
tar -zxvf alertmanager-0.25.0.linux-amd64.tar.gz
mv alertmanager-0.25.0.linux-amd64 alertmanager
cd alertmanager && ls
配置系统管理启动alertmanager服务
vi /usr/lib/systemd/system/alertmanager.serivce
[Unit]
Description=alertmanager
After=network.target
[Service]
ExecStart=/opt/alertmanager/alertmanager/alertmanager --config.file=/opt/alertmanager/alertmanager/alertmanager.yml #配置启动服务命令,指定配置文件
User=root
[Install]
WantedBy=multi-user.target
2.2部署prometheus-webhook-dingtalk
在部署前先配置好钉钉机器人,启用加签功能,复制webhook地址和加签密钥
下载prometheus-webhook-dingtalk安装包,我这边下载的是2.1.0版本
下载路径:Releases · timonwong/prometheus-webhook-dingtalk · GitHub
mkdir /opt/dingtalk && cd /opt/dingtalk
tar -zxvf prometheus-webhook-dingtalk-2.1.0.linux-amd64.tar.gz
mv prometheus-webhook-dingtalk-2.1.0.linux-amd64 dingtalk
cd dingtalk && ls
复制重命名配置文件
cp config.example.yml config.yml
编辑配置文件
vi config.yml
templates:
- /opt/dingtalk/dingtalk/template.tmpl #配置告警信息模板
targets:
webhook1:
url: https://oapi.dingtalk.com/robot/send?access_token=cfe1e0d1cfb457a31b20d6005785f5c7367542d5bd82725eb1b2f6738d0be418 #配置上面记录的钉钉机器人的webhook
# secret for signature
secret: SEC60b0e5076407b1d1d97c26afa2acb54edf7270b9e23826a65c3f085e48c5dcfd #配置上面记录的钉钉机器人加签的密钥,下面的内容按照默认配置即可
webhook2:
url: https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxxxxxx
webhook_legacy:
url: https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxxxxxx
# Customize template content
message:
# Use legacy template
title: '{{ template "legacy.title" . }}'
text: '{{ template "legacy.content" . }}'
webhook_mention_all:
url: https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxxxxxx
mention:
all: true
webhook_mention_users:
url: https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxxxxxx
mention:
mobiles: ['156xxxx8827', '189xxxx8325']
编辑告警模板
vi /opt/dingtalk/dingtalk/template.tmpl
{{ define "__subject" }}
[{{ .Status | toUpper }}{{ if eq .Status "firing" }}:{{ .Alerts.Firing | len }}{{ end }}]
{{ end }}
{{ define "__alert_list" }}{{ range . }}
---
{{ if .Labels.owner }}@{{ .Labels.owner }}{{ end }}
**告警主题**: {{ .Annotations.summary }}
**告警类型**: {{ .Labels.alertname }}
**告警级别**: {{ .Labels.severity }}
**告警主机**: {{ .Labels.instance }}
**告警信息**: {{ index .Annotations "description" }}
**告警时间**: {{ dateInZone "2006.01.02 15:04:05" (.StartsAt) "Asia/Shanghai" }}
{{ end }}{{ end }}
{{ define "__resolved_list" }}{{ range . }}
---
{{ if .Labels.owner }}@{{ .Labels.owner }}{{ end }}
**告警主题**: {{ .Annotations.summary }}
**告警类型**: {{ .Labels.alertname }}
**告警级别**: {{ .Labels.severity }}
**告警主机**: {{ .Labels.instance }}
**告警信息**: {{ index .Annotations "description" }}
**告警时间**: {{ dateInZone "2006.01.02 15:04:05" (.StartsAt) "Asia/Shanghai" }}
**恢复时间**: {{ dateInZone "2006.01.02 15:04:05" (.EndsAt) "Asia/Shanghai" }}
{{ end }}{{ end }}
{{ define "default.title" }}
{{ template "__subject" . }}
{{ end }}
{{ define "default.content" }}
{{ if gt (len .Alerts.Firing) 0 }}
**====侦测到{{ .Alerts.Firing | len }}个故障====**
{{ template "__alert_list" .Alerts.Firing }}
---
{{ end }}
{{ if gt (len .Alerts.Resolved) 0 }}
**====恢复{{ .Alerts.Resolved | len }}个故障====**
{{ template "__resolved_list" .Alerts.Resolved }}
{{ end }}
{{ end }}
{{ define "ding.link.title" }}{{ template "default.title" . }}{{ end }}
{{ define "ding.link.content" }}{{ template "default.content" . }}{{ end }}
{{ template "default.title" . }}
{{ template "default.content" . }}
配置系统管理启动prometheus-webhook-dingtalk服务
vi /usr/lib/systemd/system/dingtalk.service
[Unit]
Description=prometheus-webhook-dingtalk
After=network.target
[Service]
ExecStart=/opt/dingtalk/dingtalk/prometheus-webhook-dingtalk --config.file=/opt/dingtalk/dingtalk/config.yml
User=root
[Install]
WantedBy=multi-user.target
配置开机启动dingtalk服务
systemctl enable dingtalk && systemctl start dingtalk
查看钉钉服务端口
netstat -tlpn
前面还没有配置和启动alertmanager服务,现在来编辑alertmanager配置文件
vi /opt/alertmanager/alertmanager/alertmanager.yml
route:
group_by: ['dingding'] #配置告警分组的标签
group_wait: 30s #配置项定义分组等待时间,当一组告警被触发后,在这个时间段内,其他属于同一组的告警也会被等待。这可以用于在一定时间内收集同一组告警,以便一次性发送通知
group_interval: 5m #配置项定义分组间隔时间,一旦一个告警组的首个告警触发了通知,等待指定的间隔时间后,即使组内有其他告警,也会重新触发通知。这可以避免过于频繁地发送通知
repeat_interval: 1h #配置项定义重复通知的间隔时间,在一组告警已经触发过一次通知后,过了指定的间隔时间,如果该组内的告警仍然处于触发状态,会再次触发通知。这可以用于周期性地提醒用户
receiver: 'web.hook' #配置默认的接收者名称,用于定义接收告警通知的目标
routes:
- receiver: 'web.hook' #定义一个路由规则,将告警发送到名为 'web.hook' 的接收者
match_re: #使用正则表达式来匹配告警标签,该配置是匹配所有告警
alertname: ".*"
receivers:
- name: 'web.hook' #定义名为 'web.hook' 的接收者
webhook_configs: #指定接收者的配置
- url: 'http://10.1.60.118:8060/dingtalk/webhook1/send' #指定启用的钉钉组件服务为接收者,webhook1也是刚刚dingtalk配置文件的指定项
send_resolved: true #表示也会发送已解决的告警通知
inhibit_rules: #- source_match: 和 - target_match: 定义了一条抑制规则,这条规则表示当源告警的标签中 severity 是 'critical' 时,会抑制目标告警中 severity 是 'warning' 的告警
- source_match:
severity: 'critical'
target_match:
severity: 'warning'
equal: ['alertname', 'dev', 'instance'] #指定了需要相等的标签列表,只有这些标签相同的告警才会进行抑制
alertmanager服务开机启动
systemctl enable alertmanager && systemctl start alertmanager
查看altermanager服务
netstat -tlpn
9094是alertmanager集群服务的通信端口,9093是alertmanager的服务端口
访问alertmanager服务
http://10.1.60.118:9093
在Prometheus的配置文件中配置alertmanager服务地址并配置告警规则就可以使用alertmanager服务实现钉钉告警了