NYMEZIDE
@NYMEZIDE
резюме - ivanfilatov.ru

Как собирать логи из Docker контейнеров снаружи этих самих контейнеров?

Имеются микросервисы, описанные в docker-compose
Каждый умеет писать логи в File, Console, ...
Хочется централизованного сбора логов. Допустим тот же ELK (ElasticSearch, LogStash, Kibana)

Если настроить конфигурацию логирования каждого микросервиса на логирование сразу в Elastic или LogStash - тот тут проблем нет, но хочется избиваться от конфигурирования и жесткой привязки в конкретному контейнеру для сбора логов.

Хочется такую схему:
5c5acf901a6fb108606226.png

Чтобы снимать логи из файлов, которые прописаны как docker volume, или из stdout забирать их как-то, и отправлять затем в тот же LogStash или Elastic. Забирать логи снаружи контейнера, а не внутри!

Как можно это сделать? Есть ли в самом docker механизм шаринга файлов логов между контейнерами или может чтение консоли, потому что тот же Kitematic показывает у себя логи из консоли без проблем, значит наружу ее вытащить реально.

Может кто поделиться рабочим docker-compose.yml файликом, кто уже делал подобную схему?
  • Вопрос задан
  • 11588 просмотров
Решения вопроса 2
@Kek420
Можно добавить в ваш docker-compose контейнер с Filebeat, например. И с помощью него перенаправлять все логи в ELK
Ответ написан
@abogoyavlensky
Python Developer
Можно использовать logspout.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Adept_23
У Docker есть прекрасная возможноть логировать сообщения и отправлять с помощью различных двайверов.
https://docs.docker.com/config/containers/logging/...
Один из них, который работает прекрастно с Logstash, это gelf
Пример запуска
docker run -d \
-p 80:80 \
--name nginx-logs \
--log-driver=gelf \
--log-opt gelf-address=udp://ELK-host:12201 \
--log-opt tag=site.com.ua \
nginx

Если это docker-compose, тогда так:
services:
  nginx:
    image: nginx
    hostname: nginx-log
    logging:
       driver: gelf
       options:
         gelf-address: "udp://ELK-host:12201"
         tag: "site.com.ua"


В свою очередь, конфиг Logstash для директивы input такой

input {
  beats {
    port => 5044
  }
  gelf {
    port => 12201
    type => gelf
  }
}


Единстенное, сейчас ищу как эти контейнеры с помощью Logstash разделить в Kibana с помощью тегов, когда их много. Ищу синтаксис конструкции для директивы output.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы