如何配置Prometheus动态发现10.100.0.x网段Docker容器监控目标
Prometheus 自动发现10.100.0.x网段Docker容器监控目标方案
针对同网段Docker容器自动纳管的需求,不用手动维护静态IP列表,以下两种方案都可以直接落地:
方案一:Docker原生服务发现(首选,零额外开发)
直接利用Prometheus内置的Docker服务发现能力对接Docker daemon,实时感知容器的创建、销毁,自动同步监控目标,不需要额外写脚本。
- 启动Prometheus时,以只读权限挂载Docker套接字,让Prometheus能读取容器状态:启动命令追加参数
-v /var/run/docker.sock:/var/run/docker.sock:ro - 替换原有的静态配置为如下内容,自动过滤10.100.0.x网段的运行中容器:
- job_name: "bla" docker_sd_configs: - host: unix:///var/run/docker.sock filters: - name: status values: ["running"] relabel_configs: # 过滤出IP属于10.100.0.x段的容器 - source_labels: [__meta_docker_network_ip] regex: '10\.100\.0\.[0-9]+' action: keep # 将匹配到的容器IP拼接上实际监控端口,替换为目标访问地址 - source_labels: [__meta_docker_network_ip] target_label: __address__ replacement: '$1:替换成你实际的监控端口' # 比如监控端口是9100就填9100
配置完成后校验配置正确性,热加载Prometheus即可生效,后续新增、删除该网段的容器都会自动加入/移出监控列表,不需要手动修改配置文件。
方案二:基于文件的自动发现(适用于不想挂载Docker套接字的安全合规场景)
如果出于安全考虑不希望Prometheus直接访问Docker套接字,可以用文件发现的方式实现自动更新:
- 写一个简单的定时执行脚本,定期扫描10.100.0.0/24网段开放了对应监控端口的存活IP,输出为Prometheus支持的目标JSON文件,格式示例:
[ { "targets": ["10.100.0.1:9100", "10.100.0.2:9100"], "labels": { "group": "docker-containers" } } ]
脚本可以用nmap、ping扫描等方式实现,执行频率按需设置,比如1分钟执行一次,覆盖写入固定路径的JSON文件即可。
- 在prometheus.yml中配置文件发现规则:
- job_name: "bla" file_sd_configs: - files: - '/etc/prometheus/dynamic_targets/*.json' refresh_interval: 30s
Prometheus会按设置的间隔自动读取文件内容更新监控目标,不需要重启服务。
注意:配置完成后可以先执行
promtool check config /path/to/prometheus.yml校验配置格式是否正确,避免配置错误导致Prometheus加载失败。
内容的提问来源于stack exchange,提问作者Mor
相关产品推荐
相关产品推荐

