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

如何按Service汇总监控指标?以kubelet(cAdvisor)指标为例

嘿,刚好对这块比较熟悉,我来一步步给你讲清楚怎么把Pod级的监控指标聚合到Service维度,还有你问的那个指标的问题~

按Service汇总Kubernetes监控指标的方法

核心逻辑:从Pod关联到Service

Kubernetes里的Service是通过标签选择器绑定Pod的,所以要把Pod的指标聚合到Service,核心就是建立Pod和Service之间的标签关联,再用监控工具的聚合能力完成统计。

方法1:用PromQL直接关联聚合(最常用)

如果你的集群已经部署了kube-state-metrics(大部分K8s监控栈都会自带它),它会暴露Pod和Service的元数据关联指标,帮你完成标签映射。

以你提到的container_cpu_usage_seconds_total为例,分两种场景:

  • 场景1:Pod和Service用相同标签关联
    比如你的Service用app=my-service选择Pod,Pod也带有app=my-service标签,那直接用聚合函数按标签统计就行:

    sum(rate(container_cpu_usage_seconds_total{container!="POD", namespace!="kube-system"}[5m])) by (app)
    

    这里的sum是把同标签Pod的CPU使用率加总,你也可以根据需求换成avg(平均)、max(最大值)等函数。

  • 场景2:Pod和Service标签不直接对应
    可以通过kube-state-metrics提供的kube_pod_info指标,把Pod所属的Service标签关联进来,再聚合:

    sum(
      rate(container_cpu_usage_seconds_total{container!="POD"}[5m])
      * on(pod) group_left(service) kube_pod_info{service!=""}
    ) by (service)
    

    这段PromQL的逻辑是:先拿到Pod的CPU使用率,再通过pod标签关联上对应的Service名称,最后按Service汇总。

方法2:在采集阶段提前添加Service标签

如果你用Prometheus Operator或者自定义的ServiceMonitor,可以在采集配置里通过relabelings规则,给Pod指标直接打上Service标签,后续聚合会更简单。

比如在ServiceMonitor的配置里添加:

relabelings:
- sourceLabels: [__meta_kubernetes_pod_label_app]
  targetLabel: service
  action: replace

这样采集到的所有Pod指标都会带上service标签,后续直接用sum(rate(...)) by (service)就能完成聚合。

关于process_cpu_seconds_total的疑问

明确说:不是。
process_cpu_seconds_total是进程级的CPU使用统计(比如Prometheus自身进程、应用程序进程的CPU消耗),而container_cpu_usage_seconds_total是容器级的CPU指标,两者统计对象和维度完全不同,不存在“前者是后者按Service聚合”的关系。

额外小提示

  • 如果用Grafana做可视化,直接把上面的PromQL作为数据源,就能生成Service级别的CPU使用率面板。
  • 确保kube-state-metrics是较新版本,旧版本可能缺少部分关联元数据。
  • 如果一个Pod被多个Service关联,聚合时要根据业务需求选择去重或合并的方式(比如用max而非sum避免重复统计)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:32:56