使用Prometheus与cadvisor仅采集部分容器指标的方法咨询
我之前也碰到过完全一样的问题!在CoreOS上用cadvisor给Prometheus采集Docker容器指标时,默认会拉取大量用不上的指标,不仅占用存储资源,还会拖慢采集效率。官方文档里确实没把这个点讲得太清楚,不过有两种亲测有效的方法可以实现仅采集指定指标:
方法一:通过cadvisor启动参数过滤指标
cadvisor本身支持通过--whitelisted_metrics参数来指定要保留的指标类别,这样它一开始就不会输出那些非必需的指标,从源头减少采集量。
比如你只想保留CPU、内存、磁盘和网络相关的指标,启动cadvisor的命令可以写成这样:
docker run \ --volume=/:/rootfs:ro \ --volume=/var/run:/var/run:rw \ --volume=/sys:/sys:ro \ --volume=/var/lib/docker/:/var/lib/docker:ro \ --publish=8080:8080 \ --detach=true \ --name=cadvisor \ gcr.io/cadvisor/cadvisor:latest \ --whitelisted_metrics=cpu,memory,diskio,diskusage,network
可选的指标类别包括:cpu、memory、diskio、diskusage、network、hugetlb、percpu、sched、temperatures等,你可以根据自己的监控需求组合这些值,用逗号分隔即可。
方法二:在Prometheus端配置指标过滤(更灵活)
如果不想重启cadvisor,或者需要更精细的指标筛选(比如只保留某几个具体指标而不是整个类别),可以直接在Prometheus的配置文件里通过metric_relabel_configs来过滤。
举个例子,假设你只想保留容器CPU使用率、内存使用量、磁盘使用量和网络接收量这几个指标,修改prometheus.yml的scrape_configs部分如下:
scrape_configs: - job_name: 'cadvisor' static_configs: - targets: ['你的cadvisor地址:8080'] metric_relabel_configs: - source_labels: [__name__] # 这里写你要保留的指标名称,用竖线分隔 regex: 'container_cpu_usage_seconds_total|container_memory_usage_bytes|container_fs_usage_bytes|container_network_receive_bytes_total' action: keep
如果是想排除某些特定指标,只需要把action改成drop,然后在regex里写要排除的指标正则即可。
小提示
如果不确定哪些指标是你需要的,可以先访问cadvisor的metrics端点(http://你的cadvisor地址:8080/metrics),把所有指标列出来,再挑选自己需要的写入过滤规则里。
内容的提问来源于stack exchange,提问作者MIDE11

