[英]Docker Get http://localhost:8091/api/order: dial tcp 127.0.0.1:8091: connect: connection refused
[英]Getting error "Get http://localhost:9443/metrics: dial tcp 127.0.0.1:9443: connect: connection refused"
我正在嘗試使用我的 Hyperledger fabric v1.4.network 配置 Prometheus 和 Grafana 以分析對等點和鏈碼 mertics。 在遵循此文檔后,我已將對等容器的端口9443
映射到主機的端口9443
。 我還在 peer 的core.yml
的metrics
部分下將provider
條目更改為prometheus
。 我已經通過以下方式在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"
當我curl 0.0.0.0:9443/metrics
在我的遠程 centos 機器上時,我得到了所有指標列表。 但是,當我使用上述配置運行 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']
甚至,當我在瀏覽器中使用 go 訪問端點http://localhost:9443/metrics
時,我得到了所有指標。 我在這里做錯了什么。 為什么 Prometheus 指標顯示在其界面上而不是同行的?
由於目標不在 prometheus 容器內運行,因此無法通過 localhost 訪問它們。 您需要通過主機私有 IP 或將localhost
替換為docker.for.mac.localhost
或host.docker.internal
來訪問它們。
您的 prometheus 容器未在主機網絡上運行。 它在自己的橋(由 docker-compose 創建的橋)上運行。 因此,peer 的抓取配置應該指向 peer 容器的 IP。
推薦的解決方法:
networks:
default:
external:
name: <your-hyperledger-network>
(使用docker network ls
查找網絡名稱)
然后你可以在你的抓取配置中使用http://<peer_container_name>:9443
問題:在 Prometheus 上,您添加了用於抓取的服務,但在http://localhost:9090/targets
,端點狀態為Down並出現錯誤:
獲取 http://localhost:9091/metrics: dial tcp 127.0.0.1:9091: connect: connection denied
解決方案:在prometheus.yml
您需要驗證
curl -v http://<serviceip>:<port>/metrics
應該會在終端中以明文形式提示指標。 注意:如果您指向另一個 docker 容器中的某個服務,則您的 localhost 可能不會表示為 localhost,而是表示為servicename
(在docker.host.internal
docker ps
中顯示的服務名稱)或docker.host.internal
(運行docker.host.internal
容器的內部 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)
好吧,我記得我通過下載適用於 Windows 的 Prometheus 節點導出器解決了這個問題。
查看此鏈接https://medium.com/@facundofarias/setting-up-a-prometheus-exporter-on-windows-b3e45f1235a5
我們在使用覆蓋網絡時遇到相同的錯誤,這是解決方案(靜態而非動態)
此配置不起作用:
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' ]
如果您指向另一個 docker 容器中的某些服務,則您的本地主機可能不會表示為本地主機,而是表示為服務名稱(服務名稱顯示在 docker ps 中)或運行 docker 容器的內部 ip 。
普羅米修斯.yml
job_name:“節點出口商”
靜態配置:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.