Logstash и Kibana не могут видеть контейнер Elasticsearch в Docker

Я использую репо здесь: https://github.com/deviantony/docker-elk

CentOS 8

ELK версии 7.4.0

docker-compose версия 1.24.1

Докер версии 18.06.3-ce

Когда я поднимаю контейнеры, Elasticsearch загружается нормально. После загрузки запускаются контейнеры Kibana и Logstash. Но как только они загружаются, они не могут видеть контейнер Elasticsearch, выдающий следующие сообщения:

Logstash:

[2019-10-22T18:32:57,321][WARN ][logstash.outputs.elasticsearch] Attempted to resurrect connection to dead ES instance, but got an error. {:url=>"http://elastic:xxxxxx@elasticsearch:9200/", :error_type=>LogStash::Outputs::ElasticSearch::HttpClient::Pool::HostUnreachableError, :error=>"Elasticsearch Unreachable: [http://elastic:xxxxxx@elasticsearch:9200/][Manticore::SocketException] No route to host (Host unreachable)"}

Кибана:

{"type":"log","@timestamp":"2019-10-22T18:41:22Z","tags":["warning","elasticsearch","data"],"pid":6,"message":"Unable to revive connection: http://elasticsearch:9200/"}
{"type":"log","@timestamp":"2019-10-22T18:41:22Z","tags":["warning","elasticsearch","data"],"pid":6,"message":"No living connections"}
{"type":"log","@timestamp":"2019-10-22T18:41:22Z","tags":["license","warning","xpack"],"pid":6,"message":"License information from the X-Pack plugin could not be obtained from Elasticsearch for the [data] cluster. Error: No Living connections"}
{"type":"log","@timestamp":"2019-10-22T18:41:22Z","tags":["warning","elasticsearch","admin"],"pid":6,"message":"Unable to revive connection: http://elasticsearch:9200/"}
{"type":"log","@timestamp":"2019-10-22T18:41:22Z","tags":["warning","elasticsearch","admin"],"pid":6,"message":"No living connections"}

Когда я проверяю, что такое имя хоста elasticsearch, я получаю автоматически созданное Docker.

# docker-compose exec elasticsearch hostname
7d50d6a75028

У меня создалось впечатление, что если контейнеры находятся в одной сети, тогда докер должен сопоставить elasticsearch: 9200 с правильным IP-адресом контейнера?

Я попытался установить имя хоста в файле docker-compose следующим образом:

...

services:
  elasticsearch:
    hostname: elasticsearch

...

И изменение отражается в контейнере:

# docker-compose exec elasticsearch hostname
elasticsearch

Но Кибана и Логсташ до сих пор этого не видят.

Я не вижу этого хоста из контейнера Kibana:

# docker-compose exec kibana curl http://elasticsearch:9200
curl: (7) Failed connect to elasticsearch:9200; No route to host

Проверяя логи в контейнере ES, вроде все работает нормально:

# docker logs 9ef8

{"type": "server", "timestamp": "2019-10-22T18:50:55,870Z", "level": "INFO", "component": "o.e.c.r.a.AllocationService", "cluster.name": "docker-cluster", "node.name": "elasticsearch", "message": "Cluster health status changed from [RED] to [GREEN] (reason: [shards started [[.monitoring-es-7-2019.10.22][0]]]).", "cluster.uuid": "O7t3UC1tSFibbjkwjqbX6A", "node.id": "qbzcFdQpR2KHBad-s8U1Vw"  }

Должно быть, я чего-то упускаю, но не могу понять. Я искал эту ошибку, и кажется, что то, как я ее настроил, должно работать.

Кто-нибудь может помочь?

Мой файл docker-compose выглядит так:

version: '3.7'

services:
  elasticsearch:
    build:
      context: elasticsearch/
      args:
        ELK_VERSION: $ELK_VERSION
    volumes:
      - type: bind
        source: ./elasticsearch/config/elasticsearch.yml
        target: /usr/share/elasticsearch/config/elasticsearch.yml
        read_only: true
      - type: volume
        source: elasticsearch
        target: /usr/share/elasticsearch/data
    ports:
      - "9200:9200"
      - "9300:9300"
    environment:
      ES_JAVA_OPTS: "-Xmx256m -Xms256m"
    networks:
      - elk

  logstash:
    build:
      context: logstash/
      args:
        ELK_VERSION: $ELK_VERSION
    volumes:
      - type: bind
        source: ./logstash/config/logstash.yml
        target: /usr/share/logstash/config/logstash.yml
        read_only: true
      - type: bind
        source: ./logstash/pipeline
        target: /usr/share/logstash/pipeline
        read_only: true
    ports:
      - "5000:5000"
      - "9600:9600"
    environment:
      LS_JAVA_OPTS: "-Xmx256m -Xms256m"
    networks:
      - elk
    depends_on:
      - elasticsearch

  kibana:
    build:
      context: kibana/
      args:
        ELK_VERSION: $ELK_VERSION
    volumes:
      - type: bind
        source: ./kibana/config/kibana.yml
        target: /usr/share/kibana/config/kibana.yml
        read_only: true
    ports:
      - "5601:5601"
    networks:
      - elk
    depends_on:
      - elasticsearch

networks:
  elk:
    driver: bridge

volumes:

person bobby    schedule 22.10.2019    source источник


Ответы (2)


Мне удалось без проблем запустить его на CentOS 7.7. Похоже, это связано с CentOS 8.

person bobby    schedule 23.10.2019

Даже у меня такая же проблема с запуском elastic, kibana внутри докера для CENTOS 8.

Похоже на некоторую проблему, поскольку кибана не могла разговаривать с эластичной внутри сети докеров.

CURL внутри кибаны для эластичного: curl -X GET http://elasticsearch:9200 выдает ошибку Failed connect to elasticsearch:9200; No route to host

Тот же файл docker-compose, работающий в докере Windows, докере в ubuntu и т. Д.

Отредактировано:

После некоторых поисков я смог придумать решение. Причина в том, что centos firewalld блокирует DNS в сети контейнеров докеров, и необходимо обойти или полностью отключить его. Но вместо того, чтобы полностью отключить firewalld, можно найти обходной путь путем обхода DNS докера в брандмауэре, используя шаг, показанный в здесь Сообщение о выполнении шагов, кибана может подключиться к эластичному докеру .. Спасибо :)

person A.K    schedule 22.01.2020