Агент Flume: как агент Flume получает данные с веб-сервера, расположенного на другом физическом сервере.

Я пытаюсь понять Flume и ссылаюсь на официальную страницу Flume по адресу flume.apache.org.

В частности, ссылаясь на этот раздел, я немного запутался в этом .

Нужно ли нам запускать агент Flume на реальном веб-сервере или мы можем запускать агенты Flume на другом физическом сервере и получать данные с веб-сервера?

Если приведенное выше верно, то как агент Flume получает данные из журналов веб-сервера? Как веб-сервер может сделать свои данные доступными для агента Flume?

Может ли кто-нибудь помочь понять это?


person CuriousMind    schedule 08.04.2018    source источник


Ответы (1)


Агент Flume должен извлекать данные из источника, публиковать их в канале, который затем записывает их в приемник.

Вы можете установить агент Flume как в локальной, так и в удаленной конфигурации. Но имейте в виду, что его удаленность добавит некоторую задержку в сети к обработке ваших событий, если вас это беспокоит. Вы также можете «мультиплексировать» агенты Flume, чтобы иметь один удаленный агент агрегации, а затем отдельные локальные агенты на каждом веб-сервере.

Предполагая, что агент Flume установлен локально с использованием источника Spooldir или exec, он, по сути, tail удалит любой файл или запустит эту команду локально. Вот как он будет получать данные из журналов.

Если агент Flume настроен как источник Syslog или TCP (см. раздел «Прием данных» в сетевых источниках), то он может находиться на удаленном компьютере, и вы должны установить сетевой сокет в своем приложении для ведения журнала, чтобы публиковать сообщения на другом сервере. Это аналог Apache Kafka.

person OneCricketeer    schedule 08.04.2018
comment
Спасибо за Ваш ответ. Вы упомянули --› см. раздел «Прием данных» в сетевых источниках, на какую книгу или справочник вы ссылаетесь? Не могли бы вы рассказать об этом немного подробнее? - person CuriousMind; 09.04.2018
comment
сетевые потоки. Та же страница, на которую вы ссылаетесь. flume.apache.org/FlumeUserGuide.html#network-streams - person OneCricketeer; 09.04.2018
comment
У меня все еще есть одно сомнение: предположим, у меня есть физический сервер (скажем, phy-ser-A), на котором работает Apache httpd и, скажем, httpd ведет журнал в файл /var/logs/apache/htttpd/application.log . Мы не вносили никаких изменений в httpd, то есть он регистрируется только в локальной файловой системе, в которой работает httpd. Теперь, как удаленный агент Flume получит журналы httpd? Я не могу этого понять. Даже если мы запустим агент phy-serv-A, как агент получит логи с httpd? Можете ли вы помочь понять, как реализуются эти сценарии? - person CuriousMind; 10.04.2018
comment
Вы запускаете агент Flume, чтобы указать на этот файл журнала. Вы можете опционально отправить свои данные локального агента Flume удаленному. - person OneCricketeer; 10.04.2018
comment
Альтернативными технологиями для этого же шаблона развертывания являются Fluentd или Filebeat. - person OneCricketeer; 10.04.2018
comment
Спасибо за ваш ответ. Таким образом, это означает, что для phy-ser-A, в котором httpd работает и регистрируется в /var/logs/apache/httpd/application.log, у нас может быть локальный агент Flume phy-ser-A-flume-agent, он указывает в каталог /var/logs/apache/httpd/, чтобы любые изменения, происходящие в этом каталоге, он мог отправлять другому агенту Flume, работающему в phy-ser-B, и который может консолидировать данные в HDFS. Это верно? - person CuriousMind; 10.04.2018
comment
Единственная причина, по которой вы вообще запускаете удаленный агент Flume, заключается в том, что 1) вы агрегируете журналы более чем одного веб-сервера перед загрузкой в ​​HDFS (см. Проектирование топологии Flume и мультиплексирование секций потока. ) или 2) Веб-сервер не может получить прямой доступ к HDFS по сети, но может получить доступ к пограничному узлу, на котором работает указанный удаленный сервер агента Flume. - person OneCricketeer; 10.04.2018