[FlumeNG]FlumeNGを動かしてみる

昨日の続き。

 

mvnコマンドで作成された、

 flume-ng-dist-1.1.0-incubating-SNAPSHOT-dist.tar.gz

Linux環境で展開し、

できたディレクトリに移動します。

このディレクトリが基本的にFlumeNGを動かすHomeディレクトリになるので、

覚えておいてください。

 

先に起動方法について説明してしまいます。

以下のコマンドが基本形です。

 ./bin/flume-ng <node | avro-client> --conf <設定ディレクトリ> [-d 一時ディレクトリ] <オプション>

 

起動には以下2つのモードがあります。

①Flume nodeを起動する

 これはイメージとしては、

 転送されてきたログを受信する役割を持ちます。

 

 オプションとして、以下を指定する必要があります。

   -f <ファイル名> ⇒ 設定定義ファイルを指定する。

              この後紹介するプロパティファイルを指定します。

   -n <ホスト名> ⇒ FlumeNGが起動するホスト名を指定する。

             指定したホスト名で名前解決できなければいけません。

 

 実行時のコマンドはこんな感じ。

  ./bin/flume-ng node --conf ./conf -f ./conf/flume.properties -n centos57

 

②Flume Avro-Clientを起動する。

 これはイメージとしては、

 APLからログを取得し、ログを転送する役割を持ちます。

 

 オプションとして、以下を指定する必要があります。

   -H <ホスト名> ⇒ ログ転送を待ち受けているFlumeNGが起動しているホストを指定します。

   -p <ポート番号> ⇒ ログ転送を待ち受けているFlumeNGがbindしているポートを指定します。

   -F <ファイル名> ⇒(任意)転送するログデータが書き込まれたファイル名。

             指定したファイルを1行ずつ転送します。

             指定がない場合は、標準入力に与えられたデータを転送します。

 

 実行時のコマンドはこんな感じ。

  ./bin/flume-ng avro-client --conf ./conf -H centos57 -p 41414 -F /etc/hosts

 

ちなみに、

  ./bin/flume-ng help

で実行コマンドのヘルプが出るのですが、

明らかにドキュメントと食い違っています。

このhelp通りにすると動かないので、ドキュメントを信じてください。(笑)

 ※どこかで書きましたが、

  FlumeNGはまだ正式なリリースではなく、

  アルファ版的な位置づけです。実装中です。

 

②avro-clientはそのまま動かせばよいとして、

①nodeのほうは設定ファイル(ここではflume.properties)を記述する必要があります。

では、設定ファイルの記述ルールについて、説明します。

 

設定では当然、いろんな機能を指定できるのですが、

動かすことが今日のゴールなので、

ドキュメントどおりの設定に対し、必要最小限の変更を行って動かします。

 ※時間があれば各機能について説明がかければと思っています。

  待てない方はドキュメントに書いてあるとおり、

  JavaDocを読んでください。

 

まず、Source/Channel/Sinkの名前を決めます。

  <ホスト名>.sources = <Source名(任意)>
  <ホスト名>.channels = <Channel名(任意)>
  <ホスト名>.sinks = <Sink名(任意)>

次に、Sourceの設定を行います。

  <ホスト名>.sources.<Source名>.type = <Sourceタイプ>

  <ホスト名>.sources.<Source名>.<Sourceタイプのオプション> = <Sourceのオプション設定>
   ...

Source同様に、ChannelやSinkも設定します。

 

ドキュメントでは、

 ホスト名 ⇒ host1

 Source名 ⇒ avro-source1

 ...

としているので、

環境に依存するホスト名を今回のホスト名centos57に修正して、以下のとおりになります。

centos57.sources = avro-source1
centos57.channels = ch1
centos57.sinks = log-sink1

centos57.sources.avro-source1.type = avro
centos57.sources.avro-source1.bind = 0.0.0.0
centos57.sources.avro-source1.port = 41414
centos57.sources.avro-source1.channels = ch1

centos57.channels.ch1.type = memory

centos57.sinks.log-sink1.type = logger
centos57.sinks.log-sink1.channel = ch1

これにより、以下の挙動となります。

 Source:centos57(任意のIPアドレス)の41414ポートでListen

  ↓

 Channel:受信したログをメモリ上に蓄積

  ↓

 Sink:メモリ上のログをロガー設定に従い出力

    (デフォルトでは、標準出力に転送されたイベントそのまま出力となります。)

 


これで前述の起動コマンドでそれぞれ動かしてあげれば、

コンソール上に転送されたログを見ることができます!

 ※bodyの部分が文字化け(?)していて何かいてあるかわからないです。。。。

  おそらくString型ではなくByte型そのままではないかと思います。

 

停止は気合(Ctrl + c)でエラー出しながらとめてください。

 

以上です。

参考になれば。

逆に間違えている箇所があればコメントいただけると幸いです。