kube-prometheus自定义监控及分组报警

一、自定义监控

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上新增规则是否存在

image.png

二、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.查看邮箱,发现规则触发并发送了邮件

image.png image.png

三、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邮箱

image.png

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

image.png

image.png

posted @ 2022-04-25 11:04  巽逸  阅读(0)  评论(0编辑  收藏  举报  来源