一、前言
alertmanage调用企业微信应用告警会比直接使用钉钉告警更麻烦一点,调用企业微信应用告警需要在应用内配置企业可信ip,不然调用企业微信接口就会报错,提示ip地址有风险
二、部署
先自行创建企业微信,再使用管理后台创建应用
记录下agentid和secret值,后面配置调用企业微信告警会用到
往下找到企业可信ip,先按时提示验证企业
会提示让你输入域名,然后给出一个txt文件,需要使用nginx挂载这个txt文件到域名上,要使用该域名访问到该路径,就可以通过验证
只需在该域名的nginx代理中加入一下该配置项,匹配txt结尾的请求,到该root路径下,将txt文件放到该root路径下即可,重新加载nginx配置,就可以去验证企业可信ip了
查看企业微信的企业id
部署alertmanage
创建存放yaml配置的目录
mkdir /opt/alertmanage && cd /opt/alertmanage
编辑alertmanage配置文件,使用configmap服务挂载
vi configmap.yaml
kind: ConfigMap
apiVersion: v1
metadata:name: alertmanagernamespace: prometheus
data:alertmanager.yml: |-global:resolve_timeout: 1msmtp_smarthost: 'smtp.qq.com:25' #配置告警邮箱服务器smtp_from: '123456@qq.com' #告警发送到的邮箱smtp_auth_username: '123456@qq.com' smtp_auth_password: 'ioasdgxvovclbsfb' #授权码,在邮箱里面获取smtp_require_tls: false wechat_api_url: "https://qyapi.weixin.qq.com/cgi-bin/" #企业微信的api接口,统一固定的wechat_api_corp_id: "ww7490f1231244252" #上面获取的企业微信中的企业idtemplates:- '/etc/alertmanager/template/*.tmpl' #使用告警模板route:group_by: ['alertname_wechat']group_wait: 30s #告警等待发送时间group_interval: 5mrepeat_interval: 15m #重复告警的再次发送时间receiver: wechat #调用的告警组件,下面配置的组件名称receivers:- name: 'wechat'wechat_configs:- send_resolved: truecorp_id: ww7490f1231244252 #上面获取的企业微信中的企业idto_user: '@all' #发送给所有人agent_id: 1000002 #上面获取的企业微信应用中的agentidapi_secret: J6WJQ7QXEY5zodi12342352342 #上面获取的企业微信应用中的secret
编辑alertmanage使用的告警模板,使用configmap服务挂载
vi configmap-wechat.yaml
apiVersion: v1
data:WeChat.tmpl: |- #配置告警消息模板文件{{ define "wechat.default.message" }}{{- if gt (len .Alerts.Firing) 0 -}} #判断是告警信息还是异常恢复信息,是告警则继续往下执行,不是则不往下执行{{- range $index, $alert := .Alerts -}} #循环输出多个告警信息{{- if eq $index 0 -}} #判断是否输出完毕{{- end }} #对应第一个判断=========莓族环境监控报警 =========告警类型: {{ $alert.Labels.alertname }}告警级别: {{ $alert.Labels.severity }}故障主机: {{ $alert.Labels.instance }}告警主题: {{ $alert.Annotations.summary }}告警详情: {{ $alert.Annotations.description }}触发阀值:{{ $alert.Annotations.value }}故障时间: {{ ($alert.StartsAt.Add 28800e9).Format "2006-01-02 15:04:05" }}{{ if gt (len $alert.Labels.instance) 0 -}}故障实例: {{ $alert.Labels.instance }}{{- end -}}{{- end }} #对应循环输出告警信息{{- end }} #对应最后一个判断========= = end = ========={{- if gt (len .Alerts.Resolved) 0 -}} #判断是告警信息还是异常恢复信息{{- range $index, $alert := .Alerts.Resolved -}} #循环输出多个异常恢复信息{{- if eq $index 0 -}} #判断是否输出完毕{{- end }} #对应第一个判断=========莓族环境异常恢复 =========恢复类型: {{ $alert.Labels.alertname }}恢复级别: {{ $alert.Labels.severity }}系统环境: {{ $alert.Labels.environment }}恢复主题: {{ $alert.Annotations.summary }}告警详情: {{ $alert.Annotations.description }}故障时间: {{ ($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 -}}{{- end }} #对应循环输出多个异常恢复信息{{- end }} #对应最后一个判断{{- end }} #整个流程结束
kind: ConfigMap
metadata:name: wechatnamespace: prometheus
以上的变量取值都来自于配置的prometheus告警配置和alertmanage的值
编辑部署alertmanage服务的deployment的yaml
apiVersion: apps/v1
kind: Deployment
metadata:name: alertmanagernamespace: prometheuslabels:app: alertmanager
spec:replicas: 1selector:matchLabels:app: alertmanagertemplate:metadata:labels:app: alertmanagerspec:containers:- name: alertmanagerimage: "prom/alertmanager"imagePullPolicy: "IfNotPresent"args:- "--config.file=/etc/alertmanager/alertmanager.yml"ports:- containerPort: 9093readinessProbe:httpGet:path: /#/statusport: 9093initialDelaySeconds: 30timeoutSeconds: 30volumeMounts:- name: config-volume #挂载配置文件mountPath: /etc/alertmanager- name: wechat-tmpl #挂载告警规则模板mountPath: /etc/alertmanager/template- name: tz-configmountPath: /etc/localtimeresources:limits:cpu: 10mmemory: 50Mirequests:cpu: 10mmemory: 50Mivolumes:- name: config-volume #使用配置文件的configmapconfigMap:name: alertmanager- name: wechat-tmpl #使用规则模板的configmapconfigMap:name: wechat- name: tz-confighostPath:path: /usr/share/zoneinfo/Asia/Shanghai
编辑alertmanage服务对外访问的service的yaml
vi service.yaml
apiVersion: v1
kind: Service
metadata:name: svc-alertmanagernamespace: prometheus
spec:type: NodePortports:- port: 9093protocol: TCPtargetPort: 9093nodePort: 30011selector:app: alertmanager
创建命名空间
kubectl create namespace prometheus
创建所有yaml服务
kubectl apply -f configmap-wechat.yaml
kubectl apply -f configmap.yaml
kubectl apply -f deployment.yaml
kubectl apply -f service.yaml
查看服务是否正常
kubectl get pod -n prometheus
可以看到alertmanage服务正常运行,但是查看日志就会发现调用企业微信的应用接口报错,这是因为还没有在企业微信应用里配置企业可信ip
kubectl logs -f --tail=10 alertmanager-6b89d8cd4-mnx5m -n prometheus
上面给出的报错ip地址就是你现在所用的公网地址,将这个地址复制下来,配置到企业微信应用的企业可信ip中
配置完成后,测试告警,企业微信就会收到应用发送的告警信息了
以上的企业微信白名单,可以使用自己企业中的固定公网地址,配置策略路由,将走向 qyapi.weixin.qq.com该域名的所有流量都走固定公网地址,注意是调用企业微信api接口的域名,而不是报错给出的那个域名
至此alertmanage服务使用企业微信告警配置完成