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».