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
# 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 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)監修のもと掲載しています。
元記事は、こちら