【问题标题】:context deadline extended - prometheus - while running on docker上下文截止日期延长 - prometheus - 在 docker 上运行时
【发布时间】:2018-06-22 20:57:51
【问题描述】:

我正在尝试在 Prometheus 上注册一个 Spring 微服务。两者都在 docker 上运行。我的服务在 Prometheus UI 中出现“超出上下文截止日期”。

有趣的是,当我尝试在新选项卡中打开“localhost:8081/metrics”时,它会显示指标。

这是我的 docker-compose.yml。这个问题似乎很常见,但我还没有遇到适合我的解决方案;还没有。

docker-compose.yml

version: '2.1'
networks:
   cadrs:
     ipam:
       config:
          - subnet: 172.28.0.0/16

services:
prometheus:
    image: prom/prometheus:0.18.0
    volumes:
        - ./prometheus.yml:/etc/prometheus/prometheus.yml
    command:
        - '-config.file=/etc/prometheus/prometheus.yml'
    ports:
        - '9090:9090'

demo:
    build: "C:/Users/hmt843/Downloads/demo"
    hostname: "demo"
    ports:
        - "8081:8081"
    networks:
       cadrs:
          ipv4_address: 172.28.1.2
node-exporter:
    image: prom/node-exporter:v0.15.0
    ports:
        - '9100:9100'

prometheus.yml

global:
  scrape_interval: 15s
  external_labels:
        monitor: 'my-monitor'

scrape_configs:
    - job_name: 'prometheus'
      target_groups:
          - targets: ['localhost:9090']
    - job_name: 'demo'
      tls_config:
        insecure_skip_verify: true
      target_groups:
          - targets: ['172.28.1.2:8081']
    - job_name: 'node-exporter'
      target_groups:
          - targets: ['node-exporter:9100']

【问题讨论】:

  • 抓取 node_exporter 是否有效?您是否确认“演示”容器的 IP 确实是 172.28.1.2 ?您有什么理由直接使用 IP 而不是“demo:8081”作为抓取目标?
  • 是的,节点导出器工作正常,IP 确实是 172.28.1.2。演示:8081 不起作用。有没有其他方法可以通过 docker 运行它?
  • 如果我使用“demo:8081”运行它,它会显示以下错误:Get demo:8081/metrics: dial tcp 10.4.73.24:8081: getsockopt: connection denied
  • 您能否确认 a) 演示应用程序已启动并在端口 8081 上运行并侦听所有接口(连接到演示容器并使用 netstat / curl)和 b) 您可以从通过 curl/wget 的 prometheus 容器?

标签: docker docker-compose prometheus


【解决方案1】:

通过在应用程序的服务中指定网络部分,容器被放置在名为cadrs 的单独 docker 网络中。您的 Prometheus 服务没有这样的网络定义,因此位于 default 网络中。容器必须位于至少一个公共网络中才能相互访问。即使将容器暴露在主机端口上也不会影响这一点(但您可以通过主机 ip 访问应用程序 - 不要这样做)。

如果您确实需要此网络配置,请通过将相同的网络部分添加到您的 Prometheus 服务来将 Prometheus 添加到同一网络,或者引入两个服务中都使用的另一个网络(例如monitoring)。或者,您也可以通过在应用的网络部分再添加一行来指定您的应用在默认网络中。

networks:
  cadrs:
    [...]
  default:

参考:https://docs.docker.com/compose/networking/#configure-the-default-network

通过此设置,您还可以将抓取配置修改回demo:8081。不管怎样,问问自己是否真的想自己使用管理容器地址...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-17
    • 1970-01-01
    • 1970-01-01
    • 2022-12-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多