Как настроить logstash в докере?

Я настраиваю контейнер Docker, но не могу настроить logstash для эластичного поиска, который работает в AWS.

Структура папок следующая

.
├── logstash
│   └── logstash.conf
├── docker-compose.yml
├── Dockerfile
├── file.jar

./logstash/logstash.conf выглядит так

(папка журнала в указанном ниже пути ввода будет автоматически создаваться параллельно файлу jar, когда мы запускаем сервер с помощью jar)

input {

  file {
          path => "/java_pro/log/*/*/*.log"
          type => "json"
        }
}

output {
   elasticsearch {
         hosts => [ "https://search-***********.es.amazonaws.com:443" ]
         index => "logback-%{+YYYY-MM-dd}"
   }
}

Докерфайл

FROM java:8
RUN mkdir -p /java_pro
WORKDIR /java_pro
COPY . /java_pro
EXPOSE 443
CMD java -jar file.jar

докер-compose.yml

version: "3"
services:
hub:
  build: .
  volumes:
    - .:/java_pro
    - static_volume:/java_pro
  networks:
    - rabbitmq-networks
rabbitmq:
  image: "rabbitmq:3-management"
  ports:
    - "5672:5672"
    - "15672:15672"
  volumes:
    - "rabbitmq_data:/data"
  networks:
    - rabbitmq-networks
  environment:
    - RABBITMQ_DEFAULT_USER=****
    - RABBITMQ_DEFAULT_PASS=****
logstash:
  image: docker.elastic.co/logstash/logstash:6.4.0
  ports:
    - "9200:9200"
  command: logstash -f /etc/logstash/conf.d/logstash.conf
  volumes:
    - ./logstash/logstash.conf:/etc/logstash/conf.d
  environment:
    LS_JAVA_OPTS: "-Xmx256m -Xms256m"
  networks:
    - rabbitmq-networks

networks:
  rabbitmq-networks:
    driver: bridge

volumes:
  rabbitmq_data:
  static_volume:

Elasticsearch запущен и работает в AWS. Получение ошибки при запуске с использованием docker-compose up

No config files found in path {:path=>"/etc/logstash/conf.d/logstash.conf"}
Running health check to see if an Elasticsearch connection is working {:healthcheck_url=>http://elasticsearch:9200/, :path=>"/"}
Attempted to resurrect connection to dead ES instance, but got an error. {:url=>"http://elasticsearch:9200/", :error_type=>LogStash::Outputs::ElasticSearch::HttpClient::Pool::HostUnreachableError, :error=>"Elasticsearch Unreachable: [http://elasticsearch:9200/][Manticore::ResolutionFailure] elasticsearch"}  

Как устранить вышеуказанную ошибку и хотите отправить все журналы из приложения в elasticsearch с помощью logstash.

Он пытается подключиться к эластичному поиску по умолчанию. Вы можете попробовать смонтировать конфигурацию тома в расположение по умолчанию для logstash. например - ./logstash/logstash.conf:/usr/share/logstash/pipeline/logsta‌​sh.conf вам не нужна строка command тогда

kjr 27.03.2019 11:22
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
5
1
19 631
1

Ответы 1

Вы смонтировали файл как имя каталога здесь:

volumes:
    - ./logstash/logstash.conf:/etc/logstash/conf.d

Включить имя файла при монтировании одного файла:

volumes:
    - ./logstash/logstash.conf:/etc/logstash/conf.d/logstash.conf:ro

Я также пометил его только для чтения, поскольку контейнер, скорее всего, не изменяет этот файл.

Другие вопросы по теме