fluentdの効果的な活用例と安定運用のポイント:今さら聞けないfluentd〜クラウド時代のログ管理入門(3)(1/3 ページ)
効率良く、意味のあるログ管理を実現するツールとして注目されている「fluentd」。最終回では、実際の利用シーンを想定し、より効果的なfluentdの利用法を紹介します。
第1回、第2回でfluentdを使って基本的なログ管理が実現できるようになったのではないでしょうか。fluentdはプラグインの組み合わせにより更に効果を発揮します。最終回では、実際の利用シーンを想定し、より効果的な利用法を紹介します。
fluentdの具体的な活用例
実際の利用シーンを想定した2つのfluentdの活用例を紹介します。
- 大量のログを分析し、「意味のある情報」として管理する
- タグデータを効果的に活用し、ログデータのフィルタリング管理を行う
1.大量のログを分析し、「意味のある情報」として管理する
Webサービスなどでは大量のアクセスログが発生します。そういった大量のアクセスログから「意味のある情報」を抽出する例を紹介します。
ここでは、WebサーバーとしてApacheを利用していると想定し、Apacheのログからリクエストの処理時間ごとのアクセス数をカウントして管理できるように設定します。
この目的を実現するために、以下の2つのプラグインを活用します。
- in_tailプラグイン(第2回で紹介した組み込みプラグイン)
- out_datacounterプラグイン(データの統計処理を実行するプラグイン)
・設定例
<source> type tail format /^(?<responsetime>[^ ]*)/ #fluentdに取り込む際のフォーマット指定(先頭から最初の空白までをresponsetimeとして取り込む設定例) path /var/log/httpd/access_log tag apache.responsetime </source> <match apache.responsetime> type datacounter count_interval 5m #統計処理する対象データの時間間隔指定 count_key responsetime #統計処理対象とするデータが含まれるキーの指定 tag responsetime.analysis #統計処理結果に新たに付与するタグ(このタグが付与された状態で、新たにmatchディレクティブの評価が走ります) pattern1 1digit ^\d{1}$ #キーの値を正規表現で分類して値ごとに統計処理する設定を記述 pattern2 2digit ^\d{2}$ pattern3 3digit ^\d{3}$ </match> <match responsetime.analysis> 最終的にカウントした結果を格納したいアウトプットプラグインの設定 </match>
in_tailプラグインの設定では、Apacheのアクセスログをチェックする設定を行っています。この時、formatとして正規表現を指定している点に注意してください(注1)。
注1:in_tailに標準で組み込み定義されているApache関連のformat
in_tailには、Apacheのログファイルを処理できる「apache」や
「apache2」という指定方法が標準で用意されています。
/^(?<host>[^ ]*) [^ ]* (?<user>[^ ]*) \[(?<time>[^\]]*)\] "(?<method>\S+)(?: +(?<path>[^ ]*) +\S*)?" (?<code>[^ ]*) (?<size>[^ ]*)(?: "(?<referer>[^\"]*)" "(?<agent>[^\"]*)")?$/
このように、空白区切りで各要素をキーとペアで管理できるようになっています。
正規表現の名前付き後方参照で指定すると、Apacheのアクセスログの記述の特定の部分に対してキーを付けて管理することが可能になります。
ここでは、各行の先頭の項目(先頭から最初の空白まで)に対して「responsetime」というキーを付け、データを管理できるようにする設定例を紹介します。そのためにはまず、Apacheのログフォーマットの設定において、各行の先頭に処理時間を出力できるようにする事前設定が必要です。
具体的には、Apacheのログフォーマットに次のような設定を行います。
%T %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"
先頭の「%T」が、処理時間を秒単位で出力するための設定です(もっと詳細な時間を出力したい場合は「%D」でマイクロ秒単位を指定)。この設定により、in_tailプラグインから以下のような形式でデータが取得できます。ここで示したのは、処理に2秒かかったログデータの場合です。
apache.responsetime { "responsetime":"2" }
このデータをout_datacounterプラグインで処理します。このプラグインの設定では、指定したキー(count_key)の値をパターンごとに統計処理して出力します。
上記の例では、5分間のデータを集計して、処理時間の桁数ごと(0〜9秒、10〜99秒、100秒〜999秒およびその他)に統計処理しています。その結果、以下の3種類のデータが出力されます。
- count:count_interval間に発生した件数
- rate:単位時間当たりの発生頻度
- percentage:count_interval間に発生した全体件数に占める該当パターンデータの割合
出力されるデータは以下のような形式になります。
responsetime.analyisys { "apache.responsetime_unmatched_count":0, "apache.responsetime_unmatched_rate":0.0, "apache.responsetime_unmatched_percentage":0.0, "apache.responsetime_1digit_count":72, "apache.responsetime_1digit_rate":0.24, "apache.responsetime_1digit_percentage":83.72093023255815, "apache.responsetime_2digit_count":11, "apache.responsetime_2digit_rate":0.03, "apache.responsetime_2digit_percentage":12.790697674418604, "apache.responsetime_3digit_count":3, "apache.responsetime_3digit_rate":0.01, "apache.responsetime_3digit_percentage":3.488372093023256, }
後はこの各データをファイルに出力してリポートにしたり、監視ツールに出力してグラフ化したりすることで、処理時間の傾向分析に活用できます。
Copyright © ITmedia, Inc. All Rights Reserved.