date: 2020-10-28title: Prometheus实现钉钉+邮件告警 #标题
tags: Prometheus #标签
categories: 监控 # 分类
此博文实现Prometheus不同告警级别的信息发送至不同的告警介质,如warning级别的告警发送至邮箱,critical级别的告警发送至钉钉。
本文基于部署Prometheus监控k8s集群进行配置。
创建钉钉机器人
群聊添加机器人
自定义如下两项内容:
安装webhook插件
在任意节点安装此插件即可,只要altermanager可以和此节点通信。如下:
$ wget https://github.com/timonwong/prometheus-webhook-dingtalk/releases/download/v1.4.0/prometheus-webhook-dingtalk-1.4.0.linux-amd64.tar.gz
$ tar zxf prometheus-webhook-dingtalk-1.4.0.linux-amd64.tar.gz -C /opt
$ ln -sf /opt/prometheus-webhook-dingtalk-1.4.0.linux-amd64 /opt/prometheus-webhook-dingtalk
$ cd /opt/prometheus-webhook-dingtalk
# 启动dingtalk程序
$ nohup ./prometheus-webhook-dingtalk --web.listen-address="0.0.0.0:8060" --ding.profile="alert=https://oapi.dingtalk.com/robot/send?access_token=39a2284ace0c37e5a2871085892efbba42062fd9571f7aea56d" &
# 其中--ding.profile="alert 指定的alert为你创建顶顶机器人时自定义的关键字
# https://oapi.dingtalk.com/robot/send?ac.... 是你钉钉机器人生成的webhook。
# 确定端口在监听
$ ss -lnput | grep 8060
tcp LISTEN 0 128 [::]:8060 [::]:* users:(("prometheus-webh",pid=123196,fd=3))
定义alertmanager配置文件
这里对配置文件进行一个解释,后面有无注释的配置文件。
参考:Prometheus-book。
$ cat >alertmanager-cm.yaml <<EOF
kind: ConfigMap
apiVersion: v1
metadata:
name: alertmanager
namespace: prom
data:
alertmanager.yml: |-
global: # 全局配置
resolve_timeout: 1m #设置解析超时时间
# 下面smtp开头的是邮箱相关配置,请换成自己的
smtp_smarthost: 'smtp.163.com:25'
smtp_from: 'lv916551516@163.com'
smtp_auth_username: 'lv916551516@163.com'
smtp_auth_password: 'KRIUAMMLHGGYEGB'
smtp_require_tls: false
route: # 告警信息路由配置
group_by: [alertname] # 以哪个标签进行分组
group_wait: 10s # 分组等待时间,拿到第一条告警后等待10s,如果在这个组有其他的告警一起发送出去
group_interval: 10s # 各个分组发送告警的间隔时间(如果多个分组都有告警,则每隔10s依次发送每个分组的告警信息)
repeat_interval: 10m # 重复告警时间,默认1小时
receiver: 'default-receiver' # 默认所有告警信息发送至 default-receiver
routes: # 定义一个子路由,匹配critical级别的告警,发送至 cluster1
- receiver: cluster1
group_wait: 10s
match_re:
severity: critical
receivers: # receivers 字段定义的就是上面指定的两个路由配置
- name: 'default-receiver'
email_configs:
- to: '916551516@qq.com'
send_resolved: true
- name: 'cluster1'
webhook_configs:
- url: 'http://192.168.20.2:8060/dingtalk/alert/send'
send_resolved: true
inhibit_rules: # inhibit_rules 字段为告警抑制,同一指标有critical级别告警的话,就忽略warning告警信息
- source_match:
severity: 'critical'
target_match:
severity: 'warning'
equal: ['alertname']
其中,group_by指定的标签,是源自于如下:
是的,我们在定义group_by时,可以选择alert中包含的任意一个labels,根据自己需求来就行。那么这些labels是怎么来的呢?可以看看我们定义的Prometheus的告警规则,如下:
是的,定义告警规则后,默认会有一些标签,但我们也可以在上面的配置中的labels中自定义一些标签,如上,severity: warnning
就是我们自定义的标签。
完整无注释的配置文件如下:
$ cat >alertmanager-cm.yaml <<EOF
kind: ConfigMap
apiVersion: v1
metadata:
name: alertmanager
namespace: prom
data:
alertmanager.yml: |-
global:
resolve_timeout: 1m
smtp_smarthost: 'smtp.163.com:25'
smtp_from: 'lv916551516@163.com'
smtp_auth_username: 'lv916551516@163.com'
smtp_auth_password: 'KRIUAMMLHGGYEGB'
smtp_require_tls: false
route:
group_by: [alertname]
group_wait: 10s
group_interval: 10s
repeat_interval: 10m
receiver: 'default-receiver'
routes:
- receiver: cluster1
group_wait: 10s
match_re:
severity: critical
receivers:
- name: 'default-receiver'
email_configs:
- to: '916551516@qq.com'
send_resolved: true
- name: 'cluster1'
webhook_configs:
- url: 'http://192.168.20.2:8060/dingtalk/alert/send'
send_resolved: true
inhibit_rules:
- source_match:
severity: 'critical'
target_match:
severity: 'warning'
equal: ['alertname']
EOF
$ kubectl apply -f alertmanager-cm.yaml # 生成配置文件
当配置文件生成后,请自行重启alertmanager容器,使其配置生效,然后验证是否可以实现博文开头说的功能。
验证
如下,我这里critical级别的告警信息会通过钉钉机器人发送至钉钉群:
warning级别的告警信息会发送至邮箱: