K8s监控告警规则自定义:从零编写你的第一条告警

K8s监控告警规则自定义:从零编写你的第一条告警

很多朋友搭好K8s集群后就忙着部署应用,结果等到服务挂了才发现没有监控告警。
其实通过Prometheus Operator配合Alertmanager,只需要改几个配置就能实现K8s监控告警规则自定义,让你第一时间收到异常通知。
本文不讲复杂的底层原理,只带你从零走通整个流程。

自定义监控告警前要准备好什么

先确认你的集群里已经安装了Prometheus Operator(一般通过Helm部署,名字叫kube-prometheus-stack)。
如果没有,可以搜一下官方文档快速装好。
有了Operator后,默认会有一条叫PrometheusRule的CRD(自定义资源),我们只需要在同一个命名空间下新建一个PrometheusRule对象,就能添加自定义告警。
另外,还要确保Alertmanager也正常运行,并且你已经有一个接收通知的渠道(比如企业微信、钉钉或邮箱)。

一步步创建你的第一条告警规则

1. 编写PrometheusRule YAML文件

创建一个文件custom-alert.yaml,内容如下(注意修改namespace为你自己的命名空间):

apiVersion: monitoring.coreos.com/v1
kind: PrometheusRule
metadata:
  labels:
    app: kube-prometheus-stack
    release: prometheus  # 根据你的Helm release名称调整
  name: custom-alert-rule
  namespace: monitoring  # Prometheus Operator所在的命名空间
spec:
  groups:
  - name: example-group
    interval: 30s
    rules:
    - alert: HighMemoryUsage
      expr: node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes < 0.1
      for: 5m
      labels:
        severity: warning
      annotations:
        summary: "节点 {{ $labels.instance }} 内存不足"
        description: "节点可用内存低于10%(当前值:{{ $value | humanizePercentage }})"

这个规则的意思是:当节点可用内存低于总内存的10%时,触发告警,持续5分钟才发出通知。for参数可以过滤短暂抖动。

2. 应用规则到集群

运行命令:

kubectl apply -f custom-alert.yaml

如果一切正常,你会看到prometheusrule.monitoring.coreos.com/custom-alert-rule created
现在Prometheus会自动加载这个规则。

3. 配置Alertmanager接收通知

假设你已经在Alertmanager里定义了一个receiver叫webhook(指向钉钉机器人或Slack)。
只需要在alertmanager.yaml里的routes部分添加一条路由,让它匹配severity: warning的告警并转发到你的receiver。

route:
  receiver: 'default-receiver'
  group_wait: 10s
  group_interval: 5m
  repeat_interval: 1h
  routes:
  - match:
      severity: warning
    receiver: 'webhook'

更新Alertmanager配置后,需要重启或热加载ConfigMap。
如果用的是Helm,直接修改values.yaml再升级即可。

新手最容易踩的四个坑

  • PrometheusRule的namespace必须和Prometheus实例在同一个namespace,否则规则不会被识别。
  • 告警表达式里的metric名称要确认存在,可以先在Prometheus UI中执行查询验证。
  • for的时间不要设太短(比如10秒),否则网络波动容易造成频繁告警。
  • receivers名称必须和Alertmanager配置里的一致,大小写敏感。

如何验证告警规则生效了

最简单的方法是模拟一个低内存场景。
如果你有一个测试节点,可以临时占用内存(比如用stress工具):

kubectl run stress-test --image polinux/stress -- --vm 2 --vm-bytes 1G --timeout 60

然后等待5分钟后,去Prometheus的Alert页面(通常地址是http:///alerts)查看告警是否变为FIRING状态。
同时检查你的通知方式(钉钉/邮件)是否收到了告警内容。
如果一切正常,说明你的K8s监控告警规则自定义已经成功跑通了。

写在最后

自定义告警规则是K8s运维的必备技能,本文给你演示的是一个最简单的内存告警示例。
实际生产中你还需要添加CPU、磁盘、Pod重启等规则。
只要掌握了PrometheusRule的写法、表达式和Alertmanager的路由配置,剩下的就是按业务需求灵活调整。
如果你在处理K8s监控告警规则自定义过程中遇到异常,建议先回看避坑部分,再检查Prometheus的日志和UI——绝大多数问题都是namespace和表达式写错了。

分享到:
上一篇
K8s存储卷类型使用场景区分:一份零基础选型指南
下一篇
eBPF技术服务器安全检测教程
1
系统公告

高考专属福利来袭|凭准考证免费领香港 CN2 云服务器

值高考落幕之际,泽御云开启考生专属回馈 + 产品限时特惠双重活动,助力学子暑期学习建站 高考 考生专属福利 全体应届高考生,凭高考准考证即可免费申领【香港 CN2 轻量云服务器,4 核 4G AMD 处理器】,免费使用周期 30 天,可用于搭建个人站点、编程实操、技术实训,祝各位考生金榜题名,前程似锦! 泽御云资质齐全合规自营机房,线路覆盖香港 CN2、国内 BGP、内蒙电信、美国精品线路,售后全天候技术支持。 官方网站:www.zeyuyun.com,活动限时有效,优惠逾期不再保留。
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意