Как переслать журналы контейнера Docker в ELK?

Я хотел бы знать, какой самый простой способ переслать мои журналы контейнера docker на сервер ELK, до сих пор решения, которые я пробовал после поиска в Интернете, вообще не работали.

В принципе, у меня есть образ docker, который я запускаю с помощью docker-compose, этот контейнер ничего не регистрирует локально (он состоит из разных служб, но ни одна из них не является logstash или чем-то еще), но я вижу, что регистрация проходит docker logs -tf imageName или docker-compose logs. Поскольку я запускаю контейнеры с помощью compose, я не могу использовать (или, по крайней мере, я не знаю, как) --logs-driver опция docker.

Таким образом, мне было интересно, может ли кто-нибудь немного просветить меня относительно того, как пересылать эти журналы, например, в контейнер ELK.

Заранее спасибо,

С уважением

решение:

Благодаря madeddie я смог решить свою проблему следующим образом, упомянув, что я использовал базовый ELK-stack-in-containers, который предложил madeddie в своем посте.

Сначала я обновляю docker-compose.yml файл моего контейнера для добавления записей для ссылки на ведение журнала, как сказал мне мэдди, я включил запись для каждой службы, фрагмент моего docker-compose выглядит следующим образом

   version: '2'    services:      mosquitto:        image: ansi/mosquitto        ports:          - "1883:1883" # Public access to MQTT          - "12202:12202"  #mapping logs        logging:            driver: gelf           options:              gelf-address: udp://localhost:12202    redis:     image: redis     command: redis-server --appendonly yes     ports:       - "6379:6379" # No public access to Redis       - "12203:12203" #mapping logs     volumes:       - /home/dockeruser/redis-data:/data     logging:        driver: gelf       options:          gelf-address: udp://localhost:12203 

Во-вторых, мне пришлось использовать другой номер порта для каждого сервиса, чтобы иметь возможность пересылать журналы.

Наконец, я обновил свой контейнер elk docker-compose.yml файл для сопоставления каждого порта upd, куда я отправлял свои журналы, с тем, который прослушивает logstash

logstash:  build: logstash/  command: logstash -f /etc/logstash/conf.d/logstash.conf  volumes:    - ./logstash/config:/etc/logstash/conf.d  ports:    - "5000:5000"    - "12202:12201/udp" #mapping mosquitto logs    - "12203:12201/udp" #mapping redis logs

Эта конфигурация и добавление записи gelf {} в logstash.conf чтобы это сработало, также важно правильно настроить IP-адрес службы docker.

С уважением!

В Docker compose есть ключевое слово logging:источник

logging:   driver: syslog  options:     syslog-address: "tcp://192.168.0.42:123"

Так что, если вы знаете, куда идти дальше, дерзайте.

Если нет, я могу посоветовать вам изучить gelf драйвер ведения журнала для docker и плагин для ввода logstash gelf

Если бы вы, например, использовали этот базовая настройка ELK-stack-in-containers, вы должны обновить файл docker-compose и добавить порт - "12201:12201/udp" в logstash.

Отредактируйте logstash.conf входной раздел для:

input {    tcp {        port => 5000    }    gelf {    }}

Затем настройте свои контейнеры на использование драйвера ведения журнала gelf (не системный журнал) и опция gelf-address=udp://ip_of_logstash:12201 (вместо адреса системного журнала).

Единственное волшебство, о котором вам нужно будет позаботиться, - это то, как Docker найдет IP-адрес или имя хоста контейнера Logstash. Вы могли бы решить эту проблему с помощью именования docker-compose, ссылок Docker или просто вручную.

Докер и ЛОСЬ - мощные, гибкие, но, следовательно, также большие и сложные звери. Приготовьтесь потратить некоторое серьезное время на чтение и эксперименты.

Не бойтесь открывать новые (и желательно очень конкретные) вопросы, с которыми вы столкнетесь, исследуя все это.

настраиваете ли вы порт 12201 для каждой службы? потому что ты не должен