FAT47の底辺インフラ議事録

学んだことのメモ帳です

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自体の性能監視とか冗長構成、スケールアウトあたりを調べないとなー。