如何基于命名空间标签配置Pod重启的Prometheus告警规则?
基于命名空间标签的Pod重启告警规则配置
问题背景
需要配置PrometheusRule,仅对带有特定标签的命名空间触发Pod重启告警。比如已给kube-system命名空间打上team=testing标签,但原规则和错误尝试均无法生效,需借助kube_namespace_labels指标修正表达式,同时实现在告警的annotations或labels中使用该命名空间标签。
原尝试的无效规则
- alert: PodRestartsAlert expr: (sum(increase(kube_pod_container_status_restarts_total{team="testing"}[5m])) by (namespace,pod)) >= 1 annotations: description: "The pod {{ $labels.pod }} in namespace {{ $labels.namespace }} has experienced more than 1 restarts."
错误的改写尝试
expr: sum by (namespace, pod) (increase(kube_pod_container_status_restarts_total[5m])) * on(namespace) group_left() max(kube_namespace_labels{workload_servicenow_com_team="snowsk8s-fabric"}) >= 1
正确解决方案
1. 完整的告警规则
apiVersion: monitoring.coreos.com/v1 kind: PrometheusRule metadata: name: pod-restart-alert namespace: monitoring spec: groups: - name: pod-restarts rules: - alert: PodRestartsAlert expr: | sum by (namespace, pod, team) ( increase(kube_pod_container_status_restarts_total[5m]) * on(namespace) group_left(team) kube_namespace_labels{team="testing"} ) >= 1 labels: severity: warning team: "{{ $labels.team }}" # 直接复用命名空间的team标签 annotations: description: "Pod {{ $labels.pod }}(命名空间:{{ $labels.namespace }},所属团队:{{ $labels.team }})重启次数已超过1次" summary: "Pod异常重启告警"
2. 表达式核心逻辑说明
increase(kube_pod_container_status_restarts_total[5m]):统计5分钟内每个Pod容器的重启次数增量* on(namespace) group_left(team):通过namespace字段关联kube_namespace_labels指标,将命名空间的team标签合并到当前指标的标签集合中kube_namespace_labels{team="testing"}:预先筛选出带有team=testing标签的命名空间,确保仅对这些命名空间的Pod触发告警sum by (namespace, pod, team):按命名空间、Pod实例、团队标签聚合结果,保证每个Pod的重启次数统计准确
3. 命名空间标签的复用方法
通过group_left(team)将命名空间的team标签关联到告警指标的标签集后,可直接在labels或annotations中用{{ $labels.team }}引用该标签,比如示例中在告警描述里展示所属团队,或给告警打team标签用于后续路由。
注意点
- 确保Prometheus已采集
kube_namespace_labels指标(该指标通常由kube-state-metrics组件提供) - 若命名空间标签带有域名前缀(如
workload.servicenow.com/team),需转换成Prometheus支持的格式:将.和/替换为_,写成workload_servicenow_com_team="snowsk8s-fabric"
内容的提问来源于stack exchange,提问作者bvnbhati
相关产品推荐
相关产品推荐

