Kubernetes 告警管理是什么
在 Kubernetes 里,规则不是改容器内文件,而是声明式资源:用 PrometheusRule 定义告警与记录规则,用 AlertmanagerConfig 管理路由与接收器,由 Operator 监听并同步到运行实例。这样做的好处是规则随集群一起版本化管理;对应的要求是必须理解标签选择器——规则资源只有带对标签才会被加载,写对了却没人发现标签不匹配,是这套体系最常见的坑。
基本信息
| 适用平台 | Prometheus Operator 与 kube-prometheus-stack |
|---|---|
| 规则资源 | PrometheusRule(自定义资源,kind 为 PrometheusRule) |
| 通知资源 | AlertmanagerConfig(管理路由与接收器) |
| 加载条件 | 资源标签需匹配 Operator 配置中的选择器 |
典型使用场景
- 应用告警:为业务服务定义错误率与延迟规则
- 平台告警:节点、容器资源与调度异常的统一规则
- 多团队分治:各团队用带命名空间的规则资源各自管理
- 记录规则:把高频查询预计算成新指标降低查询压力
- 配置审计:规则在集群里可枚举、可评审、可回滚
PrometheusRule 示例
PrometheusRule 示例
apiVersion: monitoring.coreos.com/v1
kind: PrometheusRule
metadata:
name: app-alerts
namespace: monitoring
labels:
release: kube-prometheus-stack # 需匹配 Prometheus 实例的选择器
spec:
groups:
- name: app.rules
rules:
- alert: AppHighErrorRate
expr: sum by (service) (rate(http_requests_total{code=~"5.."}[5m])) > 5
for: 10m # 持续 10 分钟才触发,抗抖动
labels:
severity: warning
team: order-platform
annotations:
summary: "服务 {{ $labels.service }} 错误速率偏高"
runbook_url: https://wiki.example.com/runbook/app-error-rate关键字段
| 字段 | 作用 | 注意事项 |
|---|---|---|
| metadata.labels | 决定规则是否被加载 | 需匹配 Operator 的选择器 |
| groups[].rules[].expr | 告警表达式 | 表达式错误只会在运行时暴露 |
| for | 持续时间条件 | 用于过滤瞬时抖动 |
| labels.severity | 通知路由依据 | 与 Alertmanager 路由保持一致 |
| annotations | 通知文案与链接 | 模板变量引用不存在的标签会渲染为空 |
规则资源缺标签是静默失效的典型来源:资源创建成功、集群里能看到,但 Prometheus 从未加载它,排查时先确认选择器匹配情况。
改规则请改资源而不是改运行实例内的文件:直接进入容器修改会在下一次同步时被覆盖,改动看起来生效过一段时间又消失。