【Fluentd】アプリケーションログを転送し、オリジナルと同じ状態で出力する

投稿日: / 更新日:

この記事は2年以上前に書かれたものです。情報が古い可能性があります。

前回の課題として、受信サーバ側で出力する際のログのフォーマットが変わってしまう、というものがありました。「fluent-agent-lite、もしくはfile-alternativeプラグインを使用することで対処できる」というコメントを頂きましたので、今回は、それらを検証してみたいと思います。

fluent-agent-liteは送信専用のエージェントで、ログの増分を他のfluendへ送信する機能を持ちます。Perlで作成されており、ログ増分を正規表現でパースしないため、動作が軽いのが特徴です。一方、fluent-plugin-file-alternativeはfluentdのファイル出力用プラグインで、ログ出力時の形式をカスタマイズすることができるようです。

1. 受信サーバ側でfluent-plugin-file-alternativeを使用する

それでは、最初にfile-alternativeプラグインのみを使用して設定してみます。前回の設定作業に加えて、受信サーバ側にこのプラグインをインストールします。ここでは、fluentdに組み込まれているRubyのfluent-gemコマンドを使用してインストールを行います。ちなみに、RHEL 6.xのRubyはバージョンが古いため、OSのパッケージ版のgemコマンドを使用してインストールすることはできません。

これで、プラグインのインストールは完了です。次に、受信サーバ側のtd-agentの設定ファイルを編集します。なお、/etc/td-agent/td-agent.confについては、前回の設定内容を全てご破算とし、下記の1行のみを記述します。

設定ファイル編集後は、受信サーバ側のtd-agentサービスを再起動します。

次に、送信サーバ側のtd-agentの設定を少し変更します。これにより、1行分のログを全てmessageという名前でキャプチャして転送します。

設定ファイル編集後は、同様に送信サーバ側のtd-agentサービスを再起動します。これで準備完了です。早速、送信サーバ側のhttpdを再起動して、ログが転送されることを確認します。

期待どおり、送信サーバ側のhttpdのログと全く同じ内容が、受信サーバ側に出力されました。

2. 送信サーバ側でtd-agentの代わりにfluent-agent-liteを使用する

ここまでで当初の目的は達成できたのですが、折角なのでfluent-agent-liteの方も検証してみたいと思います。GitHubからzipアーカイブを入手し、解凍してインストーラを実行します。なおインストールの途中で、依存するCPANモジュールが自動的にインストールされますが、一部XSを使用するモジュールが含まれているため、事前にgccをインストールしておく必要があります。

次に、fluent-agent-liteの設定ファイルを編集します。

設定ファイルの編集が済んだら、td-agentを停止し、代わりにfluent-agent-liteを起動します。

fluent-agent-liteが起動しました。念のため、プロセスを確認してみます。

perlのプロセス、及びその子プロセスとしてtailコマンドが実行されていることが確認できます。それでは、送信サーバ側でhttpdを再起動し、ログが受信サーバ側に出力されるかどうか確認します。

こちらも期待どおり、送信サーバ側のhttpdのログと全く同じ内容が、受信サーバ側に出力されました。なおfluent-agent-liteの方は、ログ増分を検知すると、直ちに宛て先のfluentdへ送信するようです。

ちなみに、fluent-agent-liteはログ送信専用ということもあり、転送するログを設定ファイルで少なくとも1つ以上指定する必要があるようです(1つも指定しない場合、プロセスが起動後すぐに終了します)。また、転送するログが複数ある場合は、その数だけperlのプロセスとtailの子プロセスが作成されるようです。

以上、簡単ですがfluentdに関する話題をご紹介しました。今後機会があれば、より深く掘り下げてみたいと思います。

Hinemos導入はアトミテックにお任せください

見積もりを依頼する

最新情報発信中

Xやメルマガでも、Hinemosの保守、
開発、導入、構築やカスタマイズ等の
お役立ち情報を発信しています。
是非ご登録ください。