Docker Swarm - Prometheus 无法访问 Cadvisor:拨打 tcp 10.0.0.50:8090:连接:连接被拒绝
Docker Swarm - Prometheus cannot access Cadvisor: dial tcp 10.0.0.50:8090: connect: connection refused
在我的 Windows 10 Pro 上,我有一个完整的 Docker Swarm 环境。 Docker Swarm 堆栈的一部分是 Prometheus 和 cAdvisor。我将逐步构建监控工具,然后将监控部署到云解决方案。
在 Docker Swarm 堆栈中我可以 运行 Prometheus 和 CAdvisor,但是 Prometheus 无法连接到 cAdvisor。
我收到消息:
Get http://cadvisor:8090/metrics: dial tcp 10.0.0.50:8090: connect:
connection refused
如何让 Prometheus 访问 cadvisor?
在我的浏览器中,我可以执行 'localhost:8090/metrics' 并获取所有指标。所以,cAdvisor 运行s 是肯定的。
我有一个创建网络的堆栈文件 (devhome_default)。在我的第二个堆栈中,我指的是这个网络。
UPDATE:解决这个问题的一种方法是使用 IP 地址:$ ipconfig
在我的 prometheus.config 中使用该地址效果很好。但这使得目标硬连线并且不可维护。
堆栈/dockercompose 文件是:
version: '3'
services:
cadvisor:
image: google/cadvisor
networks:
- geosolutionsnet
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- /:/rootfs
- /var/run:/var/run
- /sys:/sys
- /var/lib/docker/:/var/lib/docker
ports:
- 8090:8080
deploy:
mode: global
resources:
limits:
cpus: '0.10'
memory: 128M
reservations:
cpus: '0.10'
memory: 64M
prometheus:
image: prom/prometheus:v2.8.0
ports:
- "9090:9090"
networks:
- geosolutionsnet
volumes:
- //k/data/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml
deploy:
mode: replicated
replicas: 1
networks:
geosolutionsnet:
external:
name: devhome_default
普罗米修斯配置文件是:
global:
scrape_interval: 15s
evaluation_interval: 15s
rule_files:
#- "alert.rules_nodes"
#- "alert.rules_tasks"
#- "alert.rules_service-groups"
scrape_configs:
- job_name: 'prometheus'
dns_sd_configs:
- names:
- 'tasks.prometheus'
type: 'A'
port: 9090
- job_name: 'cadvisor'
static_configs:
- targets: ['cadvisor:8090']
labels:
alias: "cadvisor"
或者,我也尝试了 cAdvisor:
- job_name: 'cadvisor'
dns_sd_configs:
- names:
- 'tasks.cadvisor'
type: 'A'
port: 8090
还有:
- job_name: 'cadvisor'
static_configs:
- targets: ['localhost:8090']
在不同的云环境中,下面的 'dns' 解决方案非常有效。因为 'real' 云环境是我们 Docker 容器的目标环境,所以标准 'de facto' 解决方案就足够了。
因此,这在云环境中运行良好:
- job_name: 'cadvisor'
dns_sd_configs:
- names:
- 'tasks.cadvisor'
type: 'A'
port: 8090
在我的 Windows 10 Pro 上,我有一个完整的 Docker Swarm 环境。 Docker Swarm 堆栈的一部分是 Prometheus 和 cAdvisor。我将逐步构建监控工具,然后将监控部署到云解决方案。
在 Docker Swarm 堆栈中我可以 运行 Prometheus 和 CAdvisor,但是 Prometheus 无法连接到 cAdvisor。 我收到消息:
Get http://cadvisor:8090/metrics: dial tcp 10.0.0.50:8090: connect: connection refused
如何让 Prometheus 访问 cadvisor?
在我的浏览器中,我可以执行 'localhost:8090/metrics' 并获取所有指标。所以,cAdvisor 运行s 是肯定的。
我有一个创建网络的堆栈文件 (devhome_default)。在我的第二个堆栈中,我指的是这个网络。
UPDATE:解决这个问题的一种方法是使用 IP 地址:$ ipconfig 在我的 prometheus.config 中使用该地址效果很好。但这使得目标硬连线并且不可维护。
堆栈/dockercompose 文件是:
version: '3'
services:
cadvisor:
image: google/cadvisor
networks:
- geosolutionsnet
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- /:/rootfs
- /var/run:/var/run
- /sys:/sys
- /var/lib/docker/:/var/lib/docker
ports:
- 8090:8080
deploy:
mode: global
resources:
limits:
cpus: '0.10'
memory: 128M
reservations:
cpus: '0.10'
memory: 64M
prometheus:
image: prom/prometheus:v2.8.0
ports:
- "9090:9090"
networks:
- geosolutionsnet
volumes:
- //k/data/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml
deploy:
mode: replicated
replicas: 1
networks:
geosolutionsnet:
external:
name: devhome_default
普罗米修斯配置文件是:
global:
scrape_interval: 15s
evaluation_interval: 15s
rule_files:
#- "alert.rules_nodes"
#- "alert.rules_tasks"
#- "alert.rules_service-groups"
scrape_configs:
- job_name: 'prometheus'
dns_sd_configs:
- names:
- 'tasks.prometheus'
type: 'A'
port: 9090
- job_name: 'cadvisor'
static_configs:
- targets: ['cadvisor:8090']
labels:
alias: "cadvisor"
或者,我也尝试了 cAdvisor:
- job_name: 'cadvisor'
dns_sd_configs:
- names:
- 'tasks.cadvisor'
type: 'A'
port: 8090
还有:
- job_name: 'cadvisor'
static_configs:
- targets: ['localhost:8090']
在不同的云环境中,下面的 'dns' 解决方案非常有效。因为 'real' 云环境是我们 Docker 容器的目标环境,所以标准 'de facto' 解决方案就足够了。
因此,这在云环境中运行良好:
- job_name: 'cadvisor'
dns_sd_configs:
- names:
- 'tasks.cadvisor'
type: 'A'
port: 8090