需求

集群外独立部署Prometheus+Grafana监控K8S全面解析一文剖析了k8s的监控,但是无法在grafana dashboard中配置告警,因此我们需要额外在Prometheus单独配置告警规则,配合AlertManager实现告警。而Prometheus监控的指标很多,如何定义告警规则就是我们接下来需要做的。

通常情况下,运维工作中会存在多个监控告警系统并行使用的情况,如zabbix、nagios、prometheus;每个监控系统面向的监控需求不同,我们不可能通过一套监控实现所有的监控需求。认识到这一点后,我们就可以将Prometheus的监控指标主要集中在k8s资源、pod性能方面,而其他传统的服务器性能监控可以交给其他监控系统。

分析

结合自己的实际应用,我把k8s的告警规则分为以下几方面:

  • JobDown
    对应Prometheus指标收集的4个Job、分别为kube-state-metrics、kube-node-exporter、kube-node-kubelet、kube-node-cadvisor,一旦哪个Job有问题,则会进行告警。
  • PodDown
    当处于Running状态的pod停止时,则会进行告警。
  • PodReady
    在Pod重新调度后,虽然Pod处于Running状态,由于此时正在重启,Ready为0,只有当readiness探针探测正常后,Ready为1,才会正式接受请求;因此Ready长时间为0时,说明Pod启动有问题,需要进行告警。
  • PodRestart
    当Pod健康检查不成功,Pod会进行不断的重启,一旦超过一定的次数,则说明Pod有问题,此时需要进行告警。

注意:
查看pod状态,只有当READY为1,STATUS为Running时,Pod才是正常运行的

[root@test ~]# kubectl get pod
NAME                  READY   STATUS    RESTARTS   AGE
node-exporter-nch8w   1/1     Running   0          46h
node-exporter-smnxn   1/1     Running   0          46h
node-exporter-sqng2   1/1     Running   0          46h

Prometheus

1.修改配置文件

# 配置alertmanager
alerting:alertmanagers:- static_configs:- targets:- 192.168.3.44:9093
# 告警规则
rule_files:- "/prometheus/etc/k8s.yml"

注意:
由于prometheus使用的是docker部署,因此k8s.yml位置必须是容器内部的目录位置,而不是宿主机上的问题。

2.添加告警规则

注意:for告警持续时间,可根据实际情况进行修改。

groups:
- name: node.rulesrules:- alert: JobDown #检测job的状态,持续5分钟metrices不能访问会发给altermanager进行报警expr: up == 0  #0不正常,1正常for: 5m  #持续时间 , 表示持续5分钟获取不到信息,则触发报警labels:severity: errorcluster: k8sannotations:summary: "Job: {{ $labels.job }} down"description: "Instance:{{ $labels.instance }}, Job {{ $labels.job }} stop "- alert: PodDownexpr: kube_pod_container_status_running != 1  for: 2slabels:severity: warningcluster: k8sannotations:summary: 'Container: {{ $labels.container }} down'description: 'Namespace: {{ $labels.namespace }}, Pod: {{ $labels.pod }} is not running'- alert: PodReadyexpr: kube_pod_container_status_ready != 1  for: 5m   #Ready持续5分钟,说明启动有问题labels:severity: warningcluster: k8sannotations:summary: 'Container: {{ $labels.container }} ready'description: 'Namespace: {{ $labels.namespace }}, Pod: {{ $labels.pod }} always ready for 5 minitue'- alert: PodRestartexpr: changes(kube_pod_container_status_restarts_total[30m])>0 #最近30分钟pod重启for: 2slabels:severity: warningcluster: k8sannotations:summary: 'Container: {{ $labels.container }} restart'description: 'namespace: {{ $labels.namespace }}, pod: {{ $labels.pod }} restart {{ $value }} times'

其中为每条告警规则添加了两个自定义label:

  • severity: warning
    告警紧急程度。
  • cluster: k8s
    集群标签,alertmanager根据此标签进行告警路由选择,以便通知到告警人。

3.检查配置并重载

# 1.进入prometheus容器
docker exec -it b9824084f26f /bin/sh
# 2.检查配置文件
# /bin/promtool check rules /prometheus/etc/k8s.yml
Checking /prometheus/etc/k8s.ymlSUCCESS: 4 rules found
# 3.重载
curl -X POST http://127.0.0.1:9090/-/reload

Alertmanager

1.告警设置

默认进行微信告警,也可根据部门rd、集群cluster、产品product等标签,进行邮件或微信告警。

global:resolve_timeout: 5msmtp_smarthost: xxx.xxx.cn:587smtp_from: xxxx@xxx.cnsmtp_auth_username: xxx@xx.cnsmtp_auth_password: xxxxxxxx#告警模板
templates:
- '/usr/local/alertmanager/wechat.tmpl'route:#按alertname进行分组group_by: ['alertname']group_wait: 5m#同一组内警报,等待group_interval时间后,再继续等待repeat_interval时间group_interval: 5m#当group_interval时间到后,再等待repeat_interval时间后,才进行报警repeat_interval: 5m# 默认微信告警receiver: 'wechat'# 按部门rd、集群cluster、产品product区分,进行不同方式的告警routes:- receiver: 'email_rd'match_re:department: 'rd'- receiver: 'email_k8s'match_re:cluster: 'k8s'- receiver: 'wechat_product'match_re:product: 'app'
receivers:
#微信告警通道
- name: 'wechat'wechat_configs:- corp_id: 'wwxxxxfdd372e'agent_id: '1000005'api_secret: 'FxLzx7sdfasdAhPgoK9Dt-NWYOLuy-RuX3I'to_user: 'test1|test2'send_resolved: true
#邮件告警通道
- name: 'email_tech'email_configs:- to: muxq@cityhouse.cnheaders: {"subject":'{{ template "email.test.header" . }}'}html: '{{ template "email.test.message" . }}'send_resolved: true
- name: 'email_k8s'email_configs:- to: 'xxx@xx.cn,xx@xx.cn'headers: {"subject":'{{ template "email.test.header" . }}'}html: '{{ template "email.test.message" . }}'send_resolved: true
#微信告警通道
- name: 'wechat_product'wechat_configs:- corp_id: 'wwxxxxfdd372e'agent_id: '1000005'api_secret: 'FxLzx7sdfasdAhPgoK9Dt-NWYOLuy-RuX3I'to_user: 'test1|test2'send_resolved: true

2.告警模板

# 1.微信告警模板
{{ define "grafana.default.message" }}{{ range .Alerts }}
{{ (.StartsAt.Add 28800e9).Format "2006-01-02 15:04:05" }}
{{ range .Annotations.SortedPairs }}{{ .Name }} = {{ .Value }}
{{ end }}{{ end }}{{ end }}{{ define "wechat.default.message" }}
{{ if eq .Status "firing"}}[Warning]:{{ template "grafana.default.message" . }}{{ end }}
{{ if eq .Status "resolved" }}[Resolved]:{{ template "grafana.default.message" . }}{{ end }}
{{ end }}# 2.邮件告警模板
{{ define "email.to.html" }}
{{ range .Alerts }}
<br>
触发时间: {{ (.StartsAt.Add 28800e9).Format "2006-01-02 15:04:05" }}<br>
告警类型: {{ .Labels.alertname }} <br>
告警主题: {{ .Annotations.summary }} <br>
告警详情: {{ .Annotations.description }} <br>
{{ end }}
{{ end }}{{ define "email.test.header" }}
{{ if eq .Status "firing"}}[Warning]:{{ range .Alerts }}{{ .Annotations.summary }} {{ end }}{{ end }}
{{ if eq .Status "resolved"}}[Resolved]:{{ range .Alerts }}{{ .Annotations.summary }} {{ end }}{{ end }}
{{ end }}{{ define "email.test.message" }}
{{ if eq .Status "firing"}}[Warning]:{{ template "email.to.html" . }}{{ end }}
{{ if eq .Status "resolved" }}[Resolved]:{{ template "email.to.html" . }}{{ end }}
{{ end }}

3.告警内容

1.微信告警
2.邮件告警

# 1.JobDown
[Warning]:
触发时间: 2020-10-27 16:46:44
告警类型: JobDown
告警主题: Job: kube-node-exporter down
告警详情: Instance:uvmsvr-3-217, Job kube-node-exporter stop[Resolved]:
触发时间: 2020-10-27 16:46:44
告警类型: JobDown
告警主题: Job: kube-node-exporter down
告警详情: Instance:uvmsvr-3-217, Job kube-node-exporter stop# 2.PodDown
[Warning]:
触发时间: 2020-10-28 14:03:14
告警类型: PodRestart
告警主题: Container: sdk-back down
告警详情: namespace: test, pod: api-sdk-58497c4db9-hwgjl is not running [Resolved]:
触发时间: 2020-10-28 14:03:14
告警类型: PodRestart
告警主题: Container: sdk-back down
告警详情: namespace: test, pod: api-sdk-58497c4db9-hwgjl is not running # 3.PodReady
[Warning]:
触发时间: 2020-10-29 11:24:59
告警类型: PodReady
告警主题: Container: sdk-back ready
告警详情: Namespace: test, Pod: api-sdk-58497c4db9-k98g5 always ready for 5 minitue [Resolved]:
触发时间: 2020-10-29 11:24:59
告警类型: PodReady
告警主题: Container: sdk-back ready
告警详情: Namespace: test, Pod: api-sdk-58497c4db9-k98g5 always ready for 5 minitue# 4.PodRestart
[Warning]:
触发时间: 2020-10-29 11:20:29
告警类型: PodRestart
告警主题: Container: sdk-back restart
告警详情: namespace: test, pod: api-sdk-58497c4db9-k98g5 restart 3 times [Resolved]:
触发时间: 2020-10-29 11:20:29
告警类型: PodRestart
告警主题: Container: sdk-back restart
告警详情: namespace: test, pod: api-sdk-58497c4db9-k98g5 restart 3 times

总结

除了以上告警规则,我们还可根据grafana中的dashboard进一步配置,毕竟里面监控内容更加详细。总之需要根据实际应用,选择适合自己的才是最好的。

另外还可以参考阿里云关于Prometheus的监控规则进一步丰富告警规则:

https://help.aliyun.com/document_detail/176180.html?spm=a2c4g.11186623.4.5.717e3eebxbWsZy#title-dcc-mv9-w33

Prometheus+k8s之告警通知相关推荐

  1. k8s pod restartcount 改0_Prometheus+k8s之告警通知

    集群外部署Prometheus+Grafana监控K8S解析 一文剖析了k8s的监控,但是无法在grafana dashboard中配置告警,因此我们需要额外在Prometheus单独配置告警规则,配 ...

  2. prometheus k8s 监控告警

    在K8S集群中部署Node-exporter.Prometheus.Grafana,同时使用Prometheus对K8S整个集群进行监控 一.K8S集群部署Node exporter 1.在Maste ...

  3. Prometheus + AlertManager + Prometheus-webhook-dingtalk的告警通知

    基于mysql的监控配置,使用钉钉推送告警通知,grafana图形化展示 1.docker拉取相关镜像 docker pull prom/mysqld-exporter docker pull pro ...

  4. PrometheusAlert 多渠道告警通知神器

    Prometheus Alert 简介 Prometheus Alert 是开源的运维告警中心消息转发系统,支持主流的监控系统 Prometheus,日志系统 Graylog 和数据可视化系统 Gra ...

  5. 【Prometheus】Alertmanager告警全方位讲解

    Prometheus告警简介 告警能力在Prometheus的架构中被划分成两个独立的部分.如下所示,通过在Prometheus中定义AlertRule(告警规则),Prometheus会周期性的对告 ...

  6. Prometheus+Grafana监控告警配置

    文章目录 Prometheus介绍 Prometheus及其组件安装 Prometheus安装 PromQL介绍 mysqld_exporter组件安装 node_exporter组件安装 alert ...

  7. Prometheus 之 Alertmanager告警抑制与静默

    一.告警级别 在rules告警规则中,根据不同的阈值制定不同的告警等级. 告警严重度 关键字 严重 critical.disaster.blocker.immediate.fatal.crit.sev ...

  8. 运维监控系列(15)-Alertmanager添加163邮箱、钉钉、微信告警通知功能

    163邮箱 可用通过邮件方式进行告警通知的发送,接着上篇文档,我们配置发送邮件告警方式. 1. 设置163邮箱 发送邮件,需要smtp邮件服务器,首先需要对网易邮箱进行设置. 首先登陆163邮箱,进入 ...

  9. Prometheus和Grafana告警服务创建与对接腾讯云短信告警平台(prometheus_alert)

    前言 在一个监控系统中,如果说数据链路是她的骨架,那么告警通知服务就是他的灵魂!所有的监控服务都是为了能够及时通知出来,减少人工查询状态,及时发现问题,避免不必要的大规模故障,为企业政府省钱,和保证安 ...

  10. Prometheus之Alertmanager告警

    文章目录 告警流程 部署Alertmanager Alertmanager配置介绍 Prometheus rule文件配置 邮件告警 开启邮箱授权 配置Alertmanager 验证 钉钉告警 钉钉创 ...

最新文章

  1. 使用java spring开发ckeditor的文件上传功能(转)
  2. centos中文乱码修改字符编码使用centos支持中文
  3. C语言之指针与数组总结
  4. ASP.NET Core端点路由 作用原理
  5. Moss/Sharepoint 为特定用户组设置特定视图以及可见视图,自定义列表新建页,修改页和显示页(无代码法)...
  6. php老鸟,老鸟谈PHP数组排序
  7. java随机输出_用java随机输出汉字
  8. 关于Ubuntu中passwd、shadow、group等文件
  9. HDOJ--2066--一个人的旅行
  10. PhotoZoom放大图片,真的能无损吗?
  11. iframe:获取iframe中的元素
  12. 墙裂推荐几款桌面应用
  13. 童年修复系列-SNES芯片组介绍及FPGA实现
  14. 分享12个高质量的PPT图片素材下载站
  15. Ubuntu 16.04 安装 NVIDIA GeForce GTX 1060 显卡驱动,以及 CUDA 10.1
  16. linux怎么修改ftp虚拟用户账号密码,Linux下FTP虚拟账户配置
  17. SQL入门-连结(JOIN)
  18. 考研调剂信息爬取,以“小木虫”为例
  19. 数据脱敏(Data Masking)学习
  20. 2020算法面经问题汇总

热门文章

  1. 干眼症久治不愈?反复发作,小心可能不是干眼症!
  2. 【项目复习篇】EGO电商项目技术总结与学习笔记
  3. 为羊哥点赞,利用云服务器搭建私人云笔记
  4. python复制excel图片_python批量导出excel区域图片
  5. Lesson 17.11 案例一:SVHN街道实景门牌识别
  6. 批量合成bilibili的m4s缓存文件为MP4格式 ver2.0
  7. 读万卷书,行万里路,写万行Code
  8. 北京地区2009年春运火车票购买指南(V2.5)
  9. php 网页截屏,php怎样实现网页截图
  10. Python 爬虫超详细讲解(零基础入门,老年人都看的懂)