You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.01 01:18:21