ERES + Fluentd かんたんログ活用術 – その① ログの収集


ERES + Fluentd かんたんログ活用術の第2弾です。前回はログ収集を行うためのミドルウェア「Fluentd」をインストールしました。今回はログの収集を行ってみたいと思います。最終的な目的はアプリケーションサーバ上のログをログ収集サーバへ収集することですが、まずはアプリケーションサーバ内でログの収集が行えるかを試してみましょう。

WindowsにインストールされたFluentdの設定ファイルはC:\fluentd\fluent.confです。この中にログの収集元と収集先について記載します。

<source>
type tail
format /^(?<rep_id>[^\t]*)\t(?<time>[^\t]*)\t(?<status>[^\t]*)\t(?<session>[^\t]*)\t*(?<session_time>[^\t]*)\t*(?<success>[^\t]*)\t*(?<fail>[^\t]*)\t*(?<total>[^\t]*)/
time_format %Y-%m-%d %H:%M:%S.%L
path C:\Program Files\HiT Software\DBMoto V8\Log\DBMoto_0001.his
pos_file C:\Program Files\HiT Software\DBMoto V8\Log\DBMoto_0001.his.pos
tag dbmoto.history
</source>

<source>~</source>
データの入力プラグインの指定を行います。type tailでin_tailプラグインを指定していることを表しています。プラグインごとに必要な設定値もこの中に記述します。

type tail
対象ファイルの更新を検知し、追加された行を1行ずつ取得します。

format /^(?<rep_id>[^\t]*)\t(?<time>[^\t]*)\t(?<status>[^\t]*)\t(?<session>[^\t]*)\t*(?<session_time>[^\t]*)\t*(?<success>[^\t]*)\t*(?<fail>[^\t]*)\t*(?<total>[^\t]*)/
tailする対象のデータ形式を正規表現で記述します。今回対象となるDBMotoのhistoryログを正規表現でパースすることで、JSON形式のデータにしています。apacheとsyslogには正規表現のテンプレートが用意されていますが、その他のデータでは自分で正規表現のフォーマットを作成する必要があります。Fluentdでトライアンドエラーを行うのは大変なので、次のサイトを使うと便利です。
http://fluentular.herokuapp.com/

time_format %Y-%m-%d %H:%M:%S.%L
timeフィールドの形式。このパラメータは、’time’という項目がデータに含まれていて、それが自動的に解析できない場合にのみ必要です。

path C:\Program Files\HiT Software\DBMoto V8\Log\DBMoto_0001.his
参照するファイルのパスです。

pos_file C:\Program Files\HiT Software\DBMoto V8\Log\DBMoto_0001.his.pos
tailしているファイルのどこまでをtailしたかという位置情報をファイルに保存する場合に、そのファイルパスを記述します。これでfluentdがダウンした場合も、元の場所からtailを再開できます。

tag dbmoto.history
tailしたデータtagを指定します。このtagにマッチしたデータをアウトプットします。

<match dbmoto.history>
type file
path C:/fluent/test
time_slice_format %Y%m%dT%H%M%S
</match>

<match>~</match>
出力プラグインの指定を行います。この出力プラグインに振り分けるタグを指定する必要があります。ワイルドカードや{}を使ったOR条件の指定も可能です。

type file
他の出力から受け取ったバッファをファイルに書き出すプラグインです。

path C:/fluent/test
ファイルの出力先となるパスです。実際のファイル名はtime_slice_format+suffix+.logです。

time_slice_format %Y%m%dT%H%M%S
ファイル名のpath以降に追加される時間のフォーマット形式です。

設定ファイルの変更後は、サービスの再起動が必要です。前回Windowsサービスとして登録したので、GUIでサービスを再起動します。

これで、設定が有効になったので、実際に動作するか確認してみましょう。DBMotoを動かして、sourceで指定したパスにログが追加されました。

e+f_04

e+f_05

すると、matchで指定したパスに新たなファイルが追加されています。

e+f_06

ファイルを開いて見てみると、正規表現でJSON形式にパースされたログが記述されています。成功のようです。

e+f_07

では、次に本来の目的であるログ収集サーバへのアプリケーションサーバのログ収集を行います。別Fluentdサーバへのログ転送にはout_forwardプラグインを使用するので、このプラグインに合わせて、設定ファイルを編集します。

<match dbmoto.history>
type forward
<server>
host 192.168.0.37
port 24224
</server>
</match>

<server>~</server>に転送先のホストとポートを指定します。ポートには24224を使用するので、ログ収集サーバではUDP 24224を事前に開けておきます。

これで、送信側であるアプリケーションサーバの設定は終わりました。次は受信側のログ収集サーバの設定を行います。Linux上のFluentdの設定ファイルは、/etc/td-agent/td-agent.confです。

<source>
type forward
</source><match **>
type file
path /var/log/td-agent/test_log
time_slice_format %Y%m%dT%H%M%S
</match>

<source>~</source>内のin_forwardプラグインでout_forwardプラグインから転送されたデータを受け取ります。設定変更後はサービスを再起動します。次のコマンドを実行してください。

$ /etc/init.d/td-agent restart

これで設定が有効になるので、DBMotoを動かしてログを吐き出してみます。

e+f_08

/var/log/td-agent/に出力されたログを見てみると、問題なく出力されています。

e+f_09

これで、アプリケーションサーバからログ収集サーバへのログの収集が完了です。

その② DBへの出力につづく

関連するトピックス:

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください