Arhn - архитектура программирования

Масштабирование filebeat над контейнерами докеров

Я ищу подходящий способ мониторинга прикладных журналов, создаваемых nginx, tomcat, springboot, встроенными в докер, с помощью filebeat и ELK.

В контейнерной стратегии контейнер должен использоваться только для одной цели.

Один nginx на контейнер и один tomcat на контейнер, что означает, что у нас не может быть дополнительного файла в контейнере nginx или tomcat.

Из того, что я прочитал в Интернете, у нас могла быть следующая установка:

  • том, предназначенный для хранения журналов
  • контейнер nginx, который монтирует выделенный том журналов
  • контейнер tomcat / springboot, который монтирует выделенный том журналов
  • контейнер filebeat также монтирует выделенный том журналов

Это отлично работает, но когда дело доходит до масштабирования контейнера nginx и springboot, для меня это немного сложнее.

Какой шаблон мне следует использовать для отправки моих журналов с помощью filebeat в logstash, если у меня следующая конфигурация:

  • несколько контейнеров nginx в балансировке нагрузки с одинаковой конфигурацией (конфигурация логов одинакова: тот же путь)
  • несколько контейнеров springboot rest api за контейнерами nginx с одинаковой конфигурацией (конфигурация журналов такая же: тот же путь)

Должен ли я создать один том с помощью набора api nginx + springboot rest и добавить контейнер filebeat?

Должен ли я создать глобальный том журнала, общий для всех моих контейнеров, и иметь другое имя файла журнала для каждого контейнера (с именем контейнера в имени файла журналов?) И иметь только один контейнер filebeat?

Во втором предложении, как масштабировать filebeat?

Есть ли другой способ сделать это?

Большое спасибо за вашу помощь.


Ответы:


1

Самый простой способ, если вы можете управлять этим, - это настроить каждый процесс контейнера для ведения журнала в свой собственный стандартный вывод (вы можете указать /dev/stdout или /proc/1/fd/1 в качестве файла журнала). Например, указывает

RUN ln -sf /dev/stdout /var/log/nginx/access.log \
    && ln -sf /dev/stderr /var/log/nginx/error.log

поэтому обычные журналы nginx становятся журналами контейнера. После этого вы можете подключить ввод контейнера filebeat для чтения этих журналов и их обработки. Вы также можете увидеть их снаружи контейнера с помощью docker logs, это те же журналы.


Что, если вам нужно войти в файловую систему? Или есть несколько отдельных потоков журналов, которые вы хотите собрать?

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

Если количество контейнеров фиксировано, вы можете настроить том для каждого контейнера и смонтировать его в «обычном» месте хранения журналов каждого контейнера. Затем смонтируйте все эти каталоги в контейнер filebeat. Очевидная проблема здесь в том, что если вы запускаете или останавливаете контейнер, вам необходимо перезапустить диспетчер журналов для добавленного / удаленного тома.


Если вы действительно используете Kubernetes, есть еще две возможности. Если вы пытаетесь собрать журналы контейнеров из файловой системы, вам нужно запустить копию filebeat на каждом узле; DaemonSet может управлять этим за вас. Модуль Kubernetes также может запускать несколько контейнеров, поэтому другой вариант - настроить модули как с контейнером приложения, так и с контейнером «sidecar» filebeat, который отправляет журналы. Установите модуль с томом emptyDir для хранения журналов и установите его в оба контейнера. Система шаблонов, такая как Helm, может помочь вам написать спецификации модуля, не повторяя настройку сопроводительного файла журнала снова и снова.

05.01.2020
Новые материалы

Коллекции публикаций по глубокому обучению
Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

Представляем: Pepita
Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

Советы по коду Laravel #2
1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

3 способа решить квадратное уравнение (3-й мой любимый) -
1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

Создание VR-миров с A-Frame
Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

Демистификация рекурсии
КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..