Zabbix 2.0 で JMX を使用して Java アプリを監視したい 1/2

Zabbix 2.0 より JMX(Java)監視機能 が搭載されました。監視対象に追加でソフトウェアをインストールする必要がないというのがなかなか魅力的です。とはいいながらもそのままでは値は取れず、監視対象側で JMX 監視ができるように設定しておく必要があります。ソフトウェアのインストールは必要無いが Java 側にパラメータの追加が必要と、そういう話です。

監視対象側で JMX を有効にする方法は以下リンク先の通りです。

JMX テクノロジを使用する監視と管理 - Java SE 監視および管理ガイド

JVM にいくつかのパラメータを設定することにより JMX がリモートから使えるようになります。とりあえずこんな感じで行けるとおもいます。

 

-Dcom.sun.management.jmxremote.port=10053 
-Dcom.sun.management.jmxremote.ssl=false
-Djava.rmi.server.hostname=192.168.1.10

 

ポート番号は使いやすいポートを指定してください。java.rmi.server.hostname で listen するインタフェースを固定します。

監視ポートに対して知らない人が自由にアクセスできちゃあ困りますので、アクセス制御の仕組みは実装しておく必要があります。JRE_HOME/lib/management ディレクトリにある jmxremote.password と jmxremote.access でアクセス制御を行います。

jmxremote.access で、ユーザ名とそれに対して許可する操作を列挙します。

jmxremote.password で、ユーザ名とそれに対するパスワードを列挙します。

インストール時にサンプルで生成されているファイルの中を見ればスグわかる程度のシンプルな内容です。

jmxremote.password が曲者で、マニュアルにあるとおりこのファイルのアクセス権を正常に設定しておく必要があります。読み書きできるのはファイルの所有者だけ、ファイルの所有者=JVMの実行ユーザ、と設定する必要があります。

たとえば TomcatJVM を監視したい場合。Linux などであれば、実行ユーザが tomcat の場合は

 

# chown tomcat.tomcat jmxremote.password 
# chmod 600 jmxremote.password

 

このようにオーナーを Tomcat の実行ユーザとしユーザ以外の権限を消しておきます。権限が正常に設定されていないと Tomcat が起動しません。

WindowsTomcatJVM を監視したい場合は、 jmxremote.password ファイルのプロパティよりセキュリティタブを開き、詳細設定ボタンより設定を行います。

Tomcat の実行ユーザが SYSTEM だとした場合、「アクセス許可」タブにて「アクセス許可の変更」を行います。親からの継承可能なアクセス許可を含めないようにし、許可するユーザを SYSTEM のみとします。

また、「所有者」タブより現在の所有者を SYSTEM へと変更します。これでファイルのアクセス権に関する問題は出ないはずです。

ここまでの設定で JMX が使えるようになりました。ローカルからでもリモートからでもよいので、JDK に含まれる jconsole で接続してみましょう。ホスト名:ポート番号、jmxremote.access で定義したユーザ名、jmxremote.password に記入したパスワード、これらを指定し接続すると様々なパラメータが見れるようになります。

まずはここまで。