ADG Оставить заявку
Блог DevOps 5 мин чтения

Elastic Stack 5 beta: тестируем Filebeat как замену logstash-forwarder

Elastic переименовал ELK в Elastic Stack и объединил версии. Тестируем Filebeat 5 beta вместо logstash-forwarder: потребление памяти на агентах упало заметно.

Контекст момента

Elastic Stack 5.0 beta объединил Elasticsearch, Logstash, Kibana и Beats под единой версией, сделав Beats основным агентом сбора логов

На прошлой неделе Elastic выкатили 5.0 beta. Само по себе мажорное обновление - это уже повод посмотреть, но здесь интереснее другое: компания фактически переименовала стек. «ELK» теперь официально называется «Elastic Stack», и смысл в этом есть - четвёртый компонент, Beats, наконец стал частью того что они считают базовым набором, а не дополнением на полях документации.

Мы с этим стеком работаем давно - первая продакшн-инсталляция была ещё на Elasticsearch 1.7 и Kibana 4. С тех пор несколько клиентов накопили инфраструктуру вокруг ELK, и нам небезразлично что происходит в пятой версии.

Что изменилось с точки зрения версионирования

До этого релиза Elasticsearch, Logstash и Kibana жили своей жизнью: Elasticsearch 2.3, Logstash 2.3, Kibana 4.5. Нумерация была несинхронизированной, и это создавало неудобства - надо было помнить какая версия Kibana с какой версией Elasticsearch совместима. С пятой версией все продукты синхронизированы: 5.0 выйдет как 5.0 везде одновременно.

Beats тоже получили 5.0. Именно это нас и заинтересовало.

Filebeat вместо logstash-forwarder

Исторически для форвардинга файловых логов с агентов на центральный Logstash использовался logstash-forwarder - небольшой Go-бинарник, который читал файлы и отправлял данные по Lumberjack-протоколу. Работало, но отношение к нему у Elastic было двойственным: официально deprecated в пользу Filebeat уже несколько версий назад, а инсталляций с ним по-прежнему много, потому что Filebeat долго был функционально беднее.

В бета-версии 5.0 мы наконец решили это переключение сделать на тестовом стенде.

Стенд: шесть виртуалок под CentOS 7, на каждой несколько приложений с ротирующимися логами суммарным объёмом около 200 МБ/сутки. Задача - форвардить всё на центральный Logstash. До этого там стоял logstash-forwarder 0.3.1.

Конфиг Filebeat получился компактным:

filebeat:
  prospectors:
    - paths:
        - /var/log/app/*.log
        - /var/log/nginx/access.log
      encoding: utf-8
      input_type: log

output:
  logstash:
    hosts: ["logstash.internal:5044"]

logging:
  level: info

Настройка заняла минут двадцать, включая время на разбор документации по синтаксису prospectors - в пятой версии он немного изменился относительно четвёртой.

Что заметили по памяти

Вот тут появилось кое-что интересное. На холодном старте logstash-forwarder занимал порядка 10-15 МБ RSS на каждой машине. Filebeat 5 beta на тех же задачах - 3-6 МБ. Разница кратная, и это не разовое наблюдение - смотрели через несколько часов после запуска, на устоявшемся потоке.

На одной виртуалке это несущественно. Когда агентов сотня - это уже другой разговор. Разница суммируется в ресурсы, которые можно потратить на что-нибудь полезнее.

Процессор в обоих случаях был пренебрежимо мал, это не точка сравнения. Но по памяти Filebeat выигрывает заметно.

Что ещё поменялось в пятой версии

Помимо агента смотрели на другие изменения в бете:

Новый движок X-Pack. Это платное расширение, которое объединяет Security, Alerting, Monitoring и Graph. В beta оно включено по умолчанию на 30-дневный триал. Для наших клиентов на базовой инсталляции X-Pack не нужен, но Monitoring - та часть, которая рисует метрики самого кластера прямо в Kibana - выглядит полезно.

Painless - новый язык скриптов. Groovy-скрипты, которые были раньше, Elastic объявляет устаревшими. Painless заявлен как более безопасный и быстрый вариант. Пока не тестировали предметно, но это важно для тех у кого есть кастомные скрипты трансформации в Elasticsearch.

Ingest node. Теперь сам Elasticsearch умеет делать базовую обработку документов при индексировании - через пайплайны с процессорами. Это частичная альтернатива некоторым сценариям Logstash, хотя не замена. Если нужно просто разобрать поле или переименовать - можно обойтись без дополнительного сервиса.

Что с Logstash

Logstash 5 тоже получил обновления, но главное с точки зрения эксплуатации - persistent queues. Это дисковая очередь между input и filter/output: если Elasticsearch временно недоступен, Logstash буферизует данные на диске и не теряет события. Раньше при падении ES входящие данные просто пропадали или копились в памяти до OOM.

Это всё ещё beta, и persistent queues помечены как экспериментальные - включать в продакшн пока не торопимся. Но направление правильное.

Где сейчас

Filebeat 5 beta работает на тестовом стенде третью неделю без происшествий. Данные доходят, индексы в Elasticsearch выглядят нормально, Kibana показывает то что ожидается. На GA мы, вероятно, перейдём на Filebeat на клиентских инсталляциях - logstash-forwarder deprecated и поддерживать его дальше смысла нет.

С X-Pack ситуация интереснее. Бесплатная «Basic» лицензия в пятой версии включает Monitoring без Security и Alerting. Для базового наблюдения за здоровьем кластера этого достаточно - посмотрим как это работает на продакшн-инфраструктуре после GA.

Переименование ELK в Elastic Stack - это не просто маркетинг. Синхронизация версий реально упрощает работу: одна строчка в документации «поставьте версию 5.x всего стека» лучше, чем таблица совместимости. Мелочь, но приятная. Клиентам на managed-сопровождении это тоже заметно - меньше вопросов «а какую версию Kibana ставить к этому Elasticsearch».

Контакт

Нужна такая же инженерная работа?

Опишите задачу и контекст. Ответим в течение рабочего дня, при необходимости подпишем NDA.