Лучшая архитектура ведения журнала Docker с использованием стека ELK

Недавно я пытаюсь найти лучший механизм ведения журнала Docker с использованием стека ELK. У меня есть несколько вопросов относительно наилучшего рабочего процесса, который компании используют в производстве. Наша система имеет типичный программный стек, включая Tomcat, PostgreSQL, MongoDB, Nginx, RabbitMQ, Couchbase и т. д. На данный момент наш стек работает в кластере CoreOS. Пожалуйста, найдите мои вопросы ниже

  1. Какова наилучшая методология для пересылки журналов со стеком ELK. Должен ли я использовать Lumberjack? Я спрашиваю об этом, потому что видел рабочие процессы, в которых люди используют Syslog/Rsyslog для пересылки журналов в logstash.
  2. Поскольку все части нашего программного обеспечения контейнеризированы, должен ли я включать Log-forwarder во все свои контейнеры? Я планирую сделать это, так как большинство моих контейнеров переключают узлы в зависимости от работоспособности, поэтому я не заинтересован в монтировании файловой системы из контейнера на хост.
  3. Должен ли я использовать Redis в качестве брокера для пересылки журналов? Если да, то почему?
  4. Насколько сложно писать файлы конфигурации журнала, определяющие формат журнала для пересылки в log-stash?

Это субъективный вопрос, но я уверен, что это проблема, которую люди давно решили, и я не горю желанием заново изобретать велосипед.


person KarthikJ    schedule 09.07.2015    source источник


Ответы (3)


Хорошие вопросы и ответ, как и во многих других случаях, - "это зависит".

  1. Журналы доставки — мы используем rsyslog в качестве док-контейнеров для внутренних целей, а в некоторых случаях — logstash-forwarder. Преимущество logstash-forwarder заключается в том, что он шифрует журналы и сжимает их, поэтому в некоторых случаях это важно. Я считаю, что rsyslog очень стабилен и требует мало ресурсов, поэтому мы используем его в качестве отправителя по умолчанию. Полный logstash может оказаться тяжелым для небольших машин (еще немного информации о logstash — http://logz.io/blog/5-logstash-pitfalls-and-how-to-avoid-them/)

  2. Мы также полностью докеризованы и используем отдельный Docker для каждого rsyslog/lumberjack. Простота обслуживания, обновления версий и перемещения по мере необходимости.

  3. Да, обязательно используйте Redis. Я написал блог о том, как создать рабочий ELK (http://logz.io/blog/deploy-elk-production/) — я говорил о том, что считаю правильной архитектурой для развертывания ELK в производственной среде.

  4. Не уверен, чего именно вы пытаетесь достичь этим.

ХТН

person Tomer Levy    schedule 11.07.2015

Docker по состоянию на август 2015 г. имеет «драйвер ведения журналов", так что вы можете отправлять журналы в другие места. Это поддерживаемый способ удаленной доставки журналов.

person Kazuki Ohta    schedule 15.08.2015

Я бы рекомендовал не помещать пересылку журналов в каждый образ Docker. Это добавляет ненужной сложности и раздувания вашим контейнерам Docker. Более чистое решение — установить пересылку журналов (последней пересылкой журналов от Elastic является FileBeat, который заменяет средство пересылки logstash) в свой собственный контейнер и монтирует каталог /var/lib/docker хост-машины в качестве тома для этого контейнера.

docker run --detach --name=docker-filebeat -v /var/lib/docker:/var/lib/docker

/var/lib/docker содержит все журналы для каждого контейнера, работающего на демоне Docker хоста. Данные файлов журнала в этом каталоге — это те же данные, которые вы получили бы при запуске docker logs <container_id> для каждого контейнера.

Затем в конфигурационном файле filebeat.yml поместите:

filebeat:
  prospectors:
    -
      paths:
        - /var/lib/docker/containers/*/*.log

Затем настройте Filebeat для переадресации на остальную часть стека ELK и запустите контейнер. Все журналы контейнера Docker на этом компьютере будут автоматически перенаправлены в ваш стек ELK.

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

Я считаю этот метод более чистым и гибким, чем другие методы, такие как использование драйверов ведения журнала Docker, потому что остальная часть вашей настройки Docker остается прежней. Вам не нужно добавлять флаги драйвера ведения журнала в каждую команду запуска Docker (или в параметры демона Docker).

person ben_frankly    schedule 13.03.2016
comment
Это опасно, потому что вы можете в конечном итоге зациклить свои журналы ошибок logstash, которые не анализируются должным образом, а также здесь сложно определить различные типы журналов. - person Will Barnwell; 29.06.2016