Docker Swarm - Прометей не может получить доступ к Cadvisor: набрать tcp 10.0.0.50:8090: подключиться: соединение отклонено - PullRequest
0 голосов
/ 05 октября 2019

На моем 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: соединение отклонено

Как получить Prometheus access cadvisor?

В своем браузере я могу выполнить «localhost: 8090 / metrics» и получить все метрики. Итак, cAdvisor работает точно.

У меня есть один файл стека, который создает сеть (devhome_default). Во втором моем стеке я имею в виду эту сеть.

ОБНОВЛЕНИЕ : один из способов решить эту проблему - использовать 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

Файл конфигурации Prometheus:

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']

1 Ответ

0 голосов
/ 30 октября 2019

В различных облачных средах приведенное ниже решение «dns» работает как шарм. Поскольку «реальная» облачная среда является целевой средой для наших контейнеров Docker, стандартного «фактического» решения вполне достаточно.

Итак, это хорошо работает в облачных средах:

- job_name: 'cadvisor'
  dns_sd_configs:
  - names:
    - 'tasks.cadvisor'
    type: 'A'
    port: 8090
...