【发布时间】:2021-06-14 23:24:08
【问题描述】:
为了监控小型家庭服务器,我在 docker(类似于 https://github.com/stefanprodan/dockprom)上运行 prometheus 和 node_exporter(以及 grafana 和其他一些东西)。我在桥接的 docker 网络上运行 prometheus。对于 node_exporter,我有两个选项,它们会影响 node_network_transmit_bytes_total 指标。
- 使用与 prometheus 相同的桥接 docker 网络
- 专业版:nodeexporter 可以通过名称直接寻址,这要归功于 docker 的内部 DNS
- Con:
node_network_transmit_bytes_total指标只有 docker 的虚拟内部 NIC,而不是被监控机器的物理 NIC。这是从主机绑定安装/proc到容器中的/host/proc(特别是我的物理接口是eno0,在主机上的/proc/net/dev中可见):$ docker exec -it nodeexporter2 cat /host/proc/net/dev | awk '{print $1}' Inter-| face eth0: lo:
- 对 nodeexporter 使用主机模式网络
- 专业版:所有 NIC,包括物理主机 NIC,都是可见的
- Con:prometheus 似乎没有一种干净的方式来处理 nodeexporter:
-
localhost表示普罗米修斯本身 - 主机的主机名似乎无法访问?运行
docker exec -it prometheus wget -O - http://actual-hostname:9100/metrics有效(并使用我主机的 LAN IP,192.168.x.x),但将actual-hostname:9100配置为 prometheus 目标会产生错误(Get "http://actual-hostname:9100/metrics": dial tcp 127.0.1.1:9100: connect: connection refused)。我不确定为什么他们的解决方式不同。 - 我最终做的是模拟可用于 docker-on-windows 和 docker-on-mac 的
host.docker.internal功能,将其添加到我的docker-compose.yml:
然而,这非常脆弱:那个 172.18 只是最近的 172.19;我相信它在重新启动或 docker 版本升级时发生了变化。我希望能够将extra_hosts: - "host.docker.internal:172.18.0.1"extra_hosts设置为在主机上运行一些脚本以确定正确的网络名称的结果,但这不会在启动时自动重新运行。
-
有什么建议吗?
【问题讨论】:
标签: docker docker-compose prometheus prometheus-node-exporter