Prometheus 3.4.1采集cAdvisor时label值长度超限问题求助
问题背景
- 使用版本:Prometheus 3.4.1
- 部署方式:Docker启动,启动命令如下:
docker run -d --name prometheus -p 9090:9090 --group-add 988 \ -v "/etc/$p_conf":"/etc/prometheus/$p_conf" \ -v "$pv":/prometheus -v /var/run/docker.sock:/var/run/docker.sock \ prom/prometheus \ --config.file=/etc/prometheus/prometheus.yml \ --storage.tsdb.path=/prometheus \ --web.console.libraries=/etc/prometheus/console_libraries \ --web.console.templates=/etc/prometheus/consoles \ --web.enable-lifecycle docker run \ --volume=/:/rootfs:ro \ --volume=/var/run:/var/run:ro \ --volume=/sys:/sys:ro \ --volume=/var/lib/docker/:/var/lib/docker:ro \ --publish=8080:8080 \ --detach=true \ --name=cadvisor \ gcr.io/cadvisor/cadvisor:latest
- Prometheus中cadvisor相关Job配置:
- job_name: 'cadvisor' static_configs: - targets: ['localhost:8080']
- 遇到的采集错误:
Error scraping target: label_value_length_limit exceeded (metric: container_fs_inodes_free, label name: device, value: "/var/lib/docker/overlay2/34...20", length: 203, limit: 200)
- 尝试过的操作:
- 认为
metric_relabel_configs和relabel_configs无法解决该问题,需确认是否有误 - 添加启动参数
--storage.tsdb.label_value_length_limit=204,报错:
unknown long flag '--storage.tsdb.label_value_length_limit'
- 猜测该参数仅适用于2.x版本,询问3.4.1的对应参数及解决方法
- 认为
解决方案
1. 参数变更说明
Prometheus 3.x已移除--storage.tsdb.label_value_length_limit启动参数,改为通过配置文件全局设置调整标签值长度限制。
2. 全局调整标签值长度限制
修改prometheus.yml的global段,添加标签值长度配置:
global: # 根据实际需求设置长度,示例设为250 label_value_length_limit: 250
修改完成后,若已启用--web.enable-lifecycle参数,可通过curl -X POST http://<prometheus-ip>:9090/-/reload热加载配置;否则重启Prometheus容器即可。
3. 用relabel规则截断过长标签(替代方案)
你之前的判断有误,metric_relabel_configs可以直接截断过长的标签值,无需调整全局限制:
在cadvisor的job配置中添加规则:
- job_name: 'cadvisor' static_configs: - targets: ['localhost:8080'] metric_relabel_configs: - source_labels: [device] regex: '(.{1,200}).*' replacement: '$1' target_label: device
该规则会将device标签值截断为前200个字符,刚好符合默认限制。
4. 验证效果
修改后前往Prometheus Targets页面查看cadvisor采集状态,或查询container_fs_inodes_free指标,确认错误消失且标签值符合预期。
内容的提问来源于stack exchange,提问作者Putnik

