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

使用prometheus-stack采集kubelet指标时如何将pod标签加入指标标签

解决方案

方案1:直接修改prometheus-stack采集配置,在kubelet/cadvisor指标采集时注入Pod标签

该方案为最优方案,无需查询时关联,性能损耗最低。
你使用helm安装的prometheus-stack内置了kubelet采集的相关配置参数,无需手动修改底层sd_kubernetes_config规则:

  • 编辑你的prometheus-stack的values.yaml配置文件,新增如下配置:
kubelet:
  serviceMonitor:
    # 配置需要从Pod元数据中提取到cadvisor指标的标签,按需填写你的业务标签,比如应用名、环境、单元名
    cAdvisorPodMetadataLabels:
      - app
      - env
      - unit
  • 执行helm upgrade命令生效配置:
    helm upgrade -n <你的命名空间> prometheus-stack prometheus-community/kube-prometheus-stack -f values.yaml
    配置生效后,新采集的cadvisor、kubelet pod相关指标会自动带上你配置的这几个Pod标签。

方案2:通过PromQL关联kube-state-metrics的pod标签指标与cadvisor指标

如果不方便修改采集配置,可以通过Prometheus的一对多向量匹配语法group_left在查询时关联标签:

前置配置

首先确保kube-state-metrics已经暴露了你需要的Pod标签,在prometheus-stack的values.yaml中添加如下配置:

kube-state-metrics:
  extraArgs:
    - --metric-labels-allowlist=pods=[app,env,unit] # 按需填写你需要的Pod标签

执行helm upgrade生效后,kube_pod_labels指标会自动带上配置的app、env、unit等标签。

关联查询示例

以查询容器5分钟平均CPU使用率为例,关联Pod标签的PromQL写法如下:

sum by (namespace, pod, container, app, env, unit) (
  rate(container_cpu_usage_seconds_total{container!="", pod!=""}[5m])
  * on(namespace, pod) group_left(app, env, unit)
  kube_pod_labels{}
)

语法说明:

  • on(namespace, pod):指定两个指标的关联匹配键为namespace和pod标签
  • group_left(app, env, unit):将右侧kube_pod_labels指标的app、env、unit标签附加到左侧cadvisor指标的查询结果中

选型建议

  • 生产环境优先使用方案1:标签在采集阶段注入,查询时无额外性能开销,适合高频查询场景
  • 临时查询、低频使用的标签可以用方案2:无需调整采集配置,灵活度更高

内容的提问来源于stack exchange,提问作者Jiří Peták

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 07:36:03