alertmanager 配置钉钉告警以及模板(prometheus-webhook-dingtalk)基于 k ...

打印 上一主题 下一主题

主题 529|帖子 529|积分 1587

alertmanager 的 receive 并不直接支持钉钉的 url,要部署插件容器 prometheus-webhook-dingtalk
并且有个需要注意的地方是,当 receives 为钉钉时 (webhook_configs),它的告警模板不是在 alertmanager 的配置文件中指定的,而是在钉钉插件 prometheus-webhook-dingtalk 中指定的。
编写 prometheus-webhook-dingtalk 配置文件和模板

vim dingtalk-configmap.yaml,这里记的替换你的钉钉 url token。
  1. apiVersion: v1
  2. kind: ConfigMap
  3. metadata:
  4.   name: prometheus-webhook-dingtalk-config
  5.   namespace: monitoring
  6. data:
  7.   config.yml: |-
  8.     templates:
  9.       - /etc/prometheus-webhook-dingtalk/default.tmpl
  10.     targets:
  11.       webhook1:
  12.         url: https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxxxxxx             #修改为钉钉机器人的webhook
  13.         message:
  14.           text: '{{ template "default.tmpl" . }}'
  15.   default.tmpl: |
  16.     {{ define "default.tmpl" }}
  17.     {{- if gt (len .Alerts.Firing) 0 -}}
  18.     {{- range $index, $alert := .Alerts -}}
  19.     ============ = **<font color='#FF0000'>告警</font>** = =============  #红色字体
  20.   
  21.     **告警名称:**    {{ $alert.Labels.alertname }}   
  22.     **告警级别:**    {{ $alert.Labels.severity }} 级   
  23.     **告警状态:**    {{ .Status }}   
  24.     **告警实例:**    {{ $alert.Labels.instance }} {{ $alert.Labels.device }}   
  25.     **告警概要:**    {{ .Annotations.summary }}   
  26.     **告警详情:**    {{ $alert.Annotations.message }}{{ $alert.Annotations.description}}   
  27.     **故障时间:**    {{ ($alert.StartsAt.Add 28800e9).Format "2006-01-02 15:04:05" }}  
  28.     ============ = end = =============  
  29.     {{- end }}
  30.     {{- end }}
  31.     {{- if gt (len .Alerts.Resolved) 0 -}}
  32.     {{- range $index, $alert := .Alerts -}}
  33.     ============ = <font color='#00FF00'>恢复</font> = =============   #绿色字体
  34.     **告警实例:**    {{ .Labels.instance }}   
  35.     **告警名称:**    {{ .Labels.alertname }}  
  36.     **告警级别:**    {{ $alert.Labels.severity }} 级   
  37.     **告警状态:**    {{   .Status }}
  38.     **告警概要:**    {{ $alert.Annotations.summary }}  
  39.     **告警详情:**    {{ $alert.Annotations.message }}{{ $alert.Annotations.description}}  
  40.     **故障时间:**    {{ ($alert.StartsAt.Add 28800e9).Format "2006-01-02 15:04:05" }}  
  41.     **恢复时间:**    {{ ($alert.EndsAt.Add 28800e9).Format "2006-01-02 15:04:05" }}  
  42.     ============ = **end** = =============
  43.     {{- end }}
  44.     {{- end }}
  45.     {{- end }}
复制代码
然后创建 configmap,kubectl apply -f dingtalk-configmap.yaml
部署钉钉插件

差别版本的插件指定配置文件的参数也不一样,这里部署的是 v2.1.0
vim dingtalk-webhook-deploy.yaml,这个文件不需要修改
  1. apiVersion: v1
  2. kind: Service
  3. metadata:
  4.   name: dingtalk
  5.   namespace: monitoring
  6.   labels:
  7.     app: dingtalk
  8. spec:
  9.   selector:
  10.     app: dingtalk
  11.   ports:
  12.   - name: dingtalk
  13.     port: 8060
  14.     protocol: TCP
  15.     targetPort: 8060
  16.   
  17. ---
  18. apiVersion: apps/v1
  19. kind: Deployment
  20. metadata:
  21.   name: dingtalk
  22.   namespace: monitoring
  23. spec:
  24.   replicas: 2
  25.   selector:
  26.     matchLabels:
  27.       app: dingtalk
  28.   template:
  29.     metadata:
  30.       name: dingtalk
  31.       labels:
  32.         app: dingtalk
  33.     spec:
  34.       containers:
  35.       - name: dingtalk
  36.         image: timonwong/prometheus-webhook-dingtalk:v2.1.0
  37.         imagePullPolicy: IfNotPresent
  38.         args:
  39.         - --web.listen-address=:8060
  40.         - --config.file=/etc/prometheus-webhook-dingtalk/config.yml
  41.         ports:
  42.         - containerPort: 8060
  43.         volumeMounts:
  44.         - name: config
  45.           mountPath: /etc/prometheus-webhook-dingtalk
  46.       volumes:
  47.       - name: config
  48.         configMap:
  49.           name: prometheus-webhook-dingtalk-config
复制代码
kubectl apply -f dingtalk-webhook-deploy.yaml
编写 alertmanager 的主配置文件

vim alertmanager.yaml,此文件需要自己添加一条路由或用默认路由,和相应的吸取者。
这里的吸取者 webhook,其实是上面部署的钉钉插件 service 的地址
  1. global:
  2.   resolve_timeout: 5m
  3.   wechat_api_url: 'https://qyapi.weixin.qq.com/cgi-bin/'
  4.   wechat_api_secret: '*****'
  5.   wechat_api_corp_id: '*******'
  6.   smtp_smarthost: 'smtp.163.com:25'
  7.   smtp_from: '你的邮箱'
  8.   smtp_auth_username: '邮箱用户名'
  9.   smtp_auth_password: '密码或授权码'
  10.   smtp_require_tls: false
  11. route:
  12.   group_by: ['alertname','job']
  13.   group_wait: 30s
  14.   group_interval: 1m
  15.   repeat_interval: 30m
  16.   receiver: 'wechat'
  17.   routes:
  18.   - match:
  19.       job: 'prometheus'
  20.     receiver: 'webhook'
  21. receivers:
  22. - name: 'email'
  23.   email_configs:
  24.   - to: '邮件接收人'
  25. - name: 'wechat'
  26.   wechat_configs:
  27.   - send_resolved: true
  28.     to_party: '2'
  29.     agent_id: '1'
  30. - name: 'webhook'
  31.   webhook_configs:
  32.   # 和插件不同 namespace 请填写 http://webhook-dingtalk.monitoring.svc.cluster.local:8060/dingtalk/webhook1/send
  33.   - url: 'http://webhook-dingtalk:8060/dingtalk/webhook1/send'
复制代码
先将之前的 secret 对象删除
   kubectl delete secret alertmanager-main -n monitoring
  secret "alertmanager-main" deleted
  创建新的secret对象
   kubectl create secret generic alertmanager-main --from-file=alertmanager.yaml -n monitoring
  secret "alertmanager-main" created
  配置钉钉告警和模板已完成,需要注意的是更新完 configmap,pod 中的配置是挂载的以是会更新,但是一样平常服务是不支持热加载配置的,以是需要重新创建pod。有标题可以在评论区留言

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

耶耶耶耶耶

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表