Fluentdで収集したログのHTTPステータスコードを集計し、結果をGrowthForecastでグラフ化する
最近個人的にいろいろ弄っているFluentdでまた記事をかきます。
これからやること。
(1) Fluentdで収集したApacheログをGrowthForecastでグラフ化
(2) fluent-plugin-datacounterを利用して、ログのHTTPステータスコードのチェックと集計を行い、結果をfluent-plugin-growthforecastでグラフ化
Fluentdの説明と導入記事は前回の記事で。
Apacheログをfluentd+MongoDBで収集しRubyで集計
GrowthForecastの導入も前回の記事から。
様々な値をWebAPI経由でグラフ化できる「GrowthForecast」をインストールしてみた
まず
(1)Fluentdで収集したApacheログをGrowthForecastでグラフ化
GrowthForecastのWebAPIを叩いてくれるfluent-plugin-growthforecastをインストールします。
/usr/lib64/fluent/ruby/bin/gem install fluent-plugin-growthforecast
td-agent.confの編集
※apacheのログフォーマットが以下の場合の設定
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %D" combined
<source> type tail format /^(?<host>[^ ]*) [^ ]* (?<user>[^ ]*) \[(?<time>[^\]]*)\] "(?<method>\S+)(?: +(?<path>[^ ]*) +\S*)?" (?<status>[^ ]*) (?<size>[^ ]*)(?: "(?<referer>[^\"]*)" "(?<agent>[^\"]*)" (?<response_time>[^ ]*))?$/ time_format %d/%b/%Y:%H:%M:%S %z path /var/log/httpd/127.0.0.1-access_log tag apache.access </source> <match apache.access> type growthforecast gfapi_url http://localhost:5125/api/ service serviceName section metricsName name_keys response_time </match>
設定変更完了したらtd-agentの再起動します。
ブラウザから確認
http://localhost:5125
しばらく経つと、レスポンスタイムがグラフ化されてでてきます!
続いて、
(2) fluent-plugin-datacounterを利用して、ログのHTTPステータスコードのチェックと集計を行い、結果をfluent-plugin-growthforecastでグラフ化
まずはfluent-plugin-datacounterをインストールします。
/usr/lib64/fluent/ruby/bin/gem install fluent-plugin-datacounter
matchの部分を以下のように変更します。
<match apache.access> type datacounter unit minute tag httpstatus count_key status pattern1 3xx ^3\d\d$ pattern2 4xx ^4\d\d$ pattern3 5xx ^5\d\d$ pattern4 200 ^200$ </match> <match httpstatus> type growthforecast gfapi_url http://localhost:5125/api/ service serviceName section metricsName name_keys apache.access_200_count,apache.access_4xx_count,apache.access_3xx_count,apache.access_5xx_count </match>
match apache部分のcount_key項目でapacheログで集計したい項目を指定します。
今回はステータスコードを見たいのでstatusを指定してます。レスポンスタイムが図りたかったらresponse_timeを指定します。
patternにはそれぞれを集計するための正規表現を書きます。今回はコード200と3xx,4xx,5xxが来たら集計するようにしてます。
match httpstatus部分のname_keysの部分でグラフ化したいステータス項目を指定します。先程指定した4パターンのパラメータ名を指定すると例のようになります。
パラメータ名を確認したい場合は、一度typeをfileに指定してログファイルを吐き出させてみるのもいいと思います。
※グラフ化しないで集計した結果をログファイルに吐く設定。
<match httpstatus> type file path /var/log/fluent/status </match>
設定が完了したらtd-agent再起動
ブラウザから確認すると、例のごとく項目が追加されており、
集計されたステータスコードが集計されました!
このFluentdとプラグインを組み合わせることで、
・レスポンスタイムの測定と記録
・HTTPステータスコードの記録
ができるので、Webサービスの品質向上に役立てます。
大規模な環境だと、すこし導入の作業コストが重めなのが気になってしまいますが…。
次はFluentd自体の性能監視とか冗長構成、スケールアウトあたりを調べないとなー。