JMX監視について

ZABBIX1.6.1環境でJavaの情報を取得するため、マニュアルZABBIX Manual v1.6 Page298以降のJMXに関する記述を参考にしております。

現在は以下の状況です。
・Tomcatにオプションで認証無し設定
・Jconsoleでパスワード無しでアクセスするがNG

Template_LinuxやTemplate_Java、Template_Tomcat等を設定していますが、[設定]-[アイテム]にて、Java、Tomcatに関する監視項目のステータスは「取得不可」、エラー欄に「Not supported by ZABBIX agent」と表示されています。性能、資源情報は問題なく監視できております。

Javaの情報を取得するための監視対象側の前提条件として、どのようなことを確認すれば良いでしょうか。また、JMXとエージェント間はどのような動きになっているのでしょうか。

ご教授くださいますよう、よろしくお願い致します。

■追記
全て「取得不可」となっているTemplate_Java内の項目のひとつ、「memorypool tenured gen used」を「有効」にすると、 /var/log/zabbix/zabbix_server.logに以下のエラーが出力されます。
Parameter [jmx[java.lang:type=MemoryPool,name=Tenured Gen][Usage.used]] is not supported by agent on host [ホスト名] Old status [0]

zabbix_agentd.confのHostnameパラメータの設定と、フロントエンドから登録したホスト名が一致していることは確認済みです。

コメント表示オプション

お好みのコメント表示方法を選び「設定の保存」をクリックすると変更が反映されます。
ユーザー KAZ の写真

sgymさん

返信遅くなりました。
ZABBIX1.6.2環境で検証してみました。
基本は、298ページの通りで取得可能です。(一部、おかしな所があありますが…)

ZABBIX1.6.1環境でJavaの情報を取得するため、マニュアルZABBIX Manual v1.6 Page298以降のJMXに関する記述を参考にしております。

一応、取得することができました。

手順は下記の通り
1.http://{tomcatのサーバ:ポート番号}/manager/htmlにアクセスできるようにする。
  {CATALINA_HOME}/conf/tomcat-users.xmlを修正しアクセス可能にする。
  私はお試しと言うことでtomcatアカウントに、adminとmanagerを追加しました。
<code>
<?xml version='1.0' encoding='utf-8'?>
<tomcat-users>
<role rolename="tomcat"/>
<role rolename="role1"/>
<role rolename="manager"/>
<role rolename="admin"/>
<user username="tomcat" password="tomcat" roles="tomcat,admin,manager"/>
<user username="both" password="tomcat" roles="tomcat,role1"/>
<user username="role1" password="tomcat" roles="role1"/>
</tomcat-users>
</code>

  
2.tomcatの起動オプションに下記を追加する。
<code>
-Dcom.sun.management.jmxremote \
-Dcom.sun.management.jmxremote.port=xxxxx \
-Dcom.sun.management.jmxremote.ssl=false \
-Dcom.sun.management.jmxremote.authenticate=true \
-Dcom.sun.management.jmxremote.password.file="/path/java/jre/lib/management/jmxremote.password"
</code>
私は、setenv.shを{CATALINA_HOME}/binに作成し、JAVA_HOME等と一緒に定義しました。

<code>
#!/bin/sh

JAVA_HOME=/usr/local/jdk
JMX_PWD=${JAVA_HOME}/jre/lib/management/jmxremote.password
CATALINA_HOME="/usr/local/tomcat"
CATALINA_BASE="/usr/local/tomcat" CATALINA_OPTS="${CATALINA_OPTS} -Dcom.sun.management.jmxremote"
CATALINA_OPTS="${CATALINA_OPTS} -Dcom.sun.management.jmxremote.port=8180"
CATALINA_OPTS="${CATALINA_OPTS} -Dcom.sun.management.jmxremote.ssl=false"
CATALINA_OPTS="${CATALINA_OPTS} -Dcom.sun.management.jmxremote.authenticate=true"
CATALINA_OPTS="${CATALINA_OPTS} -Dcom.sun.management.jmxremote.password.file=${JMX_PWD}"</code>

3.jmxremote.accessを修正し、jmxremote.passwordを作成する。
{JAVA_HOME}/jre/lib/management/jmxremote.accessのファイルの最後に「zabbix readonly」を追加しました。
<code>
# Default access control entries:
# o The "monitorRole" role has readonly access.
# o The "controlRole" role has readwrite access.

#monitorRole readonly
#controlRole readwrite
zabbix readonly
</code>

{JAVA_HOME}/jre/lib/management/jmxremote.password.templateをコピーしjmxremote.passwordを作成する。
{JAVA_HOME}/jre/lib/management/jmxremote.passwordのファイルの最後に「zabbix zabbix」を追加しました。
<code>
# Following are two commented-out entries. The "measureRole" role has
# password "QED". The "controlRole" role has password "R&D".
#
#monitorRole QED
#controlRole R&D
zabbix zabbix
</code>

4−1.httpから情報収集するパターン
<code>curl -s -u <jmxusername>:<jmxpassword> 'http://<tomcat_hostname>/manager/jmxproxy/?qry=java.lang:type=Threading'</code>
上記のようになっていますが、「<jmxusername>:<jmxpassword> 」は間違いで、tomcatのアカウント:パスワードです。

私が検証した環境の検証結果です。
<code>
[root@xxxxxxxx]# curl -s -u tomcat:tomcat 'http://192.168.201.xxx:8080/manager/jmxproxy/?qry=java.lang:type=Threading'
OK - Number of results: 1

Name: java.lang:type=Threading
modelerType: sun.management.ThreadImpl
ThreadCpuTimeEnabled: true
CurrentThreadCpuTimeSupported: true
ThreadContentionMonitoringEnabled: false
ThreadCpuTimeSupported: true
CurrentThreadCpuTime: 0
DaemonThreadCount: 37
AllThreadIds: [J@c26b16
ThreadContentionMonitoringSupported: true
PeakThreadCount: 43
TotalStartedThreadCount: 48
ThreadCount: 39
CurrentThreadUserTime: 0
</code>

4−2.コマンドラインから情報収集するパターン
[url=http://crawler.archive.org/cmdline-jmxclient/]
Command-line JMX Client[/url]
上記からcmdlinejmxclient.jarを取得します。
何故か、cmdline-jmxclient-0.10.4.jarは取得できなかったのでcmdline-jmxclient-0.10.3.jarを取得し、適当な場所に配置します。
私は取り合えず、/usr/local/tomcatに起きました。

その後、下記を実行します。
<code>/<pathTo>/java -jar /<pathTo>/cmdline-jmxclient.jar <jmxusername>:<jmxpassword> <jvmhostname>:<jmxport> java.lang:type=Threading PeakThreadCount</code>

私が検証した環境の検証結果です。
<code>
[root@xxxxxxxx]# /usr/local/jdk/bin/java -jar /usr/local/tomcat/cmdline-jmxclient.jar zabbix:zabbix 192.168.201.xxx:8180 java.lang:type=Threading PeakThreadCount
02/23/2009 15:04:00 +0900 org.archive.jmx.Client PeakThreadCount: 43
</code>

5.UserParameterへの追加
  zabbix_agentd.confに4−1パターンか、4−2パターンのどちらかを追加します。
  マニュアルの「e.g.」以下が事例です。

上記から分かるかもしれませんが、298ページからのJMXの説明はTemplate_Java、Template_Tomcatと関係ないと思われます。(拡張監視についての説明です。)

以上、回答になってないかもしれませんが…
一応、上記の方法でJMXからThreadについての情報が収集できます。

また、下記の方法でsnmp経由でjavaの情報収集が可能です。
[url=http://java.sun.com/j2se/1.5.0/ja/docs/ja/guide/management/SNMP.html]SNMP の監視と管理[/url]

私がメンテナンスしている環境は上記で情報収集しています。

ユーザー sgym の写真

KAZ様

長文に渡ってのご回答ありがとうございます。1点確認させて頂きたく存じます。

上記から分かるかもしれませんが、298ページからのJMXの説明はTemplate_Java、Template_Tomcatと関係ないと思われます。(拡張監視についての説明です。)

Template_Java、Template_Tomcatの使用にあたり、キー先頭に「jmx」とあったので、Template_App_MySQLの使用と同様、単純にwebフロントエンドにてアイテム設定をするだけでは使用不可であると思っておりました。

Template_Java、Template_Tomcatは、zabbix_agentd.confへのUserParameter追加なしに使用できるのでしょうか。

ユーザー KAZ の写真

sgymさん

本業が忙しくRES遅れました。
また長文になってしまいます。

実際にTemplate_Java、Template_Tomcatを導入してみました。
取得できない項目もありますが(tomcatの設定によっても取れないものがあります。)、一応表示できました。

Template_Java、Template_Tomcatの使用にあたり、キー先頭に「jmx」とあったので、Template_App_MySQLの使用と同様、単純にwebフロントエンドにてアイテム設定をするだけでは使用不可であると思っておりました。

単純にwebフロントエンドにてアイテム設定をするだけでは使用不可でした。
zapcatと言うwarが必要でした。(本国のサイトに書いてありました。)

下記の手順で使用可能になります。
1.JMXを利用できるようにする。
  前回書き込んだ手順の3迄は必須かと…

2.zapcatをインストールする。
  ※:これがないとTemplate_Java、Template_Tomcatは使えません。
  まずは、ダウンロードして解凍します。
[url=http://sourceforge.net/project/showfiles.php?group_id=209024]SourceForge.net: zapcat Zabbix JMX bridge: Files[/url]

  ブラウザでtomcatのコンソールにログインします。
<code>http://<tomcat_hostname>/manager/html/</code>
  http://192.168.201.xxxx:8080/manager/html/

  画面中央下の「アップロードするWARファイルの選択」で解凍したzapcatのwarファイルを読み込ませます。

3.接続ポートの確認
  項番2が上手く行くとアプリケーション「zapcat」が現れますのでクリックして下さい、画面が切り替わり次のメッセージが表示されます。

<code>
Welcome to Zapcat

Welcome to the Zapcat servlet engine
plugin. This plugin is the quickest way to enable Zapcat on a servlet engine such as Tomcat or JBoss.

The Zapcat agent is listening on port 10052, and bound to all available addresses.

If you use Tomcat, there is an official Zapcat for Tomcat how-to. On that page, you will find step-by-step instructions that guide you through the process of generating a custom host definition and hooking Zabbix up to your application server. Generating the host definition only works in Tomcat application servers.

If you would like to add your own statistics to you host definition, the mbean list is a page that gives you a conveniently formatted list of all the mbeans in your server.
</code>

上記のメッセージの上の方に「10052」とありますが、これがzapcatエージェントの接続ポートになります。

後は、zabbixのホストの登録でtomcatの入っているサーバのIPアドレスとzapcatエージェントの接続ポートを指定し、Template_Java、Template_Tomcatをlinkすれば監視できるようになります。