今回の対象ログは、WildFly が出力する access.log とします。Apache httpd の access_log 相当のログです。
なお、本ブログは以下の記事を参考にしています。それぞれの設定の意味合いなどは、そちらのブログを参照いただければと思います。
ステップバイステップで学ぶ Fluentd + GrowthForecast でグラフ作成まとめ
目標
access.log ログを収集・解析し、レスポンスタイムの統計情報(最小値・最大値・平均値など)をグラフ化する。大まかな流れ
- WildFly/JBoss AS7 の設定
- Fluentd の設定
- ログ送信サーバ(fluent-agent-lite) の設定
- ログ受信サーバ(td-agent)の設定
- グラフ化サーバ(GlowthForecast) の設定
- 動作確認
環境
- CentOS 6.4 64bit
- Maven 3.1.0
- WildFly...と言いたいところですが、JBoss AS7.2.0 Final※
- Fluentd(td-agent-1.1.14-0)
- fluent-agent-lite-0.9
- GlowthForecast
※ 2013/08/31 現在、WilfFly のバージョンは 8.0.0 Alpha4 ですが、access.log を出力する機能は次リリース版である Beta1 です。また、現在レスポンスタイムの出力機能が Undertow(WIldFly の Web 部)に入っていないため、Beta1 のリリースに含まれるか微妙なところです。WildFly においてレスポンスタイムの出力が確認され次第、ブログも反映いたします。
Access log support - WildFly JIRA
Access log support - WildFly JIRA
JBoss AS7 の設定
インストール
JBoss AS7.2.0.Final のバイナリはコミュニティにて配布されていませんので、自分でビルドする必要があります。またビルドスクリプト(build.sh)の実行に Maven が必要ですので、あらかじめインストールください。なお、ここでは時間短縮のため、テストを省略してビルドしています。
$ git clone https://github.com/wildfly/wildfly.git $ cd wildfly $ git checkout refs/tags/7.2.0.Final $ ./build.sh -DskipTests=true
wildfly/build/target/jboss-as-7.2.0.Final が作成されたバイナリです。適当なところにインストールください。このインストールパスを $JBOSS_HOME と表記します。
ログ設定
$ cd $JBOSS_HOME/bin $ ./standalone.sh $ ./jboss-cli.sh -c --command='/subsystem=web/virtual-server=default-host/access-log=configuration:add(pattern="%t,%a,%m,%U,%s,%S,%D",prefix="access.log.")'
念のため JBoss を再起動し、適当に Web アクセスします(wget localhost:8080 など)。$JBOSS_HOME/standalone/log/default-host に、access.log.YYYY-mm-dd とアクセスログが出力されていれば成功です。
cat $JBOSS_HOME/standalone/log/default-host/access.log.2013-08-31 [31/Aug/2013:13:06:59 +0000],127.0.0.1,GET,/,200,-,8
Fluentd の設定
ログ送信サーバ
WildFly/JBoss AS7 の access_log が出力されているサーバです。fluent-agent-light を利用して、ログ受信サーバへログを送信します。
インストール用のシェルもありますが、せっかくなので rpm を作成してインストールしてみます。
fluentd-agent-light のインストール
# yum install rpm-build # useradd rpmbuilder # su - rpmbuilder $ mkdir -p ~/rpmbuild/{BUILD,RPMS,SOURCES,SPECS,SRPMS} $ wget http://tagomoris.github.io/tarballs/fluent-agent-lite.v0.9.tar.gz $ tar zxvf fluent-agent-lite.v0.9.tar.gz && mv fluent-agent-lite* ~/rpmbuild/SOURCES $ cp ~/rpmbuild/SOURCES/fluent-agent-lite/package/fluent-agent-lite.conf ~/rpmbuild/SOURCES $ cp ~/rpmbuild/SOURCES/fluent-agent-lite/SPECS/fluent-agent-lite.spec ~/rpmbuild/SPECS $ rpmbuild $ exit # rpm -ivh /home/rpmbuilder/rpmbuild/RPMS/x86_64/fluent-agent-lite-0.9-original.x86_64.rpm
fluentd-agent-lightの設定
以下の内容を /etc/fluentd-agent-lite.conf に記述します。なお、ログのパスは絶対パスに変更してください。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
TAG_PREFIX="" | |
LOGS=$(cat <<"EOF" | |
wildfly.access $JBOSS_HOME/standalone/log/default-host/access.log.<date> | |
EOF | |
) | |
PRIMARY_SERVER="localhost:24224" |
ログ受信サーバ
Fluentd の安定かつパッケージ版である、td-agent をインストールします。また、各種プラグインもインストールしておきます(このエントリ中では利用しないものも含まれています)。
td-agent のインストール
# echo "[treasuredata]\nname=TreasureData\nbaseurl=http://packages.treasure-data.com/redhat/\$basearch\nenabled=0\ngpgcheck=0\n" >> /etc/yum.repos.d/td.repo # yum install -y td-agent --enablerepo=treasuredata # /usr/lib64/fluent/ruby/bin/fluent-gem install fluent-plugin-file-alternative # /usr/lib64/fluent/ruby/bin/fluent-gem install fluent-plugin-parser # /usr/lib64/fluent/ruby/bin/fluent-gem install fluent-plugin-forest # /usr/lib64/fluent/ruby/bin/fluent-gem install fluent-plugin-amplifier-filter # /usr/lib64/fluent/ruby/bin/fluent-gem install fluent-plugin-numeric-monitor # /usr/lib64/fluent/ruby/bin/fluent-gem install fluent-plugin-growthforecast
以下の内容を /etc/td-agent/td-agent.conf に記述します。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<source> | |
type forward | |
</source> | |
<match wildfly.access> | |
type copy | |
<store> | |
type file_alternative | |
path /var/log/td-agent/wildfly-access.log | |
time_slice_format %Y%m%d | |
output_include_time false | |
output_include_tag false | |
output_data_type attr:message | |
add_newline true | |
</store> | |
<store> | |
type parser | |
add_prefix parsed | |
format /^\[(?<time>[^\]]*)\],(?<host>[^ ]*),(?<method>[^ ]*),(?<path>[^ ]*),(?<status>[^ ]*),(?<session_id>[^ ]*),(?<response_time>[^ ]*)$/ | |
time_format %d/%b/%Y:%H:%M:%S %z | |
key_name message | |
</store> | |
</match> | |
<match parsed.wildfly.access.**> | |
type copy | |
<store> | |
type file | |
path /var/log/td-agent/parsed-wildfly-access.log | |
</store> | |
<store> | |
# type forest | |
# subtype numeric_monitor | |
type numeric_monitor | |
input_tag_remove_prefix parsed.wildfly.access | |
unit minute | |
tag wildfly.response_time | |
aggregate all | |
monitor_key response_time | |
percentiles 90,95 | |
</store> | |
</match> | |
<match wildfly.response_time.**> | |
type copy | |
<store> | |
type file | |
path /var/log/td-agent/wildfly-response-time | |
</store> | |
<store> | |
type growthforecast | |
gfapi_url http://<growthforecast-domain>:<port,default:5125>/api/ | |
service wildfly-fluent-demo | |
tag_for section | |
name_keys avg,max,min,percentile_90,percentile_95 | |
</store> | |
</match> |
グラフ表示サーバ
グラフ化には GlowthForecat を利用します。
インストールから起動確認まで一気にやってみます。インストールする Perl のバージョンは、5.<偶数> のもので一番数字が大きいものにしました。5.<奇数>は開発版とのことです。
# yum -y groupinstall "Development Tools" # yum -y install pkgconfig glib2-devel gettext libxml2-devel pango-devel cairo-devel # useradd growthforecast # su - growthforecast $ curl -kL http://install.perlbrew.pl | bash $ echo '[[ -s "$HOME/perl5/perlbrew/etc/bashrc" ]] && source "$HOME/perl5/perlbrew/etc/bashrc"' >> ~/.bash_profile $ source "$HOME/perl5/perlbrew/etc/bashrc" $ perlbrew available perl-5.19.3 perl-5.18.1 perl-5.16.3 perl-5.14.4 perl-5.12.5 perl-5.10.1 perl-5.8.9 perl-5.6.2 perl5.005_04 perl5.004_05 perl5.003_07 $ perlbrew install perl-5.18.1 $ perlbrew switch perl-5.18.1 $ perlbrew install-cpanm $ cpanm -n GrowthForecast $ mkdir /home/growthforecast/data $ mkdir /home/growthforecast/log $ growthforecast.pl --data-dir=/home/growthforecast/data > /home/growthforecast/log/growthforecast.log 2> /home/growthforecast/log/growthforecast.err & $ curl -F number=10 http://<ip-addr>:5125/api/socialgame/member/register
動作確認
ここまでくれば完成です。WildFly/JBoss AS7 に適当に Web アクセスをして、/var/log/td-agent に以下のログが出力されている事をご確認ください。- access.log の生ログ(wildfly-access.log.*)
- パースされたログ(parsed-wildfly-access.log.*)
- GrowthForecat に送るレスポンスタイムの統計ログ(wildfly-response-time.*)
なにか問題が出ている場合は、同ディレクトリの td-agent.log にログが残っています。
GrowthForecat にレスポンスタイムのグラフが作成されているか、http://<ip-addr>:5125 にアクセスしてみましょう。以下のようなグラフが表示されていれば成功です。
GrowthForecat にレスポンスタイムのグラフが作成されているか、http://<ip-addr>:5125 にアクセスしてみましょう。以下のようなグラフが表示されていれば成功です。