一、前提说明
我们在前面二进制部署多Master高可用K8S集群系列文章中,已经部署好了Prometheus
监控体系,但是没有配置Alertmanager
;接下来我们就继续完善整个K8S集群的监控,包括告警配置,这里我将通过邮件和企业微信的形式进行演示。如果你还没有在K8S集群中部署Prometheus,那可以点击下方的文章链接,参考这篇文章进行部署。
二、邮件告警配置
- 进入到kube-prometheus目录下的manifests目录里,备份源文件
alertmanager-secret.yaml
,然后将以下配置信息全部黏贴进去即可; - 注意:修改成自己的邮箱地址
1、修改配置
[root@k8s-master1 ~]# cd /opt/k8s/work/kube-prometheus/manifests/
[root@k8s-master1 manifests]# vim alertmanager-secret.yaml
apiVersion: v1
data: {}
kind: Secret
metadata:
name: alertmanager-main
namespace: monitoring
stringData:
alertmanager.yaml: |-
global:
resolve_timeout: 1m # 处理超时时间
smtp_smarthost: 'smtp.qq.com:465' # 邮箱smtp服务器代理
smtp_from: 'xx@qq.com' # 发送邮箱名称
smtp_auth_username: 'xxxx@qq.com' # 邮箱名称
smtp_auth_password: 'xxx' # 授权密码
smtp_require_tls: false # 不开启tls 默认开启
receivers:
- name: Default
email_configs: # 邮箱配置
- to: "xxx@qq.com" # 接收警报的email配置,# 如果想发送多个人就以 ','做分割,写多个邮件人即可。
route:
group_interval: 1m # 在发送新警报前的等待时间
group_wait: 10s # 最初即第一次等待多久时间发送一组警报的通知
receiver: Default
repeat_interval: 10m # 发送重复警报的周期
2、重载配置
[root@k8s-master1 manifests]# kubectl apply -f alertmanager-secret.yaml
[root@k8s-master1 manifests]# kubectl get po -n monitoring
3、查看邮件
- 因为Alertmanager默认有一个
Watchdog
是报警状态的,所以10m后即可收到告警邮件

- 邮件内容信息如下:

三、企业微信告警
首先你需要通过企业微信后台(管理员身份登入),创建应用程序,获取Appid、企业ID等关键信息;
corp_id
企业微信账号唯一 ID, 可以在”我的企业”中查看。to_party
需要发送的组(部门ID)agent_id
第三方企业应用的 ID,可以在自己创建的第三方企业应用详情页面查看。api_secret
第三方企业应用的密钥,可以在自己创建的第三方企业应用详情页面查看。
1、创建模板
[root@k8s-master1 ~]# cd /opt/k8s/work/kube-prometheus/manifests/
[root@k8s-master1 manifests]# vim alertmanager-templates.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: alertmanager-temp
namespace: monitoring
data:
temp.tmpl: |
{{ define "wechat.default.message" }}
{{ if gt (len .Alerts.Firing) 0 -}}
Alerts Firing:
{{ range .Alerts }}
警报级别:{{ .Labels.status }}
警报类型:{{ .Labels.alertname }}
故障主机: {{ .Labels.instance }}
警报主题: {{ .Annotations.summary }}
警报详情: {{ .Annotations.description }}
触发时间: {{ (.StartsAt.Add 28800e9).Format "2006-01-02 15:04:05" }}
{{- end }}
{{- end }}
{{ if gt (len .Alerts.Resolved) 0 -}}
Alerts Resolved:
{{ range .Alerts }}
警报级别:{{ .Labels.status }}
警报类型:{{ .Labels.alertname }}
故障主机: {{ .Labels.instance }}
警报主题: {{ .Annotations.summary }}
警报详情: {{ .Annotations.description }}
触发时间: {{ (.StartsAt.Add 28800e9).Format "2006-01-02 15:04:05" }}
恢复时间: {{ (.EndsAt.Add 28800e9).Format "2006-01-02 15:04:05" }}
{{- end }}
{{- end }}
{{- end }}
[root@k8s-master1 manifests]# vim alertmanager-templates.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: alertmanager-temp
namespace: monitoring
data:
temp.tmpl: |
Alerts Firing:
{{ range .Alerts }}
告警级别:{{ .Labels.severity }}
告警类型:{{ .Labels.alertname }}
故障主机: {{ .Labels.instance }}
告警主题: {{ .Annotations.summary }}
告警详情: {{ .Annotations.description }}
触发时间: {{ (.StartsAt.Add 28800e9).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.Add 28800e9).Format "2006-01-02 15:04:05" }}
恢复时间: {{ (.EndsAt.Add 28800e9).Format "2006-01-02 15:04:05" }}
{{- end }}
{{- end }}
告警链接:
{{ template "__alertmanagerURL" . }}
{{- end }}
[root@k8s-master1 manifests]# kubectl apply -f alertmanager-templates.yaml
2、挂载模板
[root@k8s-master1 manifests]# vim alertmanager-alertmanager.yaml
apiVersion: monitoring.coreos.com/v1
kind: Alertmanager
metadata:
labels:
alertmanager: main
name: main
namespace: monitoring
spec:
image: quay.mirrors.ustc.edu.cn/prometheus/alertmanager:v0.21.0
nodeSelector:
kubernetes.io/os: linux
replicas: 3
securityContext:
fsGroup: 2000
runAsNonRoot: true
runAsUser: 1000
serviceAccountName: alertmanager-main
version: v0.21.0
configMaps:
- "alertmanager-temp" #模板配置文件,上面创建的cm资源的name对应的值
[root@k8s-master1 manifests]# kubectl apply -f alertmanager-alertmanager.yaml
3、修改消息源
- 把默认的内容删除,复制下面的信息进去
[root@k8s-master1 manifests]# vim alertmanager-secret.yaml
apiVersion: v1
data: {}
kind: Secret
metadata:
name: alertmanager-main
namespace: monitoring
stringData:
alertmanager.yaml: |-
global:
resolve_timeout: 1m # 处理超时时间
wechat_api_corp_id: '企业微信账号唯一 ID'
wechat_api_url: 'https://qyapi.weixin.qq.com/cgi-bin/'
wechat_api_secret: '第三方企业应用的密钥'
#指定wechar告警模板
templates:
- '/etc/alertmanager/configmaps/alertmanager-temp/*.tmpl'
receivers:
- name: 'wechat' #企业微信配置路由
wechat_configs:
#是否发送恢复信息
- send_resolved: true
corp_id: '企业ID'
to_user: '@all' #表示在当前此app应用可见的人都会收到消息
agent_id: '应用ID'
api_secret: '应用密钥'
route:
group_interval: 1m # 在发送新警报前的等待时间
group_wait: 10s # 最初即第一次等待多久时间发送一组警报的通知
receiver: wechat #选择推送消息的路由,这里我选择企业微信
repeat_interval: 10m # 发送重复警报的周期
#创建资源
[root@k8s-master1 manifests]# kubectl apply -f alertmanager-secret.yaml
#查看资源
[root@k8s-master1 manifests]# kubectl get secret -n monitoring
4、查看告警消息
注:下图的样式是我根据公司实际业务情况,调整优化后的最终告警效果!与上面模板展示的效果有差距。