我们有一个Prometheus容器以及各种其他服务和metrics exporter容器,它们运行在自定义码头网络中。
在Win 10 x64上的本地开发环境中,使用Docker desktop everything可以正常工作,Prometheus容器可以刮除自定义网络中的metrics exporter容器以及主机中公开的Docker metrics (Win 10)。
在我们的Ubuntu18.04Linux主机上,最新的Prometheus 2.30.3容器将自定义网络中的度量导出容器擦拭得很好,但无法从主机中刮取公开的Docker metrics。
这些是Ubuntu主机的规范和配置:
OS: Ubuntu 18.04.1 LTS
Prometheus: 2.30.3 (latest)
Docker: 20.10.10 (latest, allows to add extra hosts to container, see below)
Docker-compose: 2.0.1/etc/docker/daemon.json中的docker度量配置
{
"experimental": true,
"metrics-addr": "0.0.0.0:9933"
}/prometheus.yml中的配置
...
- job_name: 'docker_metrics'
metrics_path: /metrics
static_configs:
- targets: ['host.docker.internal:9933']
...Prometheus容器的docker-compose配置:
...
prometheus:
container_name: prom_test
image: prom/prometheus:v2.30.3
restart: unless-stopped
command: "--config.file=/etc/prometheus/prometheus.yml
--storage.tsdb.path=/prometheus
--storage.tsdb.retention.time=45d"
ports:
- 9090:9090
volumes:
- ./data/prometheus:/prometheus
- ./config/prometheus.yml:/etc/prometheus/prometheus.yml:ro
extra_hosts:
host.docker.internal: host-gateway
networks:
- test-network
...我们通过extra hosts在容器配置中指定host.docker.internal: host-gateway,后者将Linux主机的IP地址添加到容器的/etc/hosts文件中。
当我访问Prometheus at https://<my_ip>:9090/targets来检查刮伤目标的状态时,Prometheus最终声明:

但是,单击刮取目标端点块中提供的http://host.docker.internal:9933/metrics链接实际上列出了Docker度量标准

跳入正在运行的Prometheus容器并在容器内执行cat /etc/hosts显示,正确添加了extra host。
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.17.0.1 host.docker.internal
172.22.0.2 fa87b35d3923在Docker度量端点上的wget容器中运行Prometheus将导致超时:
/prometheus $ wget host.docker.internal:9933/metrics
Connecting to host.docker.internal:9933 (172.17.0.1:9933)
wget: can't connect to remote host (172.17.0.1): Connection timed out问题--在Linux上--似乎是Prometheus在自定义Docker网络中无法访问主机。当我移除自定义网络并在network_mode: host中设置Prometheus服务时,Prometheus可以刮除主机Docker metrics,但它不能再访问自定义网络中的其他metrics exporter容器。
如何从metrics exporter容器(自定义网络中)收集度量,以及如何在Linux上收集主机Docker metrics?
谢谢!
发布于 2021-11-10 05:11:36
明白了这一点:
在我们的示例中,UFW on Ubuntu阻止了来自自定义停靠网络中的容器的docker0接口请求。
通过检查UFW日志可以看到这一点,您将看到它如何在指定的度量端口上阻止对172.17.0.1 (-> host.docker.internal)的请求。
禁用UFW暂时使其正常工作,Prometheus现在可以在主机上刮取Docker指标。
重新启用UFW,那么.
(1)给我的自定义码头网络提供了一个自定义接口名。
networks:
my_nw:
driver: bridge
driver_opts:
com.docker.network.bridge.name: my_nw_if(2)添加了UFW规则以允许自定义网络接口上用于度量端口的通信量解决了问题sudo ufw allow in on <custom_interface_name> to any port <port>。
这现在允许Prometheus容器在该端口上的主机上刮取度量标准。
感谢在座的每一个参与的人!
https://stackoverflow.com/questions/69774115
复制相似问题