Kubernetes监控体系(12)-alertmanager配置钉钉和邮件告警

打开电脑版钉钉创建机器人
1.创建钉钉机器人
打开电脑版钉钉,创建一个群,创建自定义机器人,按如下步骤创建
https://ding-doc.dingtalk.com/doc#/serverapi2/qf2nxq

我创建的机器人如下:
群设置-->智能群助手-->添加机器人-->自定义-->添加

机器人名称:kube-event
接收群组:钉钉报警测试

安全设置:
自定义关键词:cluster1

上面配置好之后点击完成即可,这样就会创建一个kube-event的报警机器人,创建机器人成功之后怎么查看webhook,按如下:

点击智能群助手,可以看到刚才创建的kube-event这个机器人,点击kube-event,就会进入到kube-event机器人的设置界面

出现如下内容:
机器人名称:kube-event
接受群组:钉钉报警测试
消息推送:开启
webhook:https://oapi.dingtalk.com/robot/send?access_token=9c03ff1f47b1d15a10d852398cafb84f8e81ceeb1ba557eddd8a79e5a5e5548e
安全设置:
自定义关键词:cluster1


2.安装钉钉的webhook插件,在k8s-master节点操作

wget https://github.com/timonwong/prometheus-webhook-dingtalk/releases/download/v0.3.0/prometheus-webhook-dingtalk-0.3.0.linux-amd64.tar.gz

tar zxvf prometheus-webhook-dingtalk-0.3.0.linux-amd64.tar.gz
cd prometheus-webhook-dingtalk-0.3.0.linux-amd64

nohup ./prometheus-webhook-dingtalk --web.listen-address="0.0.0.0:8060" --ding.profile="cluster1=https://oapi.dingtalk.com/robot/send?access_token=9c03ff1f47b1d15a10d852398cafb84f8e81ceeb1ba557eddd8a79e5a5e5548e" &


cp alertmanager-cm.yaml alertmanager-cm.yaml.bak

cat >alertmanager-cm.yaml <


配置alertmanager-cm.yaml文件
kubectl apply -f alertmanager-cm.yaml
kubectl apply -f prometheus-cfg.yaml
kubectl delete -f prometheus-deploy.yaml
kubectl apply -f prometheus-deploy.yaml


cat >alertmanager-cm.yaml <

kubectl apply -f alertmanager-cm.yaml
kubectl apply -f prometheus-cfg.yaml
kubectl delete -f prometheus-deploy.yaml
kubectl apply -f prometheus-deploy.yaml

kubectl get pods -n monitor-sa  显示如下,说明pod运行正常:
prometheus-server-76d7bb949d-lf6sb   2/2     Running       0          5s

alertmanager配置参数说明

global:                                  #全局配置
  resolve_timeout: 1m         #设置解析超时时间
  group_by: ['alertname']    #alertmanager中的分组,选哪个标签作为分组的依据
  group_wait: 10s         #分组等待时间,拿到第一条告警后等待10s,如果在这个组有其他的告警一起发送出去
  group_interval: 10s    #各个分组发送告警的间隔时间
  repeat_interval: 1h    #重复告警时间,默认1小时
  receiver:  'default-receiver'       #默认的接收者,如果报警没有匹配到接收器,则发到这个默认的接收器上

alertmanager基于标签的告警路由处理

    route:
      group_by: [alertname]
      group_wait: 10s
      group_interval: 10s
      repeat_interval: 10m
      receiver: default-receiver
    receivers:
    - name: 'default-receiver'
      email_configs:
      - to: '[email protected]'
        send_resolved: true




在Alertmanager的配置中会定义一个基于标签匹配规则的告警路由树,以确定在接收到告警后Alertmanager需要如何对其进行处理,其中route中主要定义了告警的路由匹配规则,以及Alertmanager需要将匹配到的告警发送给哪一个receiver,如上所示:在Alertmanager配置文件中,我们只定义了一个路由,那就意味着所有由Prometheus产生的告警在发送到Alertmanager之后都会通过名为default-receiver的receiver接收,这里的default-receiver定义为一个邮箱,
在实际生产环境下,对于不同级别的告警,我们可能会不完全不同的处理方式,因此在route中,我们还可以定义更多的子Route,这些Route通过标签匹配告警的处理方式,如下所示:

   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: '[email protected]'
        send_resolved: true  
    - name: 'cluster1'
      webhook_configs:
      - url: 'http://192.168.124.16:8060/dingtalk/cluster1/send'
        send_resolved: true


路由匹配:参考https://yunlzheng.gitbook.io/prometheus-book/parti-prometheus-ji-chu/alert/alert-manager-route


如果警报已经成功发送通知, 如果想设置发送告警通知之前要等待时间,则可以通过repeat_interval参数进行设置。


alertmanager告警抑制

    inhibit_rules:
    - source_match:
          severity: 'critical'
       target_match:
          severity: 'warning'
       equal: ['alertname']


告警抑制:
  - alert: apiserver的cpu使用率大于80%
        expr: rate(process_cpu_seconds_total{job=~"kubernetes-apiserver"}[1m]) * 100 > 80
        for: 2s
        labels:
          severity: warnning
        annotations:
          description: "{{$labels.instance}}的{{$labels.job}}组件的cpu使用率超过80%"
      - alert:  apiserver的cpu使用率大于90%
        expr: rate(process_cpu_seconds_total{job=~"kubernetes-apiserver"}[1m]) * 100 > 90
        for: 2s
        labels:
          severity: critical
        annotations:
          description: "{{$labels.instance}}的{{$labels.job}}组件的cpu使用率超过90%"

上面的告警规则可以看到,promethues中配置两条告警规则,假如cpu达到95%,会发出两条告警,但是其中一个是多余的,我们只希望报出来一条告警,这就需要设置告警抑制
 - source_match:
          severity: 'critical'
       target_match:
          severity: 'warning'
上面告警抑制表示,当我们既有warnning,又有critical时候,只把critical告警信息发出来,这就是告警抑制

alertmanager告警临时静默:


打开alertmanager的web ui界面
可看到有silenced(静默)和inhibited(抑制)

Prometheus基于Alertmanager实现钉钉告警

 推荐 原创

XiaoMingSix2020-10-22 16:44:47©著作权

文章标签prometheusAlertmanagerWebhook文章分类监控阅读数5857

1.安装prometheus-webhook-dingtalk插件

wget https://github.com/timonwong/prometheus-webhook-dingtalk/releases/download/v0.3.0/prometheus-webhook-dingtalk-0.3.0.linux-amd64.tar.gz
tar -zxf prometheus-webhook-dingtalk-0.3.0.linux-amd64.tar.gz -C /opt/
mv /opt/prometheus-webhook-dingtalk-0.3.0.linux-amd64 /opt/prometheus-webhook-dingtalk

2.钉钉创建机器人自定义告警关键词并获取token

Kubernetes监控体系(12)-alertmanager配置钉钉和邮件告警_第1张图片

选择群组—>群设置–>添加智能群助手–>添加机器人

注意:选择过程中会有三种安全设置(这里我们只用第一种)
1.第一个自定义关键字是说你在以后发送的文字中必须要有这个关键字,否则发送不成功。
2.加签是一种特殊的加密方式,第一步,把timestamp+"\n"+密钥当做签名字符串,使用HmacSHA256算法计算签名,然后进行Base64 encode,最后再把签名参数再进行urlEncode,得到最终的签名(需要使用UTF-8字符集)。
3.IP地址就是说你在发送时会获取你的IP地址,如果不匹配就发送不成功。这个加密的方式可以自己选择,我们选择加签。如果你想使用IP的话,可以访问https://ip.cn/

3.启动钉钉插件dingtalk

vim /etc/systemd/system/prometheus-webhook-dingtalk.service
#添加如下内容
[Unit]
Description=prometheus-webhook-dingtalk
After=network-online.target

[Service]
Restart=on-failure
ExecStart=/opt/prometheus-webhook-dingtalk/prometheus-webhook-dingtalk --ding.profile=ops_dingding=自己钉钉机器人的Webhook地址

[Install]
WantedBy=multi-user.target


#命令行启动
systemctl daemon-reload
systemctl start prometheus-webhook-dingtalk
ss -tnl | grep 8060

#测试
curl   -H "Content-Type: application/json"  -d '{ "version": "4", "status": "firing", "description":"description_content"}'  http://localhost:8060/dingtalk/ops_dingding/send

4.配置Alertmanager

cat /opt/alertmanager/alertmanager.yml
global:
  #每一分钟检查一次是否恢复
  resolve_timeout: 1m
route:
  #设置默认接收人
  receiver: 'webhook'
  #组告警等待时间。也就是告警产生后等待10s,如果有同组告警一起发出
  group_wait: 10s
  #两组告警的间隔时间
  group_interval: 10s
  #重复告警的间隔时间,减少相同微信告警的发送频率
  repeat_interval: 1h
  #采用哪个标签来作为分组依据
  group_by: [alertname]
  routes:
  - receiver: webhook
    group_wait: 10s
    match:
      team: node
receivers:
- name: 'webhook'
  webhook_configs:
  - url: http://localhost:8060/dingtalk/ops_dingding/send 
    #警报被解决之后是否通知
send_resolved: true

#命令行启动
cd /opt/alertmanager/
./alertmanager --config.file=alertmanager.yml &
netstat -anput | grep 9093

5.关联Prometheus并配置报警规则

cat /opt/prometheus/rules/node_down.yml 
groups:
- name: Node_Down
  rules:
  - alert: Node实例宕机
    expr: up == 0
    for: 10s
    labels:
      user: prometheus
      severity: Warning
    annotations:
      summary: "{{ $labels.instance }} 服务宕机"
      description: "{{ $labels.instance }} of job {{ $labels.job }} has been Down."
修改Prometheus配置文件
cat /opt/prometheus/prometheus.yml
# 修改以下内容
# Alertmanager configuration
alerting:
  alertmanagers:
  - static_configs:
- targets: ["localhost:9093"]
rule_files:
  - "/opt/prometheus/rules/node_down.yml"                 # 实例存活报警规则文件

#重启
systemctl restart prometheus

6.测试钉钉报警功能

#关闭node_exporter
systemctl stop node_exporter
  • 1.
  • 2.

告警通知

Kubernetes监控体系(12)-alertmanager配置钉钉和邮件告警_第2张图片

恢复通知:

你可能感兴趣的:(Prometheus,&,Grafana,alertmanager告警)