2017-01-06 3 views
2

Я использую SEBP/ELK Docker container, поскольку он представляется наиболее подходящим для быстрой настройки регистрации приложений. К сожалению, после прочтения the docs, похоже, нет простого способа получить журналы из родственных контейнеров без использования Filebeat.Отправлять журналы в контейнер ELK из контейнеров Docker (без Filebeat)

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

TLDR; как получить журналы из контейнеров моего приложения в контейнер ELK?

+0

Я мог бы понять вашу идею. Я сделал изображение ELK, вы можете попытаться включить ввод файла в logstash '' 'https: // github.com/nguoianphu/docker-elk/blob/master/logstash.conf''', тогда вы можете смонтировать файл путь с объемом докера. – Tuan

ответ

1

SEBP/ELK был неправильным инструментом для решения этой проблемы. Вместо этого я должен был использовать проект, который объединяет контейнер для каждого из элементов стека ELK: Elasticsearch, Logstash и Kibana. Я нашел такой репозиторий на GitHub.

Проект deviantony/docker-elk объединяет три элемента ELK в рабочий набор контейнеров. Самое замечательное в этом заключается в том, что в отличие от проекта SEBP/ELK, deviantony/docker-elk не придерживается мнения о том, какие функции должны быть доступны и что должно быть закрыто. В проекте SEBP/ELK возможность записи на порт 5000 удаляется, и когда вы пытаетесь добавить его обратно через собственный файл logstash.conf, UDP-прослушиватель в конечном итоге терпит неудачу. Напротив, проект deviantony/docker-elk работает.

Бонусные баллы: Этот проект также имеет ветку, которая включает в себя X-Pack, который добавляет минимальный уровень безопасности из коробки.

1

Использование filebeat в каждом контейнере против философии Docker. Это будет пустая трата ресурсов, и у них больше управленческих издержек.

Вы можете использовать локальный файл журнала через logstash.

Пример конфигурации:

input { 
    file { 
    path => "/var/log/apache.log" 
    type => "apache-access" # a type to identify those logs (will need this later) 
    start_position => "beginning" 
    } 
} 

Теперь мы должны сделать файлы локального журнала для logstash контейнера:

Если вы используете bind mounts вы можете монтировать один и тот же каталог, в logstash контейнере.

sudo docker run -d -v /path/to/logs/:/path/to/logs/in/container logstash 

Если вы используете volumes вы можете установить один и тот же объем, который содержит журналы для logstash тоже.

sudo docker run -d -v logvol:/path/to/logs/in/container logstash