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
相关产品推荐
相关产品推荐

