node_exporter
监控,但端口不想暴露在公网(开启 ufw),如果想让prometheus
容器访问宿主机localhost:9100
应该怎么做prometheus
容器的 docker 初始化代码:
docker run -d -p 127.0.0.1:9090:9090 \ # 不暴露在公网不能改
-v /storage/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml \
--restart=always \
--name=prometheus \
--net=prometheus-bridge \ # 不能改, 因为有很多容器都在这个网桥内
--ip 172.18.0.2 \ # 不能改
prom/prometheus
这个是node_exporter
的代码,本来也加上了prometheus-bridge
, 但这样就无法监控宿主机网络流量了
如果想监控宿主机网络流量必须使用network_mode:host
但是 host
无法与bridge
一起用(默认端口0.0.0.0:9100
)
version: '3.8'
services:
node_exporter:
image: quay.io/prometheus/node-exporter:latest
container_name: node_exporter
command:
- '--path.rootfs=/host'
network_mode: host
pid: host
restart: unless-stopped
volumes:
- '/:/host:ro,rslave'
/storage/prometheus/prometheus.yml
这是当前的配置文件,不想把node_exporter
暴露在公网
使用了ufw enable
防止外部访问
- job_name: node-exporter
static_configs:
- targets: ['公网 IP:9100'] # 这个是当前的配置文件用的公网,想改成内网访问
尝试过使用host.docker.internal:9100
但是开了防火墙后无法访问?
不知道有没有什么好的解决方案?
1
Navee 169 天前 via Android
node-exporter 的话
要么暴露公网+防火墙规则限制 要么暴露公网+basic auth |
2
ixiaohei 169 天前
你说的公网是指互联网么?
|
3
shelken 169 天前
进去你的 prometheus 容器看看 host.docker.internal 实际的请求 ip ,然后 ufw 对这个 ip 开放
|
4
wheat0r 169 天前
能确定在不开防火墙情况下 host.docker.internal:9100 可以访问吗?
|
5
Etuloser 169 天前 2
host.docker.internal 是可以的 你是不是配置错了
容器内部要想使用宿主机的服务器,可以使用 host.docker.internal:host-gateway 映射的方式来解决: 1. 命令行启动 --add-host=host.docker.internal:host-gateway 2. compose file (注意,在 build 时不支持) extra_hosts: - "host.docker.internal:host-gateway" 3. 在容器内可以通过 host.docker.internal 来访问宿主机的 127.0.0.1 |
6
LoliconInside 169 天前
Prometheus 和 Node Exporter 都开--net-host
Prometheus 和 Node Exporter 配置中指定都监听 127.0.0.1 Prometheus 通过 127.0.0.1 访问 NodeExporter |
7
lovelylain 169 天前
不要映射到 127.0.0.1 ,映射到 docker0 的 ip 地址。
|
8
fmd12345 169 天前
直接访问 172.18.0.1:9100 不行吗?你的 network_mode 都是 host 了,理论上就是 0.0.0.0 的监听吧?那 172.18.0.1 不就是宿主机 ip 了吗?反正看你的 prometheus-bridge 也是固定的
|
9
ztfot OP 问题依然还在
![]( https://media.kivvi.me:443/media/202405201108150.png) 关闭防火墙后就可以使用??? ![]( https://media.kivvi.me:443/media/202405201116866.png) 有没有更好的解决方案? 或者我哪里配置错了? prometheus 配置: ``` docker run -d -p 127.0.0.1:9090:9090 \ -v /storage/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml \ --add-host=host.docker.internal:host-gateway \ --restart=always \ --name=prometheus \ --net=prometheus-bridge \ --ip 172.18.0.2 \ prom/prometheus ``` node_exporter 配置: ``` version: '3.8' services: node_exporter: image: quay.io/prometheus/node-exporter:latest container_name: node_exporter command: - '--path.rootfs=/host' network_mode: host pid: host restart: unless-stopped volumes: - '/:/host:ro,rslave' ``` 网桥信息: ``` root@it7:~# docker inspect prometheus-bridge [ { "Name": "prometheus-bridge", "Id": "9db3ba11ccefb523a85ef3713777c780c49f0bf64f6065dd7bbd0d77d45da612", "Created": "2024-05-17T15:56:49.735352162+08:00", "Scope": "local", "Driver": "bridge", "EnableIPv6": false, "IPAM": { "Driver": "default", "Options": {}, "Config": [ { "Subnet": "172.18.0.0/24", "Gateway": "172.18.0.1" } ] }, "Internal": false, "Attachable": false, "Ingress": false, "ConfigFrom": { "Network": "" }, "ConfigOnly": false, "Containers": { "028e10760ce3a47680d4b9b0c7bce38ecfb7e8588be860d5523ab93dcbc8b5ae": { "Name": "prometheus", "EndpointID": "c5675e399cf1e0fe1e843a9995e31836ab21de23db25c8bfdd54ba9197d28405", "MacAddress": "02:42:ac:12:00:02", "IPv4Address": "172.18.0.2/24", "IPv6Address": "" }, "29b6830a07165ac45fb176e48a14b4b31e4f1925c9b580c4528c836a5978dd3c": { "Name": "xxx", "EndpointID": "52acddb87f3515af70c39d38784dbef7dd0506ce94881410cddfdbdea04bb6f5", "MacAddress": "02:42:ac:12:00:04", "IPv4Address": "172.18.0.4/24", "IPv6Address": "" }, "70edf1712821c9efd62dbb57f15f78329923409ac874157bc07b547535062478": { "Name": "xxx", "EndpointID": "dd32442417a928a22477c587dc9cecebb6162ee1b93b748310e57109f341ebca", "MacAddress": "02:42:ac:12:00:03", "IPv4Address": "172.18.0.3/24", "IPv6Address": "" }, "eddd3efc96103784a7a5e961b988d56503131eefdd934657532441edf75b15d7": { "Name": "xxx", "EndpointID": "255eb88cb2e8706383f4aabc4d7be8de7cc9916929ddb71480b541d4c4399a5e", "MacAddress": "02:42:ac:12:00:05", "IPv4Address": "172.18.0.5/24", "IPv6Address": "" } }, "Options": {}, "Labels": {} } ] ``` docker 版本: ``` root@it7:~# docker version Client: Docker Engine - Community Version: 26.1.3 API version: 1.45 Go version: go1.21.10 Git commit: b72abbb Built: Thu May 16 08:33:29 2024 OS/Arch: linux/amd64 Context: default Server: Docker Engine - Community Engine: Version: 26.1.3 API version: 1.45 (minimum version 1.24) Go version: go1.21.10 Git commit: 8e96db1 Built: Thu May 16 08:33:29 2024 OS/Arch: linux/amd64 Experimental: false containerd: Version: 1.6.31 GitCommit: e377cd56a71523140ca6ae87e30244719194a521 runc: Version: 1.1.12 GitCommit: v1.1.12-0-g51d5e94 docker-init: Version: 0.19.0 GitCommit: de40ad0 root@it7:~# ``` @Etuloser @fmd12345 @LoliconInside 普罗米修斯已经设置网桥很多东西都连在上面,设 host 会冲突 |
10
ztfot OP |
11
fmd12345 169 天前 1
懂了,你 ufw 允许一下内网 ip 呢? ufw allow from xx.xx.xx.xx to any port 22
|
12
cm98 169 天前
了解下 pushgateway ?
|
13
wheeler 169 天前 via iPhone
unix domain socket 转一下?
|
15
KINGWAY 156 天前
@Etuloser #5 请问下, 这个--add-host=host.docker.internal:host-gateway
中的 host-gateway 是宿主机的 ip, 还是这个容器网络的网关 ip? 还是说直接就是 --add-host=host.docker.internal:host-gateway |
16
KINGWAY 156 天前
https://github.com/qoomon/docker-host 推荐下这个,可以转发所有或指定的 docker 的流量, 我也面对你这个问题, 折腾了很久.
|