ERES + Fluentd かんたんログ活用術 – その③ フィルタリング


ERES + Fluentd かんたんログ活用術の第4弾です。前回の記事では、DBへの出力を行いました。今回はフィルタリング機能についてご紹介します。

DBMotoは一定のインターバル(デフォルト1分)ごとに更新を検知して、ターゲットDBへ反映しています。そして、historyログにはこのインターバルごとにログが追記されるわけですが、各インターバルで毎回、ソースDBに更新があるとは限りません。むしろ更新が「0」件のインターバルの方が多いでしょう。そうなると、更新が「0」件のログに、実際に更新があった時のログが埋もれて、必要な情報を見逃してしまうかもしれません。そこで、今回は更新が「0」件のログは除外して、更新があったインターバルのログのみをDBに出力するようにフィルタリングを行ってみます。

e+f_11

フィルタリングの条件はstatusが「Info」で、totalが「0」のものとします。statusはインターバルが正常終了した場合に「Info」となり、異常終了した場合に「Err」となるので、正常終了したものを対象とします。そして、totalはターゲットDBへの反映に成功した件数(success)と失敗した件数(fail)を足したもの、つまり更新があった件数を表していますので、これが「0」件のものを対象とします。つまり、statusが「Info」かつtotalが「0」でないものをDBへ出力します。

この条件でフィルタリングを行えるプラグインを探したところ、ignoreというプラグインがありましたので、これを利用します。では、早速インストールします。

/usr/sbin/td-agent-gem install fluent-plugin-ignore-filter

 

インストールが完了したら、設定ファイルにフィルターを追加します。

<source>
type forward
</source><filter dbmoto.history>
type ignore
regexp1 status Info
regexp2 total ^0
</filter><match dbmoto.history>
type pgjson
~~~~~
</match>

 

使い方としては、regexp1, regexp2のすべてにマッチしたものを除外します。この記述ではstatusが「Info」かつtotalが「^0」のものを除外しています。「^0」は正規表現で、行頭が0のものを表しています。

設定ファイルを編集したらサービスを再起動して、反映させます。

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

 

そして、フィルタリングが有効になった結果が下の図です。更新がないログについては、出力されていません。このようにフィルタリングを行うことで、必要なログ情報のみを収集することができます。

e+f_12

その④ ERESによる可視化につづく

関連するトピックス:

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です