2015-07-09 2 views
6

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

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

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

ответ

4

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

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

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

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

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

НТН

2

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

0

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

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

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

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

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

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

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

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

+1

Это опасно, потому что вы можете бесконечно зацикливать журналы ошибок logstash, которые не обрабатываются должным образом, также трудно определить различные типы журналов –

Смежные вопросы