Kubernetes / Prometheus / 云原生 / 监控平台

Kubernetes中配置Prometheus监控告警

浅时光博客 · 1月3日 · 2021年 · 12.7w 次已读

一、前提说明

我们在前面二进制部署多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/
模板1:
[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 }}
模板2:
[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、查看告警消息

注:下图的样式是我根据公司实际业务情况,调整优化后的最终告警效果!与上面模板展示的效果有差距。


本文作者:浅时光博客
原文链接:https://www.dqzboy.com/5266.html
版权声明:知识共享署名-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)协议进行许可,转载时请以>超链接形式标明文章原始出处和作者信息
免责声明:本站内容仅供个人学习与研究,严禁用于商业或非法目的。请在下载后24小时内删除相应内容。继续浏览或下载即表明您接受上述条件,任何后果由用户自行承担。