Heka vs Fluetnd vs Logstash или меняем EFK на EHK

В предыдущей статье я описывал как быстро для пробы развернуть связку EFK (Elasticsearch Fluentd Kibana). Выбор связки основывался на докладе с HighLoad++ 2016

ELK: менеджмент логов, быстрая локализация проблем
Вторым фактором стала платформа fluentd - ruby vs logstash (java). Наши проекты работают на базе ruby это дало основание полагать, что при необходимости мы можем доработать или написать плагины самостоятельно.

fluentd обладает большим объемом плагинов, что является большим плюсом. Минусом стал запас производительности одного агента при работе с логами nginx. Мы без проблем обработали логи отвечающие за работу frontend и backend, но его производительности не хватило для обработки лога машин, отдающих видеоконтент по 10Gbit интерфейсу.

При работе с fluentd(td-agent) важно следить за потреблением CPU (ядра). При утилизации ядра на 100% происходит сбой в отправке данных. Это вызывает повторные попытки отправить данные, что ведет к задвоению показателей и лавинообразному росту нагрузки на хранилище (elasticsearch).

Heka

На продукт heka наткнулся совершенно случайно. В процессе изучения golang возникла мысль сделать замену fluentd. Перед началом решение достаточно популярной задачи решил погуглить по ключевым словам, что уже имеется в open source.
Поиск привел на сайт https://hekad.readthedocs.io/en/v0.10.0/

Heka is an open source stream processing software system developed by Mozilla. Heka is a “Swiss Army Knife” type tool for data processing, useful for a wide variety of different tasks

У heka довольно интересный подход для работы с данными. Доставка данный реализована на go, а обработка в виде плагинов на lua. Архитектура системы построена аналогично конкурентам logstash и fluentd и организует цепочки.

Inputs -> Splitters -> Decoders -> Filters -> Encoders -> Outputs

Из коробке все заявленные плагины доступны сразу после установки. Для работы с экспортом данных в elasticsearch это удобно, т.к. не нужно дополнительно устанавливать дополнительные плагины.

Для конфигурирования heka используется формат toml.

Безопасность

Для организации доступа по логину и паролю воспользуемся nginx и организуем проксирование запросов с предварительным запросом авторизации.
Аналогично мы закрываем web интерфейс к kibana.

Производительность

Новая связка была опробована на облачном хостинге за 0,56 руб/час

Конфигурация

  • 2Gb ОЗУ
  • 1core
  • 20Gb ssh

Разгоняется до 600-700 вставок в секунду. Остальные события записываются в бинарный лог и ожидают своей очереди отправки. Систему можно без проблем запустить под конец рабочего дня и она без проблем догонит отставания.

Выводы после использования.
Плюсы:
Меньше потребления cpu + озу
Буферы сразу пишутся на диск (fluentd рекомендует писать в память), что позволяет работать стабильнее.
Избавились от само ddos при чтении больших объемов данных.
Для nginx - простой вариант описание формата лога

Минусы:
свои парсеры добавлять сложней
для ubuntu 12.04 кривой скрипт запуска.
При переходе с fluend на heka формат конфигов выглядит сложней.

Вам может понравиться