AWS EKS集群containerd的container_fs_usage_bytes指标缺失Pod/Container标签求助
解决AWS EKS中containerd
container_fs_usage_bytes指标缺失Pod/Container标签的方案 方案一:配置containerd启用Kubernetes元数据标签
containerd 1.5+版本支持通过CRI集成获取Kubernetes的Pod和Container元数据,需修改containerd配置文件开启相关采集项:
- 编辑containerd配置文件(通常路径为
/etc/containerd/config.toml),添加或修改以下配置段:
[plugins."io.containerd.grpc.v1.cri".metrics] enable_metrics = true metrics_collectors = ["container"] metric_level = "detail"
- 重启containerd服务使配置生效:
systemctl restart containerd
- 验证:访问containerd metrics端点(默认在
localhost:1338/metrics),检查container_fs_usage_bytes指标是否带有pod_name、container_name、namespace标签。
方案二:改用kubelet cadvisor指标替代
如果containerd原生metrics无法满足标签需求,直接采集kubelet的cadvisor指标是更可靠的方案:
- kubelet默认在10250端口暴露cadvisor metrics,路径为
/metrics/cadvisor - 该端点的
container_fs_usage_bytes指标自带pod_name、container_name、namespace等完整标签,无需额外配置即可直接使用 - 调整Prometheus的scrape配置,添加kubelet的cadvisor采集任务即可
方案三:升级containerd到兼容的更高版本
containerd 1.6.19存在部分元数据标签采集的bug,升级到1.6.20+或1.7.x版本可修复该问题:
- 确认AWS EKS集群版本(v1.24.15-eks)与目标containerd版本的兼容性(可参考AWS官方文档的兼容矩阵)
- 通过EKS节点组更新或手动替换节点的方式完成containerd升级,确保升级过程中节点业务平稳迁移
方案四:用Prometheus Relabel规则补全标签
若上述方案无法实施,可通过Prometheus的relabeling规则结合kube-state-metrics补全标签:
- 确保集群已部署kube-state-metrics,它会暴露Pod与Container的ID关联信息
- 在Prometheus配置中添加以下relabel规则,通过
container_id关联补全标签:
scrape_configs: - job_name: 'containerd' static_configs: - targets: ['localhost:1338'] relabel_configs: - source_labels: [container_id] target_label: __container_id__ - job_name: 'kube-state-metrics' static_configs: - targets: ['kube-state-metrics.kube-system.svc.cluster.local:8080'] metric_relabel_configs: - source_labels: [__container_id__] regex: '^(.+)$' target_label: container_id replacement: '$1' - source_labels: [pod_name, container_name, namespace] regex: '(.+);(.+);(.+)' target_label: pod_name replacement: '$1'
注:具体规则需根据kube-state-metrics的输出调整,确保container_id与containerd指标中的ID格式一致
内容的提问来源于stack exchange,提问作者chengzhi shang
相关产品推荐
相关产品推荐

