Статьи

Включение лог-инфраструктуры Facebook с Fluentd

Что такое писец?

Facebook использует Scribe в качестве основного сервиса агрегации журналов. , Описание Github гласит: «Scribe — это сервер для агрегирования данных журнала, передаваемых в реальном времени с большого количества серверов».

Сеть серверов Scribe формирует ориентированный граф. Каждый сервер является узлом, а направленные ребра представляют собой линии связи. Обычно Scribe устанавливается на каждом узле, а журналы собираются на одном гигантском узле-агрегаторе. Собранные журналы записываются в HDFS (распределенная файловая система Hadoop), а затем анализируются с помощью Hadoop MapReduce или Hive.

Писец довольно популярен. В дополнение к Facebook, Twitter и Zynga используют Scribe в производстве.

Почему Fluentd?

Писец твердый. Он был эффективно развернут на нескольких веб-узлах с серьезными проблемами масштабируемости. Итак, почему вы переключаетесь на Fluentd? Ответ тройной: 1) Простота управления, 2) Гибкость и 3) Совместимость.

1) Простота управления

Писец безумно сложно правильно установить . Вам не только нужно собирать Boost, Thrift и libhdfs из исходного кода, вы должны выбрать правильные версии программного обеспечения, иначе сборка не удастся. В сущности, установка и развертывание Fluentd очень просты. Он поставляется с пакетами rpm / deb, поддерживаемыми Treasure Data, Inc. (это мы!). Если вы используете Chef (интегрированную среду системной интеграции), вы также можете использовать поваренную книгу, которую мы создали.

2) Гибкость

Писец быстр, потому что он написан на C ++. Но волосатость C ++ делает Scribe трудным для изменения или расширения. С другой стороны, Fluentd написан в ~ 3000 строк Ruby, и вы можете легко настроить и расширить его поведение. С точки зрения производительности Scribe определенно превосходит Fluentd, но Fluentd достаточно компетентен: он поддерживает многопроцессорный режим и может обрабатывать до 20 000 сообщений в секунду на одном хосте. Если это не достаточно хорошо, продолжайте и выберите Scribe. Я надеюсь, что вы не застряли в аду версий ?

3) Совместимость

Благодаря расширяемой конструкции Fluentd уже имеет плагин Scribe, который поддерживает агрегирование журналов через Thrift. Этот плагин на 100% совместим с Scribe и может заменить существующий экземпляр Scribe из коробки.

Просто чтобы продемонстрировать универсальность Fluentd … Fluentd также имеет плагин, который может выводить в Hoop , REST HTTP-шлюз с полной поддержкой операций HDFS. Список всех официально поддерживаемых плагинов можно найти в репозитории Fluent Github .

Установка

Предполагается, что эти плагины устанавливаются вместе с Fluentd.

Пакеты deb / rpm — безусловно, самый простой способ установить все три . Вот соответствующие ссылки:

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

В этом разделе рассказывается, как заменить систему на основе Scribe системой на основе Fluentd. Не волнуйтесь, это действительно замена.

Настройка Fluentd на интерфейсных узлах

Для внешних узлов используется плагин Scribe Input и Output (см. Ниже). Если у вас есть несколько узлов агрегатора, вы можете использовать [Плагин копирования]. ( Http://fluentd.org/doc/plugin.html#copy )

# Scribe Input
<source>
  type scribe
  port 1463
  add_prefix scribe
</source>

# Scribe Output
<match scribe.*>
  type scribe
  host log-aggregator-host
  port 1463
  field_ref message
</match>

Настройка Fluentd на узлах Log-Aggregator

Узлы агрегатора получают запросы от подключаемого модуля Scribe Input и выводят его в HDFS с помощью подключаемого модуля Hoop. Полученные журналы буферизуются и периодически добавляются к существующим файлам журналов в HDFS.

<source>
  type scribe
  port 14631
  add_prefix scribe
</source>

<match scribe.*>
  type hoop
  hoop_server hoop-server:14000
  path /hoop/%Y%m%d/scribe-%Y%m%d-%H.log
  username username
  time_slice_wait 30s
  flush_interval 5s
  output_include_time false
  output_include_tag  true
  output_data_type attr:message
  add_newline false
  remove_prefix scribe
  default_tag unknown
</match>

Вывод

Fluentd предоставляет Facebook-подобную инфраструктуру агрегации журналов для ваших серверов Разница лишь в том, что ваша система намного более гибкая и не требует поддержки армии инженеров.