• kubeprometheus自定义监控及分组报警


    一、自定义监控

    1.新增PrometheusRule资源,定义自己的监控项目

    apiVersion: monitoring.coreos.com/v1
    kind: PrometheusRule
    metadata:
      labels: #安装kube-prometheus对应的标签
        app.kubernetes.io/component: prometheus
        app.kubernetes.io/instance: k8s
        app.kubernetes.io/name: prometheus
        app.kubernetes.io/part-of: kube-prometheus
        app.kubernetes.io/version: 2.34.0
        prometheus: k8s
        role: alert-rules
      name: prometheus-k8s-test-rules
      namespace: monitoring
    spec:
      groups: #普罗米修斯规则文件的内容
      - name: test-load #组的名称,必须唯一
        rules: #报警规则
        - alert: test-load-1 #报警名称
          expr: node_load1 > 1  #报警规则
          for: 2m #时间
          labels: #添加的标签
           team: node
          annotations: #报警输出内容
           summary: "{{$labels.instance}}: load 1 >1"  
           description: "{{$labels.instance}}: job {{$labels.job}} 测试测试 负载大于1" 

    2.导入查看规则

    #导入
    [root@master ~]# kubectl apply -f  test-prometheus-rule.yaml
    prometheusrule.monitoring.coreos.com/prometheus-k8s-test-rules created
    #查看
    [root@master manifests]# kubectl get PrometheusRule -n monitoring |grep test
    prometheus-k8s-test-rules         2m36s

    3.浏览器查看prometheus上新增规则是否存在

    二、alertmanger报警配置

    1、创建一个alertmanger的配置文件并配置上报警配置(这里以邮箱测试)

    global: 
      resolve_timeout: 5m #处理超时时间,默认为5min
      smtp_smarthost: 'smtp.163.com:465' # 邮箱smtp服务器代理
      smtp_from: 'xxxx@163.com' # 发送邮箱名称
      smtp_auth_username: 'xxxx@163.com' # 邮箱名称
      smtp_auth_password: 'xxxxxxxxx' #邮箱密码
      smtp_require_tls: false 
    route:
      group_by: ['alertname'] # 报警分组名称
      group_wait: 10s # 最初即第一次等待多久时间发送一组警报的通知
      group_interval: 10s # 在发送新警报前的等待时间
      repeat_interval: 1m # 发送重复警报的周期
      receiver: 'email' # 发送警报的接收者的名称,以下receivers name的名称
    
    receivers:
      - name: 'email' # 警报
        email_configs: # 邮箱配置
        - to: 'xxxxxx@163.com'  # 接收警报的email配置
    
    inhibit_rules:
      - source_match:
          severity: 'critical'
        target_match:
          severity: 'warning'
        equal: ['alertname', 'dev', 'instance']

    3.查看默认的alertmanager的secret资源(后面要将alertmanager-main资源替换掉,或者手动改secret)

    [root@master ~]# kubectl get secret -n monitoring |grep alertmanager-main
    alertmanager-main                 Opaque                                1      5h25m

    4.创建alertmanger-email对应的secret资源文件

    kubectl  create secret  generic -n monitoring   alertmanager-main --from-file=./alertmanager.yaml   --dry-run -o yaml >alertmanager-main-secret.yaml #文件名称必须是alertmanager.yaml,因为是将系统默认的配置覆盖掉

    5.导入secret资源(替换默认的alertmanager-main)

    [root@master ~]# kubectl apply -f  alertmanager-main-secret.yaml
    secret/alertmanager-main configured

    6.删除旧的alertmanager的pod

    kubectl delete pod  -n monitoring  alertmanager-main-0 alertmanager-main-1 alertmanager-main-2

    7.查看重启的alertmanager的pod

    [root@master ~]# kubectl get pod -n monitoring
    NAME                                   READY   STATUS    RESTARTS   AGE
    alertmanager-main-0                    2/2     Running   0          5s
    alertmanager-main-1                    2/2     Running   0          5s
    alertmanager-main-2                    2/2     Running   0          6s

    8.先删除自定义测试的规则,过一会后重新导入规则(方便触发规则测试)

    [root@master ~]# kubectl  delete  -f  test-prometheus-rule.yaml
    prometheusrule.monitoring.coreos.com "prometheus-k8s-test-rules" deleted
    
    [root@master ~]# kubectl  apply  -f  test-prometheus-rule.yaml
    prometheusrule.monitoring.coreos.com/prometheus-k8s-test-rules created

    9.查看邮箱,发现规则触发并发送了邮件

    三、alertmanger分组报警

     

    1.修改alertmanger配置文件,让不同组的报警发送到不同的地方

    global: 
      resolve_timeout: 5m #处理超时时间,默认为5min
      smtp_smarthost: 'smtp.163.com:465' # 邮箱smtp服务器代理
      smtp_from: 'xxxxxx@163.com' # 发送邮箱名称
      smtp_auth_username: 'xxxxxx@163.com' # 邮箱名称
      smtp_auth_password: 'xxxxxxx' #邮箱密码
      smtp_require_tls: false 
    route:
      group_by: ['alertname'] # 报警分组名称
      group_wait: 10s # 最初即第一次等待多久时间发送一组警报的通知
      group_interval: 10s # 在发送新警报前的等待时间
      repeat_interval: 1m # 发送重复警报的周期
      receiver: 'test_163email' #默认路由,必须要有
      routes: #子路由
      - receiver: 'test_qqemail' #下面配置的receivers
        match_re:
          team: node #报警规则拥有的标签(这里只把自定义的发送到qq邮箱)
    
    receivers:
      - name: 'test_163email' # 测试163警报(其它报警发送到163)
        email_configs: # 邮箱配置
        - to: 'xxxxxx@163.com'  # 接收警报的email配置
      - name: 'test_qqemail' #测试qq邮箱(自定义规则发qq邮箱)
        email_configs:
        - to: 'xxxxxxx@qq.com'
          send_resolved: true  #是否接收恢复信息,false|true
    inhibit_rules:
      - source_match:
          severity: 'critical'
        target_match:
          severity: 'warning'
        equal: ['alertname', 'dev', 'instance']

    2.重新导入修改的alertmanger配置并重启alertmanger

     

    3.查看其它报警规则是否会通知到163邮箱

     

    4.重新导入自定义规则,查看是否会将自定义规则报警到qq邮箱

     
     
    
    
    
    
    
    
  • 相关阅读:
    Shell与if相关参数
    Linux盘符漂移问题
    shell脚本,每5个字符之间插入"|",行末不插入“|”
    paste:linux合并两个文件中的列(左右合并)
    关于bc 的scale .
    RxJS与观察者模式
    什么是虚拟DOM
    JS设计模式
    JS自定义事件
    原生js实现拖拽功能
  • 原文地址:https://www.cnblogs.com/zhangb8042/p/16189365.html
Copyright © 2020-2023  润新知