Fluentdではさまざまなデータを構造化することができるので、フロント側の可視化ツールに渡すことも柔軟に対応できます。今回はGrowthForecastという可視化ツールに表示させてみます。
データはApacheのログを使い、表示する内容はHTTPステータスコードの2xx,3xx,4xx,5xxのそれぞれの回数を時系列で表示してみたいと思います。またGrouthForecastはデータのスタックに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
# 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を設定します。
今回は内容はほぼデフォルトでOKです。
設定したら接続権限を設定します。
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';
GrowthForacastを起動します。
--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)のインストールは以前の記事の通りです。
/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
のように入ります。
のように入ります。
これは
growthforecastのタグ_オリジナルタグ_パターン名_count
の形で、datacounterとgrowthforecastの2つのディレクティブを通過しているためのようです。この名前が冗長であれば、それぞれのディレクティブでremove_prefixなどを使って調整など行えそうです。
<source> type tail format /^(?<host>[^ ]*) [^ ]* (?<user>[^ ]*) \[(?<time>[^\]]*)\] "(?<method>\S+)(?: +(?<path>[^ ]*) +\S*)?" (?<status>[^ ]*) (?<size>[^ ]*)(?: "(?<referer>[^\"]*)" "(?<agent>[^\"]*)")?$/ time_format %d/%b/%Y:%H:%M:%S %z path /var/log/httpd/access_log tag apache pos_file /tmp/access.log.pos </source> <match apache> type copy <store> type stdout </store> <store> 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$ </store> </match> <match apache.httpstatus> type copy <store> type stdout </store> <store> 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 </store> </match>
ここまで出来たら、td-agentを起動します。
/etc/init.d/td-agent start
これで設定は完了です。
WEBサーバーのコンテンツに適当にアクセスしてから、管理サーバーのGrowthForecastのアドレス(http://222.222.222.222:5125)を見てみます。
項目が出来ています。このリンクを辿って行くと、、
おお、4つのグラフが表示されています。
ここで、「複合フラグの追加」というリンクをクリックすると4つの項目を1つのグラフに統合した新しいグラフを作ることができます。基本のグラフに加え、2番目以降の系列に残りの項目を追加していくと、以下の様にスタックされたグラグを作成することができます。
datacounterという汎用的すぎるプラグインと、GrowthForecastというとても便利なグラフ化ツールで、いろいろなリソースを可視化してみると、運用の負荷軽減だけではなく、ユーザーの動向などもわかってお得ですね。
以上です。