首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法在自定义网络中(在Linux主机上)从Prometheus容器中刮取暴露的Docker度量

无法在自定义网络中(在Linux主机上)从Prometheus容器中刮取暴露的Docker度量
EN

Stack Overflow用户
提问于 2021-10-29 19:52:15
回答 1查看 679关注 0票数 6

我们有一个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主机的规范和配置:

代码语言:javascript
复制
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度量配置

代码语言:javascript
复制
{
  "experimental": true,
  "metrics-addr": "0.0.0.0:9933"
}

/prometheus.yml中的配置

代码语言:javascript
复制
...
 - job_name: 'docker_metrics'
    metrics_path: /metrics
    static_configs:
      - targets: ['host.docker.internal:9933']
...

Prometheus容器的docker-compose配置:

代码语言:javascript
复制
...

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

代码语言:javascript
复制
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将导致超时:

代码语言:javascript
复制
/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

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-10 05:11:36

明白了这一点:

在我们的示例中,UFW on Ubuntu阻止了来自自定义停靠网络中的容器的docker0接口请求。

通过检查UFW日志可以看到这一点,您将看到它如何在指定的度量端口上阻止对172.17.0.1 (-> host.docker.internal)的请求。

禁用UFW暂时使其正常工作,Prometheus现在可以在主机上刮取Docker指标。

重新启用UFW,那么.

(1)给我的自定义码头网络提供了一个自定义接口名。

代码语言:javascript
复制
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容器在该端口上的主机上刮取度量标准。

感谢在座的每一个参与的人!

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69774115

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档