docker-compose: zipkin не может подключиться к elasticsearch

Я пытаюсь настроить zipkin, elasticsearch, prometheus и grafana с помощью docker-compose.yml. Когда я запускаю докеры, вижу в журнале:

dependencies_zipkin | 19/09/30 14:37:09 ОШИБКА NetworkClient: Ошибка узла [172.28.0.2:9200] (java.net.ConnectException: соединение отклонено (соединение отклонено)); других узлов не осталось - прерывание ...

Я использую MacOS X с докером 2.1.0.3

содержимое моего docker-compose.yml таково:

version: '3.7'
services:
  storage:
    image: openzipkin/zipkin-elasticsearch7
    container_name: elasticsearch
    ports:
      - "9200:9200"
    environment:
      - "xpack.security.enabled=false"
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    restart: unless-stopped
  prometheus:
    image: prom/prometheus:latest
    container_name: prometheus
    volumes:
      - $PWD/prometheus:/etc/prometheus/
      - /tmp/prometheus:/prometheus/data:rw
    command:
      - '--config.file=/etc/prometheus/prometheus.yml'
      - '--storage.tsdb.path=/prometheus'
      - '--web.console.libraries=/usr/share/prometheus/console_libraries'
      - '--web.console.templates=/usr/share/prometheus/consoles'
    ports:
      - "9090:9090"
    restart: unless-stopped
  zipkin:
    image: openzipkin/zipkin
    container_name: zipkin
    depends_on: 
      - dependencies
      - storage
    environment: 
      - "STORAGE_TYPE=elasticsearch"
      - "ES_HOSTS=storage"
    ports:
      - "9411:9411"
    restart: unless-stopped
  grafana:
    image: grafana/grafana
    container_name: grafana
    ports:
      - "3000:3000"
    restart: unless-stopped
  dependencies:
    image: openzipkin/zipkin-dependencies
    container_name: dependencies_zipkin
    depends_on: 
      - storage
    environment:
      - "STORAGE_TYPE=elasticsearch"
      - "ES_HOSTS=storage"

Когда я подключаюсь к localhost: 9200, я вижу, что elasticsearch работает нормально, а на порту 9411 развернут zipkin, но у меня есть ошибка:

ОШИБКА: невозможно загрузить имена служб: ошибка сервера (служба недоступна) (из-за сетевой ошибки

В журнале есть такая информация:

105 ^ [[35mdependencies_zipkin | ^ [[0m 19/09/30 14:45:20 ERROR NetworkClient: Узел [172.28.0.2:9200] не удалось] (java.net.ConnectException: соединение отклонено (соединение отклонено)); других узлов не осталось - прерывание ...

и этот

^ [[31mzipkin | ^ [[0m java.lang.IllegalStateException: не удалось подключиться ни к одной из [конечной точки {хранилище: 80, ipAddr = 172.28.0.2, вес = 1000}]

Любая идея?

ОБНОВЛЕНИЕ с использованием mysql работает нормально, поэтому проблема находится на уровне эластичного поиска. Я пробовал также, используя

"STORAGE_PORT_9200_TCP_ADDR = 127.0.0.1"

но проблема все еще возникает.

ОБНОВЛЕНИЕ Как упоминалось, решение, данное Брайаном, я должен использовать:

ES_HOSTS = http://storage:9300

ключ находится на порту, я использовал порт 9200

Ошибка исчезает между zipkin и es, но все еще возникает между es и zipkin-зависимостями.


person Jon Leb    schedule 30.09.2019    source источник


Ответы (2)


Проблема заключается в вашей переменной ES_HOSTS из документов http://localhost:9200".

Итак, вам понадобится: ES_HOSTS=http://storage:9200

person Brian Devins-Suresh    schedule 30.09.2019
comment
Привет. storage - это имя службы, и я где-то читал в документации, что вы можете использовать имя службы вместо URL-адреса (хранилище - это имя службы, а не хоста). Я попробовал localhost: 9200, 127.0.0.1:9200, но я все равно получаю сообщение об ошибке: dependencies_zipkin | 19/09/30 18:46:21 ОШИБКА NetworkClient: Ошибка узла [127.0.0.1:9200] (java.net.ConnectException: соединение отклонено (соединение отклонено)) ;. Но спасибо за вашу помощь - person Jon Leb; 30.09.2019
comment
Прошу прощения, вы полностью правы, но моя ошибка заключалась в использовании неправильного http.port. решение: ES_HOSTS = хранилище: 9300, а не 9200. Большое спасибо - person Jon Leb; 01.10.2019

Наконец-то у меня есть этот файл:

version: '3.7'

services:
  storage:
    image: openzipkin/zipkin-elasticsearch7
    container_name: elasticsearch
    ports:
      - 9200:9200

  zipkin:
    image: openzipkin/zipkin
    container_name: zipkin
    environment: 
      - STORAGE_TYPE=elasticsearch
      - "ES_HOSTS=elasticsearch:9300"
    ports:
      - 9411:9411
    depends_on: 
      - storage

  dependencies:
    image: openzipkin/zipkin-dependencies
    container_name: dependencies
    entrypoint: crond -f
  depends_on:
    - storage
  environment:
    - STORAGE_TYPE=elasticsearch
    - "ES_HOSTS=elasticsearch:9300"
    - "ES_NODES_WAN_ONLY=true"

prometheus:
  image: prom/prometheus:latest
  container_name: prometheus
  volumes:
    - $PWD/prometheus:/etc/prometheus/
    - /tmp/prometheus:/prometheus/data:rw
  command:
    - '--config.file=/etc/prometheus/prometheus.yml'
    - '--storage.tsdb.path=/prometheus'
    - '--web.console.libraries=/usr/share/prometheus/console_libraries'
    - '--web.console.templates=/usr/share/prometheus/consoles'
  ports:
    - "9090:9090"

grafana:
  image: grafana/grafana
  container_name: grafana
  depends_on:
    - prometheus
  ports:
    - "3000:3000"

Основные отличия заключаются в использовании

"ES_HOSTS = elasticsearch: 9300"

вместо того

"ES_HOSTS = хранилище: 9300"

и в конфигурации зависимостей я добавляю точку входа в зависимости:

точка входа: crond -f Это действительно ключ к тому, чтобы не было исключения, когда я запускаю docker-compose.

Чтобы решить эту проблему, я проверяю этот проект: https://github.com/openzipkin/docker-zipkin

Остается вопрос: зачем мне использовать точку входа: crond -f

person Jon Leb    schedule 01.10.2019