1

私は Apache Flume バージョン 1.3 を使用しており、Apache Flume User guideを参照しています。

私の目的は、Apache サーバーのログを Apache Flume Agent のチャネルに直接パイプすることです。私の理解が正しければ、Apache サーバーはローカル ファイルを作成しません。server.log、error.log ですが、対応する出力をエージェントのチャネルに直接書き込みます。ログに書き込む場合でも、エージェントはそれらのファイルから読み取ることはありません。しかし、少なくともApacheサーバーのドキュメントには、同じ例はありません。

私のクエリは次のとおりです。

  1. Apache Flume ではなく Cloudera Flume に関連するこのリンクを参照しました。これを試してみましたが、予想どおり、Apache サーバーでエラーが発生しました。

    /bin/sh: flume: not found
    piped log program 'flume node_nowatch -1 -s -n apache -c \\'apache:console|agentBESink("collector");\\'' failed unexpectedly
    piped log program 'flume node_nowatch -1 -s -n apache -c \\'apache:console|agentDFOSink("collector");\\'' failed unexpectedly
    

Apache Flume と Cloudera Flume が同期しているとは思えません。

  1. Apache サーバーのドキュメントによると、 Apache httpd は、ファイルに直接ではなく、パイプを介して別のプロセスにエラーおよびアクセス ログ ファイルを書き込むことができます。 実行中の Apache Flume エージェントでこれを達成するにはどうすればよいですか。つまり、Apache conf のエントリは何である必要がありますか?

CustomLog "| ?" 一般

4

1 に答える 1

1

私は同様のユースケースを試していました。あなたの問題は、flumeコマンドが(もう)存在しないことです。Flume の新しいバージョンでは、コマンドFlume-ngを使用します。

/etc/httpd/conf/httpd.conf で行ったこと:

# Default behaviour, but daily-rollover logging (|| does not spawn a new shell) 
CustomLog "||/usr/sbin/rotatelogs /var/log/httpd/access_log.%Y-%m-%d 86400" combined
# Send logging to local flume-agent
CustomLog "||/usr/bin/flume-ng avro-client -H localhost -p 10000" combined

Flume-agent 構成には、localhost に avro ソース バインドがあり、ポート 10000 でリッスンします。また、ファイル チャネルと、この場合は HDFS シンクです。

Flume-agent がクラッシュしたり、Flume を再起動したりすると、いくつかのログ イベントが失われることに注意してください。より耐久性のあるソリューションが必要な場合は、(古い/ローテーションされた) ログ ファイルを取得し、処理時に移動/削除する必要があります。

于 2015-08-26T14:02:18.520 に答える