You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于命名空间标签配置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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 16:13:12