k8s集群集成kube-prometheus套件后,套件内提供了非常多的报警规则和alertmanager的pod,只需要修改配置文件填入信息就可以通过报警器发送邮件到指定的邮箱。

cd manifests
cat alertmanager-secret.yaml

这个secret的yaml文件就是alertmanager的配置文件,修改里面配置

apiVersion: v1
kind: Secret
metadata:
  labels:
    app.kubernetes.io/component: alert-router
    app.kubernetes.io/instance: main
    app.kubernetes.io/name: alertmanager
    app.kubernetes.io/part-of: kube-prometheus
    app.kubernetes.io/version: 0.25.0
  name: alertmanager-main
  namespace: monitoring
stringData:
  alertmanager.yaml: |-
    global:
      resolve_timeout: "5m"
    inhibit_rules:
    - equal:
      - "namespace"
      - "alertname"
      source_matchers:
      - "severity = critical"
      target_matchers:
      - "severity =~ warning|info"
    - equal:
      - "namespace"
      - "alertname"
      source_matchers:
      - "severity = warning"
      target_matchers:
      - "severity = info"
    - equal:
      - "namespace"
      source_matchers:
      - "alertname = InfoInhibitor"
      target_matchers:
      - "severity = info"
    receivers:
    - name: "Default"
    - name: "Watchdog"
    - name: "Critical"
    - name: "Email-Alert"  #设置邮件报警名字
      email_configs:
      - to: '123456789@qq.com'  #接受人的邮箱
      - to: '12345678@qq.com' #多个收件人用to添加
        from: '123456789@qq.com'  #发送人的邮箱    
        smarthost: 'smtp.qq.com:25'  #发送邮件使用的端口,25失败可以试试587
        auth_username: '123456789@qq.com'  #这是用于SMTP服务器认证的用户名,通常是发件人的邮箱地址。
        auth_password: 'abcdefg'  #smtp授权码
    - name: "null"
    route:
      group_by: #定义了将警报分组的标签,这里使用namespace。
      - "namespace"
      group_interval: "5m" #定义了同一组警报的通知间隔。
      group_wait: "30s" #定义了在发送初始通知之前等待的时间,以允许更多相关的警报加入组。
      receiver: "Default" #定义了默认接收器,这里是Default。
      repeat_interval: "12h" #定义了重复发送通知的间隔。
      routes:
      - matchers:
        - "alertname = Watchdog"
        receiver: "Watchdog"
      - matchers:
        - "alertname = InfoInhibitor"
        receiver: "null"
      - matchers: #匹配器,自己添加
        - "severity =~ ^(warning|critical)$" #匹配到严重,或者警告级别才会发送到下面指定的接收器名字
        receiver: "Email-Alert" #选择上面设置的邮箱报警名字
type: Opaque

修改好配置文件直接apply更新secret,删除pod重新加载配置文件,最好吧注释都删掉,有可能加载配置出错

kubectl apply -f alertmanager-secret.yaml
kubectl delete pod -n monitoring alertmanager-main-0 alertmanager-main-1 alertmanager-main-2
kubectl logs -f -n monitoring alertmanager-main-0

然后查看alertmanager的日志,是否有报错,也可以进入pod内部测试一下通过配置文件发送邮件

kubectl exec -it -n monitoring alertmanager-main-0 -- sh

输入

amtool --alertmanager.url=http://localhost:9093 alert add alertname=testalert severity=warning

这样会通过配置文件来发送一封测试邮件,如果收到邮件说明成功了

image.png

因为套件自带很多报警,没等1分钟就又收到了一个报警 image.png 这个是用的默认模板发送的邮件,也可以自己替换模板