Kubernetes集群中解决cAdvisor返回空标签致Prometheus指标请求过慢问题
解决cAdvisor返回大量空标签导致metrics接口缓慢的问题
方案1:修改cAdvisor启动参数,直接禁用空标签输出
从cAdvisor v0.39.0版本开始,官方提供了--allow_empty_labels=false启动参数,开启后会自动过滤掉所有值为空的标签,从根源上解决问题。
修改你的DaemonSet配置,在cAdvisor容器的args中添加该参数:
apiVersion: apps/v1 kind: DaemonSet metadata: name: cadvisor spec: selector: matchLabels: app: cadvisor template: metadata: labels: app: cadvisor spec: containers: - name: cadvisor image: gcr.io/cadvisor/cadvisor:v0.47.0 # 建议使用v0.39.0及以上版本 args: - --allow_empty_labels=false - --port=8080 # 保留你原有其他启动参数 ports: - containerPort: 8080 hostPort: 31194
更新DaemonSet后,重启所有cAdvisor Pod:
kubectl rollout restart daemonset cadvisor
方案2:通过Prometheus Relabeling规则过滤空标签
如果无法修改cAdvisor的配置或版本,可在Prometheus的抓取配置中添加Relabel规则,删除所有值为空的标签:
在Prometheus的scrape_configs中针对cAdvisor的job添加以下规则:
scrape_configs: - job_name: 'cadvisor' static_configs: - targets: ['worker5:31194'] relabel_configs: # 删除所有值为空的标签 - action: labeldrop regex: '(.+)' condition: source_labels: ['$1'] regex: '^$'
这个规则会遍历所有标签,当标签值为空时自动删除该标签,有效减小metrics响应体积。
方案3:升级cAdvisor到支持空标签过滤的版本
如果你的cAdvisor版本低于v0.39.0,先升级到较新版本(比如v0.47.0),再使用方案1的参数配置,这样既能获得新版本的功能优化,也能解决空标签问题。
内容的提问来源于stack exchange,提问作者Iceforest
相关产品推荐
相关产品推荐

