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

OpenShift中PrometheusRule应用后规则变更问题排查

OpenShift租户项目Prometheus规则自动添加namespace标签问题排查

我在OpenShift中为租户项目创建Prometheus规则,需求是监控CPU使用率百分比,超过80%时触发告警。创建并应用PrometheusRule CRD后,CRD里的规则显示正常,但进入告警页面后发现规则被自动修改了。

原规则(CRD中配置)

spec:
  groups:
    - name: xxx-cpu-monitoring
      rules:
      - alert: 'CPURequestIsOverBy90%'
        annotations:
          description: 'CPU request is over by 90% with more than 5 minutes.'
          summary: 'Usage is over by 90% CPU Request'
        expr: 'sum(namespace_cpu:kube_pod_container_resource_requests:sum * on(namespace) group_left kube_namespace_labels{label_team="xxx",label_zone="internal",label_scheduled_on_infra=""}) /  sum(machine_cpu_cores * on(node) group_left(label_kubernetes_io_hostname) kube_node_labels{label_rabo_owner="xxx",label_rabo_zone="internal"}) * 100 > 60'
        for: 5m
        labels:
          severity: warning

告警页面显示的变更后规则

sum(namespace_cpu:kube_pod_container_resource_requests:sum{namespace="xxx"} * kube_namespace_labels{label_scheduled_on_infra="",label_team="xxx",label_zone="internal",namespace="xxx"}) /  sum(machine_cpu_cores{namespace="xxx"} * on(node) * 100 

可以看到规则自动为namespace_cpu:kube_pod_container_resource_requests:sum添加了namespace="xxx"标签,想知道这是group_left导致的,还是有其他原因?


这不是group_left导致的,核心原因是OpenShift的租户级Prometheus(User Workload Monitoring)会自动为租户项目的PrometheusRule添加namespace限定,属于平台默认的权限隔离行为:

  • 当你在xxx租户项目中创建PrometheusRule时,OpenShift的User Workload Monitoring组件会自动给规则中的所有指标加上当前项目的namespace="xxx"标签过滤,确保租户只能监控自身项目内的资源,防止越权访问其他租户的监控数据。
  • CRD里的原始配置不会被修改,但实际运行的规则会被平台做权限范围内的过滤处理,所以告警页面显示的是经过注入后的规则。
  • 另外注意变更后的规则后半段存在语法错误(sum(machine_cpu_cores{namespace="xxx"} * on(node) * 100),这是因为machine_cpu_cores是节点级指标,本身没有namespace标签,平台强行添加后导致PromQL语法异常,你需要调整原规则的节点CPU计算逻辑,比如避免让节点指标被namespace过滤影响,或者改用租户可见的节点指标集合。

内容的提问来源于stack exchange,提问作者Danny

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 23:15:00