docker 获取错误"获取http://localhost:9443/metrics:拨打传输控制协议127.0.0.1:9443:连接:连接被拒绝"

6l7fqoea  于 2023-03-07  发布在  Docker
关注(0)|答案(7)|浏览(440)

我尝试配置Prometheus和Grafana与我的Hyperledger结构v1.4网络,以分析对等体和链码元。我已经Map对等体容器的端口9443到我的主机的端口9443后,遵循此文档。我还更改了provider条目metrics节下的prometheuscore.yml的对等体。我'我已经在docker-compose.yml中以如下方式配置了prometheus和grafana。

prometheus:
    image: prom/prometheus:v2.6.1
    container_name: prometheus
    volumes:
    - ./prometheus/:/etc/prometheus/
    - prometheus_data:/prometheus
    command:
    - '--config.file=/etc/prometheus/prometheus.yml'
    - '--storage.tsdb.path=/prometheus'
    - '--web.console.libraries=/etc/prometheus/console_libraries'
    - '--web.console.templates=/etc/prometheus/consoles'
    - '--storage.tsdb.retention=200h'
    - '--web.enable-lifecycle'
    restart: unless-stopped
    ports:
    - 9090:9090
    networks:
    - basic
    labels:
    org.label-schema.group: "monitoring"

  grafana:
    image: grafana/grafana:5.4.3
    container_name: grafana
    volumes:
    - grafana_data:/var/lib/grafana
    - ./grafana/datasources:/etc/grafana/datasources
    - ./grafana/dashboards:/etc/grafana/dashboards
    - ./grafana/setup.sh:/setup.sh
    entrypoint: /setup.sh
    environment:
    - GF_SECURITY_ADMIN_USER={ADMIN_USER}
    - GF_SECURITY_ADMIN_PASSWORD={ADMIN_PASS}
    - GF_USERS_ALLOW_SIGN_UP=false
    restart: unless-stopped
    ports:
    - 3000:3000
    networks:
    - basic
    labels:
    org.label-schema.group: "monitoring"

当我在我的远程centos机器上运行curl 0.0.0.0:9443/metrics时,我得到了所有的指标列表,但是,当我在上面的配置下运行Prometheus时,它抛出了错误Get http://localhost:9443/metrics: dial tcp 127.0.0.1:9443: connect: connection refused,这就是我的prometheus.yml的样子。

global:
  scrape_interval:     15s
  evaluation_interval: 15s

scrape_configs:
  - job_name: 'prometheus'
    scrape_interval: 10s
    static_configs:
      - targets: ['localhost:9090']

  - job_name: 'peer_metrics'
    scrape_interval: 10s
    static_configs:
      - targets: ['localhost:9443']

甚至,当我在浏览器中转到端点http://localhost:9443/metrics时,我会得到所有的指标。我在这里做错了什么?为什么Prometheus指标会显示在它的界面上,而不是对等端的界面上?

izkcnapc

izkcnapc1#

由于目标不在prometheus容器内运行,因此无法通过localhost访问它们,您需要通过主机私有IP或通过将localhost替换为docker.for.mac.localhosthost.docker.internal来访问它们。

crcmnpdw

crcmnpdw2#

    • 问题**:在Prometheus上,您添加了一个用于抓取的服务,但在http://localhost:9090/targets上,端点状态为Down,并出现错误:

获取http://localhost:9091/metrics:拨打传输控制协议127.0.0.1:9091:连接:连接被拒绝

    • 溶液**:在prometheus.yml上,您需要验证

1.刮擦指向右端点的细节。

  1. yml缩进是正确的。
    1.使用curl -v http://<serviceip>:<port>/metrics应该在终端中以明文形式提示度量。
    • 注意**:如果您指向另一个Docker容器中的某个服务,则您的localhost可能不会表示为localhost,而是表示为servicenamedocker ps中显示的服务名称)或docker.host.internal(运行Docker容器的内部IP)。
    • 对于此示例:**我将使用2个dockers容器prometheus和"myService"。
sudo docker ps

CONTAINER ID        IMAGE                     CREATED                        PORTS                    NAMES
abc123        prom/prometheus:latest        2 hours ago               0.0.0.0:9090->9090/tcp         prometheus
def456        myService/myService:latest         2 hours ago               0.0.0.0:9091->9091/tcp         myService

然后编辑文件prometheus.yml(并重新运行prometheus)

- job_name: myService
  scrape_interval: 15s
  scrape_timeout: 10s
  metrics_path: /metrics
  static_configs:
    - targets: // Presenting you 3 options
      - localhost:9091 // simple localhost 
      - docker.host.internal:9091 // the localhost of agent that runs the docker container
      - myService:9091 // docker container name (worked in my case)
myss37ts

myss37ts3#

你的prometheus container没有运行在主机网络上。它运行在自己的桥上(由docker-compose创建的桥)。因此,对等体的scrape配置应该指向对等体container的IP。
建议的解决方法:

  • 在与fabric网络相同的网络中运行prometheus和grafana。在docker-compose for prometheus堆栈中,可以按如下方式引用它:
networks:
  default:
    external:
      name: <your-hyperledger-network>

(use docker network ls查找网络名称)
然后,您可以在scrape配置中使用http://<peer_container_name>:9443

nhhxz33t

nhhxz33t4#

此解决方案不适用于docker swarm。它适用于旨在运行在覆盖网络上的独立容器(多容器)。*
相同的错误,我们得到当使用覆盖网络,这里是解决方案(静态非动态)
此配置不起作用:

global:
  scrape_interval:     15s
  evaluation_interval: 15s

  external_labels:
    monitor: 'promswarm'

scrape_configs:
  - job_name: 'prometheus'
    static_configs:
      - targets: ['localhost:9090']

  - job_name: 'node'
    static_configs:
      - targets: [ 'localhost:9100' ]

即使http://docker.for.mac.localhost:9100/可用,但prometheus找不到node-exporter,这个也不起作用,所以下面这个也不起作用:

global:
  scrape_interval:     15s
  evaluation_interval: 15s

  external_labels:
    monitor: 'promswarm'

scrape_configs:
  - job_name: 'prometheus'
    static_configs:
      - targets: ['localhost:9090']

  - job_name: 'node'
    static_configs:
      - targets: [ 'docker.for.mac.localhost:9100'  ]

但是,只要使用它的容器ID,我们就可以通过它的端口号访问该服务。

docker ps
CONTAINER ID   IMAGE                    COMMAND                  CREATED          STATUS          PORTS                                       NAMES
a58264faa1a4   prom/prometheus          "/bin/prometheus --c…"   5 minutes ago    Up 5 minutes    0.0.0.0:9090->9090/tcp, :::9090->9090/tcp   unruffled_solomon
62310f56f64a   grafana/grafana:latest   "/run.sh"                42 minutes ago   Up 42 minutes   0.0.0.0:3000->3000/tcp, :::3000->3000/tcp   wonderful_goldberg
7f1da9796af3   prom/node-exporter       "/bin/node_exporter …"   48 minutes ago   Up 48 minutes   0.0.0.0:9100->9100/tcp, :::9100->9100/tcp   intelligent_panini

因此,我们有7f1da9796af3 prom/node-exporter ID,可以将yml文件更新为:

global:
  scrape_interval:     15s
  evaluation_interval: 15s

  external_labels:
    monitor: 'promswarm'

scrape_configs:
  - job_name: 'prometheus'
    static_configs:
      - targets: ['localhost:9090']

  - job_name: 'node'
    static_configs:
      - targets: [ '7f1da9796af3:9100'  ]

不工作

工作

更新

我自己对这种硬编码的解决方案并不满意,所以在其他一些搜索之后,找到了一种更可靠的方法,使用--network-alias NAME,在overlay网络中,该容器将通过该名称进行路由。

scrape_configs:
  - job_name: 'prometheus'
    static_configs:
      - targets: ['localhost:9090']

  - job_name: 'node'
    static_configs:
      - targets: [ 'node_exporter:9100' ]

其中名称node_exporter是使用run子命令创建的别名。例如

docker run --rm  -d  -v "/:/host:ro,rslave" --network cloud --network-alias node_exporter --pid host -p 9100:9100   prom/node-exporter  --path.rootfs=/host

简而言之,它说在覆盖网络上,你可以使用node_exporter:<PORT>到达节点导出器。

f3temu5u

f3temu5u5#

好吧,我记得我通过下载普罗米修斯节点导出器的Windows解决了这个问题.
查看此链接https://medium.com/@facundofarias/setting-up-a-prometheus-exporter-on-windows-b3e45f1235a5

vpfxa7rd

vpfxa7rd6#

  • 如果您指向另一个Docker容器中的某个服务,您的localhost可能不会表示为localhost,而是表示为servicename(docker ps中显示的服务名称)或运行Docker容器的内部IP *。
    • 普罗米修斯. yml**
  • 作业名称:"节点导出器"

静态配置:

  • 目标:["节点导出器:9100" ]//码头集装箱名称
z8dt9xmd

z8dt9xmd7#

我意识到我得到这个错误是因为Kubeprostack pod(如AKS中的prometheus)也在运行。当我将AKS的“部署”和“守护进程集”部分中与Kubeprostack相关的pod缩小到1时,问题解决了,我能够成功连接到Grafana Prometheus。因为prometheus和Kubeprostack都在尝试工作。当只剩下prometheus pod时,问题解决了。
Post-procedure status image

相关问题