pet*_*e19 6 metrics docker prometheus
我们有一个Prometheus容器以及在自定义 Docker 网络metrics exporter中运行的各种其他服务和容器。
在我们的 Win 10 x64 本地开发环境中,Docker desktop一切正常,Prometheus容器可以抓取metrics exporter自定义网络中的容器以及Docker metrics从主机(Win 10)公开的容器。
在我们的 Ubuntu 18.04 Linux 主机上,最新的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
Run Code Online (Sandbox Code Playgroud)
docker 指标配置/etc/docker/daemon.json
{
"experimental": true,
"metrics-addr": "0.0.0.0:9933"
}
Run Code Online (Sandbox Code Playgroud)
配置在/prometheus.yml:
...
- job_name: 'docker_metrics'
metrics_path: /metrics
static_configs:
- targets: ['host.docker.internal:9933']
...
Run Code Online (Sandbox Code Playgroud)
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
...
Run Code Online (Sandbox Code Playgroud)
extra hosts我们在容器配置中指定via host.docker.internal: host-gateway,它将 Linux 主机的 IP 地址添加到容器的/etc/hosts文件中。
当我访问Prometheusathttps://<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
Run Code Online (Sandbox Code Playgroud)
wget在 Docker 指标端点上的容器内运行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
Run Code Online (Sandbox Code Playgroud)
Linux上的问题似乎是在自定义 Docker 网络Prometheus内无法访问主机。当我删除自定义网络并在 中设置服务时,可以抓取主机,但它无法再访问自定义网络内的其他容器。network_mode: hostPrometheusdocker-composePrometheusDocker metricsmetrics exporter
如何从metrics exporter容器(在自定义网络中)收集指标以及收集Docker metricsLinux 上的主机?
谢谢 !
弄清楚了:
在我们的例子中,UFW阻止Ubuntu来自docker0自定义 Docker 网络中的容器的接口请求。
172.17.0.1您可以通过检查 UFW 日志来查看这一点,您将看到它如何阻止指定指标端口上的 (--> host.docker.internal)请求。
暂时禁用 UFW 使其可以工作,Prometheus现在可以抓取主机上的 Docker 指标。
重新启用 UFW,然后...
(1) 为我的自定义 docker 网络提供自定义接口名称
networks:
my_nw:
driver: bridge
driver_opts:
com.docker.network.bridge.name: my_nw_if
Run Code Online (Sandbox Code Playgroud)
(2) 添加了 UFW 规则以允许度量端口的自定义网络接口上的流量解决了问题
sudo ufw allow in on <custom_interface_name> to any port <port>
现在,这允许Prometheus容器抓取该端口上主机上的指标。
感谢这里所有插话的人!
| 归档时间: |
|
| 查看次数: |
1600 次 |
| 最近记录: |