2013年8月31日土曜日

WildFly のログを Fluentd で扱う

WildFly(旧JBoss AS) のログ解析を、Fulentd を使って実施してみます。

今回の対象ログは、WildFly が出力する access.log とします。Apache httpd の access_log 相当のログです。

なお、本ブログは以下の記事を参考にしています。それぞれの設定の意味合いなどは、そちらのブログを参照いただければと思います。

ステップバイステップで学ぶ Fluentd + GrowthForecast でグラフ作成まとめ

目標

access.log ログを収集・解析し、レスポンスタイムの統計情報(最小値・最大値・平均値など)をグラフ化する。

大まかな流れ

  1. WildFly/JBoss AS7 の設定
  2. Fluentd の設定
    1. ログ送信サーバ(fluent-agent-lite) の設定
    2. ログ受信サーバ(td-agent)の設定
    3. グラフ化サーバ(GlowthForecast) の設定
  3. 動作確認

環境

  • 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

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 の設定

実際には以下のような構成をイメージしていますが、今回は1サーバで全ての役割を持たせます。


ログ送信サーバ


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 に記述します。なお、ログのパスは絶対パスに変更してください。
うーん、JBoss AS7 の場合、現在日時に利用されるファイルにすでに日付が入ってしまうため、パス名を日付の切り替えとともに書き換える処理が必要ですね。。

ログ受信サーバ


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 に記述します。

グラフ表示サーバ


グラフ化には 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 にアクセスしてみましょう。以下のようなグラフが表示されていれば成功です。


参考リンク