Alertmanager 配置企业微信告警
alertmanager支持直接对接webhook,所以只要将alertmanager的告警消息解析成企业微信、飞书、钉钉能够识别的消息,那么再通过官方的api接口就可以发送告警消息了。
查看 alertmanger 消息
首先我们需要了解 alertmanager 发送的消息格式,可以通过执行一个命令来查看 alertmanager 发送的消息内容。
# 端口转发,访问alertmanager
kubectl port-forward -n monitoring svc/alertmanager-operated 9093:9093
# 查看 alertmanager 发送的消息,并解析成 json 格式
curl -s 'http://localhost:9093/api/v2/alerts' | jq .
# 示例如下:
curl -s http://127.0.0.1:9093/api/v2/alerts -q| jq .
[
{
"annotations": {
"description": "KubeControllerManager has disappeared from Prometheus target discovery.",
"runbook_url": "https://runbooks.prometheus-operator.dev/runbooks/kubernetes/kubecontrollermanagerdown",
"summary": "Target disappeared from Prometheus target discovery."
},
"endsAt": "2026-01-14T06:16:31.435Z",
"fingerprint": "2a2c5d2e339cb632",
"receivers": [
{
"name": "Critical"
}
],
"startsAt": "2026-01-13T01:27:01.435Z",
"status": {
"inhibitedBy": [],
"mutedBy": [],
"silencedBy": [],
"state": "active"
},
"updatedAt": "2026-01-14T06:12:39.762Z",
"generatorURL": "http://prometheus-k8s-0:9090/graph?g0.expr=absent%28up%7Bjob%3D%22kube-controller-manager%22%7D+%3D%3D+1%29&g0.tab=1",
"labels": {
"alertname": "KubeControllerManagerDown",
"cluster": "loacl",
"prometheus": "monitoring/k8s",
"severity": "critical"
}
},
...
]
可以登录 pod 中查看该告警对应的 prometheus 规则。
# 进入 prometheus pod
kubectl -n monitoring exec prometheus-k8s-0 -i -t -- sh
# 查看 prometheus 规则文件
cd /etc/prometheus/rules/prometheus-k8s-rulefiles-0
# 配置如下
- name: kubernetes-system-controller-manager
rules:
- alert: KubeControllerManagerDown
annotations:
description: KubeControllerManager has disappeared from Prometheus target discovery.
runbook_url: https://runbooks.prometheus-operator.dev/runbooks/kubernetes/kubecontrollermanagerdown
summary: Target disappeared from Prometheus target discovery.
expr: |
absent(up{job="kube-controller-manager"} == 1)
for: 15m
labels:
severity: critical
这是一个常见alertmanager告警消息,可以看到是一个json的格式,其中labels和annotations里面的字段都是我们配置prometheus时设置的,其他字段是prometheus触发告警时自动生成的,那么我们只需要将这个json字符串解析为各个通讯软件能够识别的格式,就OK了。目前对接企业微信是使用的企业微信所支持的markdown格式,对接飞书是使用的飞书所支持的card格式,对接钉钉是使用的钉钉所支持的markdown格式。具体格式要求,可以到各平台的官网进行查看。
配置企业微信告警
先获取企业微信的一些基础信息。
配置如下:
vim altermanager.yaml
global:
resolve_timeout: 5m
receivers:
- name: wechat
wechat_configs:
- agent_id: "应用的AgentId,在应用的配置页面可以看到"
api_secret: "应用的secret,在应用的配置页面可以看到"
corp_id: '企业id,在企业的配置页面可以看到
to_party: ' PartyID1 | PartyID2 '
send_resolved: true
to_user: '@all'
route:
group_by:
- namespace
group_interval: 5m
group_wait: 30s
receiver: wechat
repeat_interval: 7m
routes:
- match:
severity: critical
receiver: wechat
group_by:
- alertname
- namespace
templates:
- /etc/alertmanager/config/*.tmp1 //使用报警信息的模板
模板文件 template.tmp1
{{ define "wechat.default.message" }}
{{- if gt (len .Alerts.Firing) 0 -}}
{{- range $index, $alert := .Alerts -}}
{{- if eq $index 0 }}
====异常告警====
告警类型: {{ $alert.Labels.alertname }}
告警级别: {{ $alert.Labels.severity }}
告警详情: {{ $alert.Annotations.message }}{{ $alert.Annotations.description}};{{$alert.Annotations.summary}}
故障时间: {{ ($alert.StartsAt.Add 28800e9).Format "2006-01-02 15:04:05" }}
{{- if gt (len $alert.Labels.instance) 0 }}
实例信息: {{ $alert.Labels.instance }}
{{- end }}
{{- if gt (len $alert.Labels.namespace) 0 }}
命名空间: {{ $alert.Labels.namespace }}
{{- end }}
{{- if gt (len $alert.Labels.node) 0 }}
节点信息: {{ $alert.Labels.node }}
{{- end }}
{{- if gt (len $alert.Labels.pod) 0 }}
实例名称: {{ $alert.Labels.pod }}
{{- end }}
====END====
{{- end }}
{{- end }}
{{- end }}
{{- if gt (len .Alerts.Resolved) 0 -}}
{{- range $index, $alert := .Alerts -}}
{{- if eq $index 0 }}
====异常恢复====
告警类型: {{ $alert.Labels.alertname }}
告警级别: {{ $alert.Labels.severity }}
告警详情: {{ $alert.Annotations.message }}{{ $alert.Annotations.description}};{{$alert.Annotations.summary}}
故障时间: {{ ($alert.StartsAt.Add 28800e9).Format "2006-01-02 15:04:05" }}
恢复时间: {{ ($alert.EndsAt.Add 28800e9).Format "2006-01-02 15:04:05" }}
{{- if gt (len $alert.Labels.instance) 0 }}
实例信息: {{ $alert.Labels.instance }}
{{- end }}
{{- if gt (len $alert.Labels.namespace) 0 }}
命名空间: {{ $alert.Labels.namespace }}
{{- end }}
{{- if gt (len $alert.Labels.node) 0 }}
节点信息: {{ $alert.Labels.node }}
{{- end }}
{{- if gt (len $alert.Labels.pod) 0 }}
实例名称: {{ $alert.Labels.pod }}
{{- end }}
====END====
{{- end }}
{{- end }}
{{- end }}
{{- end }}
更新配置
# 备份原有的alertmanager配置
kubectl get secret alertmanager-main -n monitoring -o jsonpath="{.data.alertmanager\.yaml}" | base64 --decode > alertmanager-backup.yaml
# 删除原有的alertmanager配置
kubectl delete secret alertmanager-main -n monitoring
# 创建新的alertmanager配置
kubectl create secret generic alertmanager-main --from-file=alertmanager.yaml --from-file=template.tmp1 -n monitoring
# 端口转发,访问alertmanager
kubectl port-forward -n monitoring svc/alertmanager-operated 9093:9093
# 重新加载 alertmanager 配置
curl -X POST http://localhost:9093/-/reload
# 就可以收到企业微信告警消息了