Myluzh Blog

Alertmanager 企业微信告警配置 自定义告警模板

发布时间: 2024-11-19 文章作者: myluzh 分类名称: Kubernetes 朗读文章


0x01 alertmanager.yml配置
参数介绍:
wechat_api_url:api地址,默认就是https://qyapi.weixin.qq.com/cgi-bin/
wechat_api_secret:创建应用后,在应用管理里面,获取到的应用的Secret
wechat_api_corp_id:企业ID,在【我的企业】【企业信息】【企业ID】。
agent_id:创建应用后,在应用管理里面,获取到的应用的AgentId
to_party:用于定义要接收告警通知的部门 ID
global: 
  resolve_timeout: 5m
  # wechat
  wechat_api_url: 'https://qyapi.weixin.qq.com/cgi-bin/'
  wechat_api_secret: '3uxxxxxxxxxxxxxxxxxxxxxxxxWv4'
  wechat_api_corp_id: 'wwxxxxxxxxb1'

inhibit_rules: 
  - source_match:
      severity: critical
    target_match_re:
      severity: warning|info
    equal:
      - namespace
      - alertname
  - source_match:
      severity: warning
    target_match_re:
      severity: info
    equal:
      - namespace
      - alertname

receivers: 
  - name: wechat
    wechat_configs:
      - send_resolved: true
        agent_id: '1000002' 
        to_party: '1'
  - name: null_receiver

route:
  group_by: 
    - namespace
  receiver: null_receiver
  group_interval: 1m
  group_wait: 10s
  repeat_interval: 1m
  routes:
    - match:
        namespace: dev-test
      receiver: wechat

当满足条件时,告警按 namespace 分组,按照配置的时间间隔进行通知发送,所有告警默认不发送通知,除非 namespace 为 dev-test 的告警会被发送到 wechat 接收器。

如果觉得间隔时间太短可以调整:
group_wait:首次告警生成后等待时间,用于收集同组告警(例如 10 秒)。
group_interval:同组新告警发送的间隔时间(例如 1 分钟)。
repeat_interval:未恢复告警的重复通知间隔时间(例如 1 分钟)。

0x02 踩坑点
可信ip:配置完成后,曾遇到告警无法正常接收的问题。经与群友交流后得知,需在应用管理中添加可信 IP,并将所有 Alertmanager 节点的 IP 地址列入其中,以确保告警能够顺利发送。

0x03 验证
点击查看原图

0x04 自定义微信告警模板
1、在alertmanager.yaml里面定义告警模板的路径
配置文件中定义templates:   - '/etc/alertmanager/config/*.tmpl',这样可以让alertmanager可以去找到/etc/alertmanager/config/下面的模板文件。
global: 
  resolve_timeout: 5m
  ....

templates:
  - '/etc/alertmanager/config/*.tmpl'

....
2、导入tmpl模板文件
查看alertmanager的yaml文件,可以看到,是通过secretName: alertmanager-main-generated挂载到alertmanager里面/etc/alertmanager/config的目录,所以我们tmpl模板,只需要在alertmanager-main-generated的secret里面,添加一条即可。
名称:
wechat.tmpl
内容:
{{ define "wechat.default.message" }}
{{ if gt (len .Alerts.Firing) 0 -}}
Alerts Firing:
{{ range .Alerts }}
告警级别:{{ .Labels.severity }}
告警类型:{{ .Labels.alertname }}
故障主机: {{ .Labels.instance }}
告警主题: {{ .Annotations.summary }}
告警详情: {{ .Annotations.description }}
触发时间: {{ .StartsAt.Format "2006-01-02 15:04:05" }}
{{- end }}
{{- end }}
{{ if gt (len .Alerts.Resolved) 0 -}}
Alerts Resolved:
{{ range .Alerts }}
告警级别:{{ .Labels.severity }}
告警类型:{{ .Labels.alertname }}
故障主机: {{ .Labels.instance }}
告警主题: {{ .Annotations.summary }}
触发时间: {{ .StartsAt.Format "2006-01-02 15:04:05" }}
恢复时间: {{ .EndsAt.Format "2006-01-02 15:04:05" }}
{{- end }}
{{- end }}
告警链接:
{{ template "__alertmanagerURL" . }}
{{- end }}
3、验证模板是否导入
配置后重建下alertmanager,进入容器,查看是否已经把tmpl挂载过去
/alertmanager $ ls /etc/alertmanager/config/
alertmanager.yaml  wechat.tmpl
4、收件人配置中,修改微信告警的时候使用自定义模板
定义message: '{{ template "wechat.default.message" . }}'
# 收件人配置
....
receivers:
- name: 'wechat'
  wechat_configs:
    ....
    message: '{{ template "wechat.default.message" . }}'
....



参考连接:
https://prometheus.io/docs/alerting/0.21/configuration/#wechat_config

标签: Prometheus Alertmanager 企业微信 告警 wechat wechatapi

发表评论