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