使用Prometheus(vmagent)监控K8s集群:如何获取缺失的namespace_workload_pod等指标?
解决Kubernetes监控中namespace_workload_pod与workload_type指标缺失问题
这类指标由谁提供
namespace_workload_pod和workload_type相关指标是由kube-state-metrics提供的。kube-state-metrics是专门用于暴露Kubernetes集群各类对象(如Pod、Deployment、StatefulSet等)状态指标的组件,它从Kubernetes API拉取对象元数据与状态,转换为Prometheus兼容格式的指标供采集。
如何获取这类指标
1. 部署kube-state-metrics到集群
有两种常见部署方式:
- 官方资源清单部署:
获取对应版本的kube-state-metrics资源清单文件(如kube-state-metrics.yaml),执行以下命令完成部署:kubectl apply -f kube-state-metrics.yaml - Helm部署:
通过Helm仓库快速安装:
部署后需确认kube-state-metrics的Pod正常运行,对应服务已创建。helm repo add kube-state-metrics https://kubernetes.github.io/kube-state-metrics helm install kube-state-metrics kube-state-metrics/kube-state-metrics
2. 配置vmagent采集指标
在vmagent的采集配置中新增针对kube-state-metrics的scrape任务:
scrape_configs: - job_name: 'kube-state-metrics' # 基于Kubernetes服务发现自动识别目标 kubernetes_sd_configs: - role: endpoints namespaces: names: - kube-system # 替换为kube-state-metrics实际部署的命名空间 relabel_configs: - source_labels: [__meta_kubernetes_service_name] regex: 'kube-state-metrics' action: keep # 若服务地址固定,也可使用静态目标 # static_configs: # - targets: ['kube-state-metrics.kube-system.svc:8080']
修改配置后重启vmagent,使配置生效。
3. 验证指标采集
- 访问vmagent的Targets页面(默认端口8429,即
http://<vmagent地址>:8429/targets),确认kube-state-metrics采集任务状态为UP。 - 通过PromQL查询验证:原始指标如
kube_pod_info包含namespace和workload标签,可基于此构造聚合查询得到类似namespace_workload_pod的统计结果,例如:count(kube_pod_info) by (namespace, workload)
内容的提问来源于stack exchange,提问作者Iceforest
相关产品推荐
相关产品推荐

