中継サーバーでの設定
アプリケーションサーバーのFluentdから送信されてきたログを、forwardプラグイン(*4)で受信します。受信結果をfileプラグイン(*4)でファイルに書き出しするとともに、受信したログを分析しHTTPステータスコード別にカウントをdatacounterプラグイン(*4)でカウントします。
リスト10では、<source>でforwardプラグインを指定して受信しています。受信したログのタグが、nginx.accessの場合、「<match nginx.access>」で指定した処理をします。受信したログに対し、ファイルへの書き込みとステータス別のカウントとの2通りの処理を実施するために、イベントログを複数のアウトプットプラグインに渡すプラグインであるcopyを使用して処理を分岐させます。
copyの一つめのstoreで、「/var/log/fluentd」配下に接頭辞「access_log」を付けたファイルに書き込まれます。copyの2つめのstoreで、60秒区切りで「status」キーを正規表現で指定したパターンに合致するログ数をカウントし、タグ「nginx.status」をつけてFluentdに再投入しています。
受信したログのタグが、nginx.statusの場合、「<match nginx.status>」で指定した処理をします。プラグインgrowthforecastを使用して、グラフ描画サーバーでリッスンしているAPIのURLを指定して、GrowthForecastに値を登録しています。
<source> type forward port 24224 </source> <match nginx.access> type copy <store> type file path /var/log/fluentd/access_log time_slice_format %Y%m%d_%H%M time_slice_wait 30s time_format %Y-%m-%d %H:%M:%S </store> <store> type datacounter tag nginx.status count_interval 60s aggregate all count_key status pattern1 2xx ^2\d\d pattern2 3xx ^3\d\d pattern3 4xx ^4\d\d pattern4 5xx ^5\d\d </store> </match> <match nginx.status> type growthforecast gfapi_url http://gf01/api/ service nginx section example tag_for ignore name_key_pattern .*_(count|percentage)$ </match>
datacounterプラグインは、ユーザーによって作成されたプラグインなので別途追加する必要があります。追加するには、fluent-gemを使用します(リスト11)。
# /usr/lib64/fluent/ruby/bin/fluent-gem install fluent-plugin-datacounter
グラフ描画サーバーの準備
JSONでデータを登録するグラフ描画ミドルウェアのGrowthForecastは、Fluentdと相性が良いため、よく使用されています。ここでは簡単にインストール方法のみを紹介しておきます。GrowthForecastの詳細については、公式サイトを参照してください。
GrowthForecastは、依存パッケージをインストールした後、cpanmコマンドでインストールします(リスト12)。
$ sudo yum groupinstall "Development Tools" $ yum install pkgconfig glib2-devel gettext libxml2-devel pango-devel cairo-devel $ cpanm -n https://github.com/downloads/kazeburo/GrowthForecast/GrowthForecast-0.31.tar.gz $ growthforecast.pl --port 80 > /usr/local/growthforecast/log/gf.log 2>&1 &
以上で準備が完了です。Nginxにアクセスがあり、アクセスログが書き込まれると、図5のようにグラフが描画されます。
まとめ
Fluentdという基盤では、さまざまなログを一元的に収集し、各種データストアに格納することが実現できるようになりました。設定ファイルも分かりやすいので導入しやすく、リアルタイムに近い早さで画一的にログを取り扱うことができます。Fluentdを使用して、これまで眠っていたログの有効活用を検討してみてはどうでしょうか。