Fluentdでは様々なデータを構造化することができるので、フロント側の可視化ツールに渡す事も柔軟に
対応できます。
そこで今回は、GrowthForecastという可視化ツールに表示させてみます。

データはApacheのログを利用し、表示する内容はHTTPステータスコードの2xx,3xx,4xx,5xxのそれぞれの回数を
時系列で表示してみます。
また、GrowthForecastはデータのスタックにDBを使用し、デフォルトではsqlite3ですが、今回はRDSのMySQLを
利用してみます。

構成は下図のようなイメージになります。

○管理サーバー(222.222.222.222)

はじめに、管理サーバーのEC2インスタンスにGrowthForecastをインストールします。

必須ライブラリをインストールします。

# yum groupinstall "Development Tools"
# yum install pkgconfig glib2-devel gettext libxml2-devel pango-devel cairo-devel cpan mysql-devel bitmap-console-fonts

perlbrewcpanmをインストールします。

# cpan YAML JSON::XS
# curl -kL http://install.perlbrew.pl | bash
# cpan App::perlbrew perlbrew init
# perlbrew install perl-5.16.0
# perlbrew switch perl-5.16.0
# cd /usr/bin
# curl -LO http://xrl.us/cpanm
# chmod +x cpanm
# cpanm --self-upgrade

GrowthForecast をインストールします。

# cpanm -n http://nomadscafe.jp/pub/GrowthForecast/GrowthForecast-0.34.tar.gz

次に、RDSを設定します。
今回内容は概ねデフォルトで問題ありません。

完了したら、接続権限を設定します。
RDSのエンドポイントに対して接続し、GRANT文を定義します。

# mysql -u memorycraft growthforecast -pmemorycraft-pass -h growthforecast.cwnvl1ncuiwq.ap-northeast-1.rds.amazonaws.com
mysql>GRANT CREATE, ALTER, DELETE, INSERT, UPDATE, SELECT ON growthforecast.* TO 'memorycraft'@'222.222.222.222' IDENTIFIED BY 'memorycraft-pass';

また、RDSのセキュリティグループも設定します。

また、管理サーバーのEC2の5125(GrowthForecastのデフォルトポート)のInboundに管理者とWEBサーバーから
接続できるように追加しておきます。

GrowthForecastを起動します。
–with-mysqlオプションを付けると、データベースにMySQLを使用するようになるので、
RDSのエンドポイント付きのdsnを渡します。

MYSQL_USER=memorycraft MYSQL_PASSWORD=memorycraft-pass growthforecast.pl --with-mysql dbi:mysql:growthforecast:growthforecast.cwnvl1ncuiwq.ap-northeast-1.rds.amazonaws.com

これで起動されました。
http://222.222.222.222:5125/を見ると以下のように、まだグラフが何も表示されていません。

○WEBサーバー(111.111.111.111)

GrowthForecastはAPI経由でデータを登録するのが基本です。
そしてfluentdには、GrowthForecastにAPI登録する、fluent-plugin-growthforecastという
アウトプットフィルタがあるので、今回はこれを利用します。
また、ログ中のHTTPステータスコードをカウントする為に、fluent-plugin-datacounterも利用します。

fluentd(td-agent)のインストールはFluentdってなんじゃ?の記事の通りです。

/usr/lib/fluent/ruby/bin/fluent-gem install fluent-plugin-growthforecast
/usr/lib/fluent/ruby/bin/fluent-gem install fluent-plugin-datacounter

td-agent.confは以下のように設定します。

tail: Apacheのログを正規表現で構造化
datacounter: statusを2xx,3xx,4xx,5xxに分類して其々をカウント
growthforecast: datacounterの結果をGrowthForecastへ投稿

この場合は下記への投稿になります。

http://222.222.222.222:5125/api/admintool/httpstatus/グラフ名

グラフ名には下記のように入ります。

apache.httpstatus_apache_2xx_count

これは下記の形で、datacounterとgrowthforecastの2つのディレクティブを通過している為のようです。
この名前が冗長であれば、それぞれのディレクティブでremove_prefix等を使って調整等が行えそうです。

growthforecastのタグ_オリジナルタグ_パターン名_count


  type tail
  format /^(?[^ ]*) [^ ]* (?[^ ]*) ¥[(?¥S+)(?: +(?[^ ]*) +¥S*)?" (?[^ ]*) (?[^ ]*)(?: "(?[^¥"]*)" "(?[^¥"]*)")?$/
  time_format %d/%b/%Y:%H:%M:%S %z
  path /var/log/httpd/access_log
  tag apache
  pos_file /tmp/access.log.pos



  type copy
  
    type stdout
  
  
    type datacounter
    tag apache.httpstatus
    aggregate tag
    count_key status
    pattern1 2xx ^2¥d¥d$
    pattern2 3xx ^3¥d¥d$
    pattern3 4xx ^4¥d¥d$
    pattern4 5xx ^5¥d¥d$
  



  type copy
  
    type stdout
  
  
    type growthforecast
    gfapi_url http://222.222.222.222:5125/api/
    service admintool
    section httpstatus
    name_keys apache_2xx_count,apache_3xx_count,apache_4xx_count,apache_5xx_count
  

ここまで出来たら、td-agentを起動します。

/etc/init.d/td-agent start

以上で設定は完了です。
WEBサーバーのコンテンツにアクセスしてから、管理サーバーのGrowthForecastのアドレス
(http://222.222.222.222:5125)を見てみます。
下記のように、項目が表示されています。

上記のリンクを辿って行くと、4つのグラフが表示されています。

ここで、「複合フラグの追加」というリンクをクリックすると4つの項目を1つのグラフに統合した新しいグラフを
作ることができます。
基本のグラフに加え、2番目以降の系列に残りの項目を追加していくと、以下の様にスタックされたグラフを
作成することができます。

datacounterというとても汎用的プラグインと、GrowthForecastというとても便利なグラフ化ツールで、
色々なリソースを可視化してみると、運用の負荷軽減だけではなく、ユーザーの動向等も把握することが
できます。

こちらの記事はなかの人(memorycraft)監修のもと掲載しています。
元記事は、こちら