Zabbix 2.0 で ネイティブサポートになったJMX監視を使って、Tomcat 7 の監視を行う際の手順を記載します。この方法を使うと、Tomcatに限らず、JavaアプリケーションをZabbixで容易に監視できるようになります。
はじめに
今回の環境は、Zabbix 2.0.5 を使って、監視対象Javaアプリケーションである Tomcat 7.0.39 の監視を行います。
Zabbix 2.0 からは、Zabbix Java Gateway という形で JMX監視が組み込まれました。Zabbix 1.xまではJMX監視を行う際はZapcat などが使われていたようですが、Zabbix 2.0 からはZabbixで用意されている仕組みだけでJMXを使ったJavaアプリケーションの監視が出来るようになります。
今回は、Zabbix Server と JMX監視を担当する Zabbix Java Gateway を同じマシンで稼働させます。
なお、以降の手順は、以下のような順番で進めます。
- Tomcat 7.0 をリモートからJMXで監視できるように設定する
- Zabbix 2.0.5 で JMXが使えるようにインストールする
- Zabbix Java Gateway の設定を行う
- Zabbix Server で Zabbix Java Gateway を認識させる
- Zabbix 画面から、JMXを使ったアイテム設定を行う
1.Tomcat 7.0 をリモートからJMXで監視できるように設定する
Tomcat 7.0 を JMXを使ってリモートから監視できるように設定します。
http://tomcat.apache.org/tomcat-7.0-doc/monitoring.html や、jconsole(JMX) で Tomcat 7.0.39 のJavaVM 監視を簡易的に行う方法 を参考にしながら、以下の設定を行います。
まず、リモートからJMXで監視が出来るように、/usr/local/tomcat/bin/setenv.sh を以下の内容で作成します。
#!/bin/sh export CATALINA_OPTS="-Dcom.sun.management.jmxremote=true -Dcom.sun.management.jmxremote.port=10080 -Djava.rmi.server.hostname=192.168.1.1 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false"
jmxremote.port や hostname は、環境に合わせて設定してください。なお、hostnameの箇所は、そのサーバでのhostsファイルの内容によっては不要になります。また、今回は簡易的に進める為、認証は行わない設定で記載しています。
この後、Tomcatを再起動すると、設定が反映されます。
2.Zabbix 2.0.5 で JMXが使えるようにインストールする
Zabbix 2.0.5 のインストール時に「–enable-java」オプションを有効にします。なお、このオプションを有効にする場合は、javac が入っている必要があります。私の環境ではopenjdk を使っているので、以下のように javac と Zabbix をインストールしました。ご参考までに。
# yum install java-1.7.0-openjdk-devel # cd /usr/local/src/zabbix-2.0.5 # ./configure --enable-server --enable-agent --with-mysql --with-net-snmp --with-libcurl --enable-java # make clean (Zabbixは再インストールなので、clean しています。) # make # make install
以上で、Zabbix 2.0.5 でJMXが使えるようになります(Zabbix Java Gateway がインストールされます)。
3.Zabbix Java Gateway の設定を行う
Zabbix Java Gateway が デフォルトでは /usr/local/sbin/zabbix_java/ にインストールされます。
# ls -1 /usr/local/sbin/zabbix_java/ bin lib settings.sh shutdown.sh startup.sh #
この中にある「settings.sh」で、Zabbix Java Gateway の設定を行います。
LISTEN_IP="192.168.1.1" LISTEN_PORT=10052 START_POLLERS=2
今回の前提環境の場合は、Defaultの設定で問題なさそうですが、明示的に指定しています。設定を行った後、同じ場所にある「startup.sh」で Zabbix Java Gateway を起動します。
# /usr/local/sbin/zabbix_java/startup.sh # ps -awef|grep zabbix-java-gateway | grep -v grep root 25460 1 3 19:19 pts/0 00:00:00 java -server -classpath lib:lib/logback-classic-0.9.27.jar:lib/logback-core-0.9.27.jar:lib/org-json-2010-12-28.jar:lib/slf4j-api-1.6.1.jar:bin/zabbix-java-gateway-2.0.5.jar -Dzabbix.pidFile=/tmp/zabbix_java.pid -Dzabbix.listenIP=192.168.1.1 -Dzabbix.listenPort=10052 -Dzabbix.startPollers=2 com.zabbix.gateway.JavaGateway #
デフォルトでログファイルが /tmp/zabbix_java.log にありますので、起動時に問題がないかログを確認しておきます。
以上で、Zabbix Java Gateway の設定と起動が完了です。
4.Zabbix Server で Zabbix Java Gateway を認識させる
次に、Zabbix Java Gateway を Zabbix Server に認識させます。
/usr/local/etc/zabbix_server.conf で以下の設定を入れます。
### Option: JavaGateway # IP address (or hostname) of Zabbix Java gateway. # Only required if Java pollers are started. JavaGateway=192.168.1.1 ### Option: JavaGatewayPort # Port that Zabbix Java gateway listens on. JavaGatewayPort=10052 ### Option: StartJavaPollers # Number of pre-forked instances of Java pollers. StartJavaPollers=2
その後、Zabbix Server を再起動します。
デフォルトでログファイルが /tmp/zabbix_server.log にありますので、起動時に問題がないかログを確認しておきます。
以上で、バックエンド側としてのZabbix基盤設定は終了です。
5.Zabbix 画面から、JMXを使ったアイテム設定を行う
次にZabbixのWeb管理画面から、Tomcat7 をJMXで監視する為のアイテムを登録します。
まずは、監視対象マシンのホスト設定画面で「JMX interfaces」を設定します。
次に、アイテム設定を行います。
サンプルとして、HeapMemory 使用量と、ThreadPoolのcurrentThreadCount を設定する場合のキーを以下に記載しています。
HeapMemory使用量 | jmx |
ThreadPool currentThreadCount | jmx[“Catalina:type=ThreadPool,name=\”http-bio-8080\””,currentThreadCount] |
Tomcat 7 では、MBeansの値やキーの設定値が変わったようです。jconsole の MBeans タブなどを参照しながら設定を行うとやりやすいと思います。
参考URL
- https://www.zabbix.com/forum/showthread.php?t=36714
- http://thinkit.co.jp/story/2012/04/13/3504?page=0,1
- https://www.zabbix.com/documentation/doku.php?id=2.0/manual/config/items/itemtypes/jmx_monitoring
- http://www.zabbix.com/documentation/2.0/manual/concepts/java