監視の流れは以下のようになります。
Zabbix Server(Port:10051、IP:192.168.56.101)
↓
ZabbixJavaGateway(Port:10052、IP:192.168.56.101)
↓
Tomcat【JMX Interface(Port:10080、IP:192.168.56.102)】
インストール環境とバージョン
名前 | バージョン | ダウンロード元 |
---|---|---|
ubuntu | 10.04.4(64bit) | http://releases.ubuntu.com/lucid/ |
ZABBIX | 2.2.0 | http://www.zabbix.com/ |
Tomcat | 7.0.50 | http://tomcat.apache.org/ |
Zabbix Serverインストール
「Zabbix Serverのインストール手順」を参照してください。Zabbix Agentインストール
「Zabbix Agentのインストール手順」を参照してください。Tomcatインストール
Tomcatは監視対象(Agent側)のサーバにインストールされている必要があります。「Tomcatのインストール手順(7.0.50)」をご参考ください。
Tomcatの設定変更【監視される側(Agent)】
リモートからJMXでの監視が出来るようにTomcatの起動オプションを変更します。Tomcatの起動時の環境変数
CATALINA_OPTS
に以下のオプションを追加してください。-Dcom.sun.management.jmxremote=true #Openするポート -Dcom.sun.management.jmxremote.port=10080 #OpenするIP(TomcatサーバのIP) -Djava.rmi.server.hostname=192.168.56.102 #SSL有無 -Dcom.sun.management.jmxremote.ssl=false #認証有無 -Dcom.sun.management.jmxremote.authenticate=false
実際の例は以下のようになります。
・オプション追加
# vi /etc/init.d/tomcat export CATALINA_OPTS="-Xms512m -Xmx512m -XX:NewSize=341m -XX:MaxNewSize=341m -XX:SurvivorRatio=2 -XX:PermSize=128m -XX:MaxPermSize=128m -Dcom.sun.management.jmxremote=true -Dcom.sun.management.jmxremote.port=10080 -Djava.rmi.server.hostname=192.168.56.102 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false"
・Tomcat再起動後、プロセス確認
# ps -awef|grep tomcat | grep -v grep root 1868 1 0 16:22 ? 00:00:00 jsvc.exec -java-home /usr/local/java/current -user tomcat -pidfile /usr/local/tomcat/current/logs/catalina-daemon.pid -wait 10 -outfile /usr/local/tomcat/current/logs/catalina.out -errfile &1 -classpath /usr/local/tomcat/current/bin/bootstrap.jar:/usr/local/tomcat/current/bin/commons-daemon.jar:/usr/local/tomcat/current/bin/tomcat-juli.jar -Djava.util.logging.config.file=/usr/local/tomcat/current/conf/logging.properties -Djava.security.egd=file:/dev/./urandom -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Xms512m -Xmx512m -XX:NewSize=341m -XX:MaxNewSize=341m -XX:SurvivorRatio=2 -XX:PermSize=128m -XX:MaxPermSize=128m -Dcom.sun.management.jmxremote=true -Dcom.sun.management.jmxremote.port=10080 -Djava.rmi.server.hostname=192.168.56.102 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Djava.endorsed.dirs= -Dcatalina.base=/usr/local/tomcat/current -Dcatalina.home=/usr/local/tomcat/current -Djava.io.tmpdir=/usr/local/tomcat/current/temp org.apache.catalina.startup.Bootstrap tomcat 1869 1868 11 16:22 ? 00:00:03 jsvc.exec -java-home /usr/local/java/current -user tomcat -pidfile /usr/local/tomcat/current/logs/catalina-daemon.pid -wait 10 -outfile /usr/local/tomcat/current/logs/catalina.out -errfile &1 -classpath /usr/local/tomcat/current/bin/bootstrap.jar:/usr/local/tomcat/current/bin/commons-daemon.jar:/usr/local/tomcat/current/bin/tomcat-juli.jar -Djava.util.logging.config.file=/usr/local/tomcat/current/conf/logging.properties -Djava.security.egd=file:/dev/./urandom -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Xms512m -Xmx512m -XX:NewSize=341m -XX:MaxNewSize=341m -XX:SurvivorRatio=2 -XX:PermSize=128m -XX:MaxPermSize=128m -Dcom.sun.management.jmxremote=true -Dcom.sun.management.jmxremote.port=10080 -Djava.rmi.server.hostname=192.168.56.102 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Djava.endorsed.dirs= -Dcatalina.base=/usr/local/tomcat/current -Dcatalina.home=/usr/local/tomcat/current -Djava.io.tmpdir=/usr/local/tomcat/current/temp org.apache.catalina.startup.Bootstrap
※接続時のID・パスワードの認証をかけたい場合は以下のようにオプションを変更してください。
authenticate=true
# vi /etc/init.d/tomcat export CATALINA_OPTS="-Xms512m -Xmx512m -XX:NewSize=341m -XX:MaxNewSize=341m -XX:SurvivorRatio=2 -XX:PermSize=128m -XX:MaxPermSize=128m -Dcom.sun.management.jmxremote=true -Dcom.sun.management.jmxremote.port=10080 -Djava.rmi.server.hostname=192.168.56.102 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=true" # -Dcom.sun.management.jmxremote.authenticate=false" Comment Out
接続するID・Passwordの設定
[jdk_install_dir]/jre/lib/management/jmxremote.password
# cp /usr/local/java/current/jre/lib/management/jmxremote.password.template /usr/local/java/current/jre/lib/management/jmxremote.password # vi /usr/local/java/current/jre/lib/management/jmxremote.password
最後のラインのコメントアウト解除(パスワード設定)
monitorRole QED # controlRole R&D
パスワードファイルのパーミッションが
600
でないと以下のような
エラーが発生しますので、パーミッションを変更します。エラー: パスワードファイルの読み取りアクセスは制限する必要があります。: /usr/local/java/current/jre/lib/management/jmxremote.password
# chmod 600 /usr/local/java/current/jre/lib/management/jmxremote.password
Tomcat再起動
Zabbix Serverの設定を変更【監視する側(Server)】
・Zabbix Server で Zabbix Java Gateway を認識させる
# vi /usr/local/etc/zabbix_server.conf JavaGateway=192.168.56.101 #server ip JavaGatewayPort=10052 StartJavaPollers=2
・ZabbixのJava ゲートウェイをインストールする(し直す)
(Zabbixのインストールオプションで
--enable-java
がすでに有効になっている場合はこちらの手順は省略してください。)ZabbixでJavaをenableするためにはサーバ側にjdkがインストールされている必要があります。
インストール手順は 「Javaのインストール手順」を参照してください。
# cd /usr/local/src/zabbix-2.2.0 # ./configure --enable-server --with-mysql=/usr/local/mysql/current/bin/mysql_config --with-net-snmp --with-libcurl --enable-java # make clean (Zabbixは再インストールなので、clean しています。) # make # make install
・Zabbix Java Gateway の設定を行う
# vi /usr/local/sbin/zabbix_java/settings.sh LISTEN_IP="192.168.56.101" # [server ip] LISTEN_PORT=10052 START_POLLERS=2
・ログファイルを設定する
# vi /usr/local/sbin/zabbix_java/lib/logback.xml/var/log/zabbix/zabbix_java.log /var/log/zabbix/zabbix_java.log.%i 1 3 5MB %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
・zabbix_javaを起動する
# /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.56.101 -Dzabbix.listenPort=10052 -Dzabbix.startPollers=2 com.zabbix.gateway.JavaGateway #
もし、プロセスが無い場合は「logback.xml」で指定した「/var/log/zabbix/zabbix_java.log」を確認して対応してください。
例)Cannot assign requested address エラーが発生した場合
2014-10-21 23:31:02.647 [main] ERROR com.zabbix.gateway.JavaGateway - caught fatal exception java.net.BindException: Cannot assign requested address at java.net.PlainSocketImpl.socketBind(Native Method) ~[na:1.6.0_17] at java.net.PlainSocketImpl.bind(PlainSocketImpl.java:365) ~[na:1.6.0_17] at java.net.ServerSocket.bind(ServerSocket.java:319) ~[na:1.6.0_17] at java.net.ServerSocket.(ServerSocket.java:185) ~[na:1.6.0_17] at com.zabbix.gateway.JavaGateway.main(JavaGateway.java:65) ~[zabbix-java-gateway-2.2.0.jar:na] 2014-10-21 23:31:02.648 [Thread-1] INFO com.zabbix.gateway.JavaGateway - Zabbix Java Gateway 2.2.0 (revision 40163) has stopped
該当のポートが既に使われているか確認
# lsof -i -n -P | grep 10052サーバのIPアドレスが問題なく設定されているの確認
# vi /usr/local/etc/zabbix_server.conf # vi /usr/local/sbin/zabbix_java/settings.sh
Zabbix管理画面でHostを登録する
・tomcatのテンプレートをインポートするまず、以下のリンクから自分のTomcatバージョンのテンプレートxmlファイルをダウンロードします。
tomcat6のテンプレート ダウンロード
tomcat7のテンプレート ダウンロード
ダウンロードしたテンプレートをZabbix管理画面の以下のページにてインポートしてください。
設定
⇒テンプレート
⇒インポート
・Tomcatのホストを登録する
設定
⇒ホスト
⇒ホストの作成
JMX interfacesにはTomcat(Agent)側に設定したIPとポートを入れてください。
Templatesタブ
に移動して、先ほど登録したTemplate JMX Tomcat7
テンプレートを検索して追加します。
Macrosタブ
に移動して以下のマクロを追加します。マクロ名 | 値 |
---|---|
{$AJP_PORT} | 8009 |
{$CONNECTOR_MODE} | apr |
{$HTTP_PORT} | 8080 |
{$HTTPS_PORT} | 8088 |
{$JMX_PASSWORD} | QED |
{$JMX_USERNAME} | monitorRole |
こちらのマクロのリストはそれぞれのテンプレートXML(一番上)に記載されていますので、 ご参考ください。
また、こちらの
設定値
はTomcat(Agent側)のserver.xml
に記載されている内容を設定して頂く必要があります。監視状態確認
ここまで問題なく設定されましたら、グラフ画面にて以下のようなデータが確認出来るかと思いますもし、 上手くデータが取得出来ない場合はログなどを確認し、対応してください。
・Zabbix ServerとAgent間の通信問題
以下のコマンドで、適切な値が返ってくるのかをご確認ください。
# zabbix_get -s 192.168.56.102 -k agent.ping 1 # zabbix_get -s 192.168.56.102 -k agent.version 2.2.0・テンプレートXMLのキー(もしくはマクロ)の設定値の不一致
Zabbix管理画面に登録されているマクロの設定値はTomcatのServer.xmlの値である必要がありますので、
それぞれの値が正確に入っているのか比較してください。
また、
テンプレートXMLの
Key
の値は、AgentサーバのTomcatのServer.xmlに設定されている値、且つ現在のJavaのバージョンのJMX(MBeans)から取得可能な値である必要があります。上記の値を確認する方法としては、JConsoleなどのツールから該当のAgent(Tomcat)サーバに接続し、MBeansの値をチェックするのが一番簡単ではないかと思います。
例)
テンプレートXMLの
HTTP Connector threads allocated
のjmx["Catalina:type=ThreadPool,name=\"http-{$CONNECTOR_MODE}-{$HTTP_PORT}\"",currentThreadCount]
が取得可能かどうかを確認してみます。JConsoleを立ち上げ、Agentサーバに接続 → MBeansタブへ移動
JConsole経路:
%JAVA_HOME%\bin\jconsole.exe
XMLキーで、Treeをで辿って行きます。
jmx["Catalina:type=ThreadPool,name=\"http-{$CONNECTOR_MODE}-{$HTTP_PORT}\"",currentThreadCount]
の場合は
jmx["Catalina(1階層):type=ThreadPool(2階層),name=\"http-{$CONNECTOR_MODE}-{$HTTP_PORT}\""(3階層),currentThreadCount(属性)]
になります。
即ち
Treeの第1階層: Catalina
Treeの第2階層: ThreadPool
Treeの第3階層: http-{$CONNECTOR_MODE}-{$HTTP_PORT} (マクロにそれぞれに入れた値)
の
属性
にcurrentThreadCount
があればOK。ない場合は、取得したい値をMBeansから探して、テンプレートXMLもしくはマクロを修正する必要があります。
参考URL
https://gist.github.com/hgomez/3209196http://www.checksite.jp/zabbix-2-0-jmx-tomcat7-javagateway/
0 コメント:
コメントを投稿