为了监视小型家庭服务器,我在docker上运行prometheus和node_exporter (以及grafana和其他一些东西)(类似于https://github.com/stefanprodan/dockprom)。我在一个桥接码头网络上运行普罗米修斯。对于node_exporter,我有两个选项,它们影响node_network_transmit_bytes_total度量。
node_network_transmit_bytes_total度量只有对接者的虚拟内部网卡,而不是被监控的盒子的物理网卡。这是脱离站点绑定-将/proc从主机加载到容器中的/host/proc中(具体来说,我的物理接口是eno0,在主机上的/proc/net/dev中可以看到):$ docker exec -it nodeexporter2 cat / host /proc/net/dev _ awk '{print $1} interface eth0: lo:localhost的意思是普罗米修斯
-主人的名字似乎很难找到?运行docker exec -it prometheus wget -O - http://actual-hostname:9100/metrics可以工作(并且使用主机的LAN,192.168.x.x),但是将actual-hostname:9100配置为prometheus目标会产生一个错误(Get "http://actual-hostname:9100/metrics": dial tcp 127.0.1.1:9100: connect: connection refused)。我不知道他们为什么要以不同的方式解决问题。
-我最后所做的是模仿host.docker.internal特性,将其添加到我的docker-compose.yml:- extra_hosts:-“host.docker.inside:172.18.0.1”中。
然而,这是非常脆弱的: 172.18只是最近的172.19;我相信它在重新启动或对接版本升级时发生了变化。我希望能够将extra_hosts设置为在主机上运行一些脚本来确定正确的网络名称的结果,但这不会在引导时自动重新运行。有什么建议吗?
发布于 2021-03-18 10:46:18
延迟编辑:多亏了托马斯,原来有一个神奇的主机host-gateway可以做到这一点,所以extra_hosts: ["host.docker.internal:host-gateway"]应该能做到这一点。没有文档,但显然它实现了这里。并且已经住在码头20.10.6号(可能更早)。
我最终通过手动配置网络来解决这个问题:
networks:
monitor-net:
driver: bridge
ipam:
driver: default
config:
- subnet: 172.23.0.0/16
ip_range: 172.23.5.0/24
gateway: 172.23.5.254
# ...
services:
nodeexporter:
network_mode: host
# ...
prometheus:
networks:
- monitor-net
extra_hosts:
- "host.docker.internal: 172.23.5.254"然后prometheus就有了host.docker.internal for node_exporter的目标,并且地址应该是稳定的。
https://stackoverflow.com/questions/66676204
复制相似问题