http://java.sun.com/j2se/1.5.0/ja/docs/ja/guide/management/agent.html#remote
JMX を使用する監(jiān)視と管理
Java 仮想マシン (JVM) には、JMX を使って JVM の監(jiān)視と管理を可能にする機(jī)能が組み込まれています。また、実裝されたアプリケーションを JMX で監(jiān)視することもできます。
システムプロパティの設(shè)定
JMX エージェントを有効にして、動(dòng)作を設(shè)定するには、JVM を起動(dòng)するときに特定のシステムプロパティを設(shè)定する必要があります。コマンド行上で次のようにシステムプロパティを設(shè)定します。
java -Dproperty=value ...
この方法で任意の數(shù)のシステムプロパティを設(shè)定できます。値を指定しない場(chǎng)合、デフォルト値で設(shè)定されます。JMX 管理プロパティのフルセットは、表 1 に記載されています。JMX 管理および監(jiān)視プロパティに記載したように設(shè)定ファイルでシステムプロパティを設(shè)定することもできます。
注:java
(Java VM) をコマンド行から実行するには、JRE_HOME/bin
をパスに追加する必要があります。ここで JRE_HOME
は、JRE (Java Runtime Environment) を含むディレクトリです。代わりにコマンドを入力するときにフルパスを入力することもできます。
以下のドキュメントは、Java HotSpot VM によってサポートされている構(gòu)文とコマンド行オプションのフルセットについて説明しています。
JMX エージェントの有効化
JMX によって Java プラットフォームを監(jiān)視するには、以下の手順に従ってください。
- JVM を起動(dòng)するときに JMX エージェント (MBean サーバ) を有効にします。以下に対して JMX エージェントを有効にすることができます。
- JVM を
jconsole
などの JMX 準(zhǔn)拠のツールで監(jiān)視します。詳細(xì)は、「jconsole の使用」を參照してください。
ローカルの監(jiān)視と管理
ローカルアクセスに対して JMX エージェントを有効にするには、JVM または Java アプリケーションを起動(dòng)するときにこのシステムプロパティを設(shè)定します。
com.sun.management.jmxremote
このプロパティを設(shè)定することにより、JVM 実裝 MBean を登録し、RMI コネクタを?qū)熡氓ぅ螗骏榨З`ス経由で公開して、JMX クライアントアプリケーションがローカルの Java プラットフォーム、すなわち、同一マシン上で動(dòng)作する JVM を監(jiān)視できるようにします。
たとえば、サンプルアプリケーションの Notepad 用の JMX エージェントは、以下のようにして有効にします。
cd JDK_HOME/demo/jfc/Notepad
java -Dcom.sun.management.jmxremote -jar Notepad.jar
ここで、JDK_HOME は、JDK がインストールされているディレクトリです。
jconsole の使用
jconsole
によるローカルの監(jiān)視は、開発およびプロトタイプ作成に便利です。jconsole
自體がかなりのシステムリソースを消費(fèi)するため、jconsole
をローカルで実稼働環(huán)境に使用することはお?jiǎng)幛幛筏蓼护蟆¥饯欷瑜辘稀console をリモートシステムで使用して、監(jiān)視されるプラットフォームから分離してください。
コマンドシェルで jconsole
と入力して、jconsole を起動(dòng)します。引數(shù)なしで jconsole を起動(dòng)する場(chǎng)合、jconsole は自動(dòng)的にすべてのローカル Java アプリケーションを検出し、監(jiān)視したいアプリケーションを選択できるダイアログボックスを表示します。システムの監(jiān)視には、オペレーティングシステムのファイルアクセス権が必要であるため、jconsole
とアプリケーションは両方とも、同じユーザ名で実行する必要があります。
注:jconsole
をコマンド行から実行するには、JAVA_HOME
が JDK を含むディレクトリになっているパスに、JAVA_HOME/bin
を追加する必要があります。あるいは、コマンドを入力するときにフルパスを入力することもできます。
jconsole の使用についての詳細(xì)は、「jconsole の使用」を參照してください。
リモートの監(jiān)視と管理
リモートシステムからの監(jiān)視と管理を可能にするには、JVM を起動(dòng)するときにこのシステムプロパティを設(shè)定します。
com.sun.management.jmxremote.port=portNum
ここで、portNum は、JMX/RMI 接続を有効にしたいポート番號(hào)です。必ず未使用のポート番號(hào)を指定してください。ローカルアクセスに対して RMI コネクタを公開するのに加えて、このプロパティを設(shè)定することにより、標(biāo)準(zhǔn)名「jmxrmi」を使用して、特定のポートのプライベートな読み取り専用レジストリで追加の RMI コネクタを公開します。
注:以下に説明されているように、セキュリティ用に設(shè)定するプロパティの他に上記のシステムプロパティを設(shè)定する必要があります。
リモートの監(jiān)視と管理には、権限のないユーザがアプリケーションを制御または監(jiān)視できないようにするためにセキュリティが必要です。デフォルトで、 SSL (secure sockets layer) 経由のパスワード認(rèn)証が有効になっています。以下のセクションで説明されているように、パスワード認(rèn)証と SSL を個(gè)別に無効にすることができます。
JMX エージェントをリモートで使用できるようにしたら、「jconsole によるリモート監(jiān)視」で説明されているように jconsole を使ってアプリケーションを監(jiān)視できます。
パスワード認(rèn)証の使用
デフォルトでは、リモート監(jiān)視で JMX エージェントを有効にすると、JMX エージェントはパスワード認(rèn)証を使用します。ただし、パスワードを設(shè)定する方法は、シングルユーザ環(huán)境にいるか、マルチユーザ環(huán)境にいるかによって異なります。
パスワードはパスワードファイルにクリアテキストで格納されるため、監(jiān)視用の通常のユーザ名とパスワードを使用することはお?jiǎng)幛幛扦蓼护蟆4铯辘恕?code>monitorRole および controlRole
などのパスワードファイルで指定したユーザ名を使用します。詳細(xì)は、「パスワードおよびアクセスファイルの使用」を參照してください。
シングルユーザ環(huán)境: JRE_HOME/lib/management
ディレクトリで以下の手順でパスワードファイルを設(shè)定します。
- パスワードのテンプレートファイル、
jmxremote.password.template
を management.jmxremote.password
にコピーします。
- ファイルアクセス権を設(shè)定して、自分だけがパスワードファイルを読み取りおよび書き込みできるようにします。
monitorRole
や controlRole
などのロールに対するパスワードを追加します。
マルチユーザ環(huán)境: JRE_HOME/lib/
management
ディレクトリで以下の手順でパスワードファイルを設(shè)定します。
- パスワードのテンプレートファイル、
jmxremote.password.template
をホームディレクトリにコピーします。
- ファイルアクセス権を設(shè)定して、所有者だけがパスワードファイルを読み取りおよび書き込みできるようにします。
monitorRole
や controlRole
などのロールに対するパスワードを追加します。
- JVM を起動(dòng)するときにシステムプロパティを設(shè)定します。
com.sun.management.jmxremote.password.file=pwFilePath
ここで、pwFilePath はパスワードファイルへのパスです。
警告:クライアントがセキュリティ保護(hù)されていない RMI レジストリ (デフォルト) からリモートコネクタを取得すると、JMX リモートコネクタからのパスワード認(rèn)証でセキュリティの問題が起こる可能性があります。攻撃者がターゲットサーバ上で正當(dāng)な RMI レジストリが開始される前に偽の RMI レジストリを開始すると、攻撃者はクライアントのパスワードを盜むことができます。このシナリオは、システムプロパティ com.sun.management.jmxremote.port=portNum でリモート管理を有効にして JVM を起動(dòng)する場(chǎng)合も同じです。SSL が有効になっていても同じです。このような攻撃者は発見されることが多いものの、脆弱性があることは確かです。
この問題を避けるため、認(rèn)証にはパスワードの代わりに SSL クライアント認(rèn)証を使用してください。または、クライアントがリモートコネクタオブジェクトを安全に (セキュリティ保護(hù)された LDAP 経由で、または共有のセキュリティ保護(hù)されたファイルシステムにあるファイルを経由してなど) 取得するようにしてください。
將來のリリースで、この問題は修正される予定です。 |
パスワード認(rèn)証の無効化
リモート監(jiān)視のパスワード認(rèn)証は、デフォルトで有効になっています。パスワード認(rèn)証を無効にするには、JVM を起動(dòng)するときに以下のシステムプロパティを設(shè)定します。
com.sun.management.jmxremote.authenticate=false
ここで、portNum は、使用するポート番號(hào)です。必ず未使用のポート番號(hào)を指定してください。
パスワード認(rèn)証を無効にする場(chǎng)合、「セキュリティの無効化」で説明しているように SSL を無効にすることもできます。「クライアントの SSL 認(rèn)証の有効化」で説明しているようにパスワードを無効にして、SSL クライアント認(rèn)証を有効にしたい場(chǎng)合もあります。
警告: この構(gòu)成は安全ではありません。JMX ポート番號(hào)およびホスト名を知っている (または推測(cè)する) リモートユーザが Java アプリケーションおよびプラットフォームを監(jiān)視および制御できます。開発用のシステムなら許容されるかもしれませんが、実稼働システムにはお?jiǎng)幛幛筏蓼护蟆?
SSL の使用
SSL (Secure sockets layer) は、リモート監(jiān)視および管理を有効にするときにデフォルトで有効になっています。SSL を使用するには、JMX エージェント (MBean サーバ) が動(dòng)作するシステム上でデジタル証明書を設(shè)定して、次に SSL を正しく設(shè)定します。コマンド行ユーティリティ keytool
を使用して、証明書を操作します。通常の手順は以下のとおりです。
- サーバ上でまだ鍵ペアと証明書を設(shè)定していない場(chǎng)合は以下の手順に従います。
keytool -genkey
コマンドで鍵ペアを生成します。
keytool -certreq
コマンドで認(rèn)証局 (CA) に署名付き証明書を要求します。
keytool -import
コマンドで証明書をキーストアにインポートします。「証明書のインポート」を參照してください。
詳細(xì)および例については、「keytool - 鍵および証明書管理ツール」(Solaris および Linux) (Windows)を參照してください。
- サーバシステム上で SSL を設(shè)定します。このドキュメントでは、SSL の設(shè)定とカスタマイズについて詳細(xì)には説明しませんが、通常、次の表に記載されているシステムプロパティを設(shè)定する必要があります。詳細(xì)は、JSSE ガイドの「デフォルト鍵およびトラストストア、ストアタイプ、およびストアパスワードのカスタマイズ」を參照してください。
SSL 構(gòu)成のシステムプロパティ
システムプロパティ |
説明 |
javax.net.ssl.keyStore |
キーストアの場(chǎng)所 |
javax.net.ssl.trustStore |
トラストストアの場(chǎng)所 |
javax.net.ssl.keyStoreType |
デフォルトのキーストア型
|
javax.net.ssl.keyStorePassword |
デフォルトのキーストアパスワード |
javax.net.ssl.trustStoreType |
デフォルトのトラストストア型 |
javax.net.ssl.trustStorePassword |
デフォルトのトラストストアパスワード |
詳細(xì)は、「keytool - 鍵および証明書管理ツール(Solaris および Linux) (Windows)」および「JSSE ガイド」を參照してください。
クライアント SSL 認(rèn)証の有効化
クライアント SSL 認(rèn)証を有効にするには、JVM を起動(dòng)するときにこのシステムプロパティを設(shè)定します。
com.sun.management.jmxremote.ssl.need.client.auth=true
クライアント SSL 認(rèn)証を使用するには、SSL を有効 (デフォルト) にしておく必要があります。
この構(gòu)成では、クライアントシステムが有効なデジタル証明書を持つ必要があります。「SSL の使用」で説明したとおりに証明書をインストールして、SSL を設(shè)定する必要があります。
SSL の無効化
リモート監(jiān)視で SSL を無効にするには、JVM を起動(dòng)するときにこのシステムプロパティを設(shè)定します。
com.sun.management.jmxremote.ssl=false
パスワード認(rèn)証は、セキュリティの無効化
パスワード認(rèn)証と SSL の両方を無効 (セキュリティなし) にするには、JVM を起動(dòng)するときにこれらのシステムプロパティを設(shè)定します。
com.sun.management.jmxremote.authenticate=false
com.sun.management.jmxremote.ssl=false
警告:この構(gòu)成は安全ではありません。JMX ポート番號(hào)およびホスト名を知っている (または推測(cè)する) リモートユーザが Java アプリケーションおよびプラットフォームを監(jiān)視および制御できます。開発用のシステムなら許容されるかもしれませんが、実稼働システムにはお?jiǎng)幛幛筏蓼护蟆?/p>
jconsole によるリモート監(jiān)視
リモートアプリケーションを監(jiān)視するには、次のように jconsole
を起動(dòng)します。
jconsole hostName:portNum
ここで、hostName は、アプリケーションを?qū)g行するシステム名で、portNum は、JVM を起動(dòng)するときに指定したポート番號(hào)です。ホスト名とポート番號(hào)を省略して、jconsole
が提供するダイアログボックスに入力することもできます。
注: jconsole
をコマンド行から実行するには、JAVA_HOME
が JDK を含むディレクトリになっているパスに、JAVA_HOME/bin
を追加する必要があります。あるいは、コマンドを入力するときにフルパスを入力することもできます。
jconsole の使用についての詳細(xì)は、「jconsole の使用」を參照してください。
プログラムによる JMX エージェントへの接続
JMX エージェントを有効にしたら、以下の URL を使ってサービスにアクセスできます。
service:jmx:rmi:///jndi/rmi://hostName:portNum/jmxrmi
ここで、hostName はホスト名で portNum は、JMX エージェントを有効にしたときに指定したポート番號(hào)です。
次のように、URL を使って、javax.management.remote.JMXServiceURL
オブジェクトのインスタンスを生成し、次に JMXConnectorFactory.connect
メソッドを使用して接続を作成することにより、クライアントはエージェントへのコネクタを作成できます。
JMXServiceURL u = new JMXServiceURL(
"service:jmx:rmi:///jndi/rmi:// “ + hostName + ":"+ portNum + "/jmxrmi");
JMXConnector c = JMXConnectorFactory.connect(u);
パスワードおよびアクセスファイルの使用
パスワードおよびアクセスファイルは、リモート監(jiān)視および管理のセキュリティを制御します。これらのファイルは、デフォルトでは、JRE_HOME/lib/management
にあり、標(biāo)準(zhǔn)の Java プロパティファイルフォーマットです。フォーマットに関する詳細(xì)は、「java.util.properties」を參照してください。
パスワードファイル
パスワードファイルは、さまざまなロールとそのパスワードを定義します。アクセス制御ファイル (デフォルトでは、jmxremote.access) は、それぞれのロールに許可されるアクセス権を定義します。ロールを機(jī)能させるには、パスワードとアクセスファイルの両方にエントリを持つ必要があります。
JRE には、jmxremote.password.template
という名前のパスワードファイルテンプレートがあります。このファイルを JRE_HOME/lib/management/jmxremote.password
またはホームディレクトリにコピーして、アクセスファイルで定義したロールのパスワードを追加します。
パスワードファイルにはパスワードがクリアテキストで含まれるため、必ず所有者だけがこのファイルへの読み取りおよび書き込みアクセス権を持つようにしてください。セキュリティ上の理由から、システムは所有者だけがファイルを読み取りまたは書き込み可能であることを確認(rèn)し、そうでない場(chǎng)合は終了します。このため、マルチユーザ環(huán)境では、パスワードファイルをホームディレクトリなどの非公開の場(chǎng)所に置きます。
プロパティ名はロールで、関連付けられた値はロールのパスワードです。
たとえば、パスワードファイルのエントリの例は次のようになります。
# The "monitorRole" role has password "QED".
# The "controlRole" role has password "R&D".
monitorRole QED
controlRole R&D
アクセスファイル
デフォルトでは、アクセスファイルは、jmxremote.access
という名前です。プロパティ名はパスワードファイルと同じ領(lǐng)域からの ID です。関連する値は「readonly」または「readwrite」のいずれかにする必要があります。
アクセスファイルはロールとアクセスレベルを定義します。デフォルトでは、アクセスファイルは次の 2 つの主要なロールを定義します。
monitorRole
- 監(jiān)視のための読み取り専用アクセスを許可します。
controlRole
- 監(jiān)視および管理のために読み取り/書き込みアクセス権を許可します。
アクセス制御エントリは、ロール名および関連するアクセスレベルで構(gòu)成されています。ロール名には、スペースやタブを含めることはできず、パスワードファイル內(nèi)のエントリに対応している必要があります。アクセスレベルは次のいずれかです。
- readonly: MBean の屬性に読み取りアクセスを許可します。監(jiān)視の場(chǎng)合、これは、このロールのリモートクライアントが測(cè)定を読み取ることができるが、実行プログラムの環(huán)境を変更するアクションは実行できないことを意味します。
- readwrite: MBean の屬性への読み取りおよび書き込みアクセス、屬性への操作の呼び出し、これらの屬性の作成または削除を許可します。アプリケーションの操作を妨害できるのは、信頼できるクライアントだけであるため、このアクセス権は信頼できるクライアントにだけ許可する必要があります。
ロールは、アクセスファイル內(nèi)で 1 つのエントリだけを持つ必要があります。ロールにエントリがない場(chǎng)合、アクセス権はありません。ロールに複數(shù)のエントリがある場(chǎng)合、最後のエントリが優(yōu)先されます。
アクセスファイルの通常の事前定義のロールは次のとおりです。
# The "monitorRole" role has readonly access.
# The "controlRole" role has readwrite access.
monitorRole readonly
controlRole readwrite
JMX 管理および監(jiān)視プロパティ
構(gòu)成ファイルまたはコマンド行で、管理と監(jiān)視のプロパティを設(shè)定できます。コマンド行で指定したプロパティは、構(gòu)成ファイル內(nèi)のプロパティを無効にします。構(gòu)成ファイルのデフォルトの場(chǎng)所は、JRE_HOME/lib/management/management.properties
です。ここで JRE_HOME は、Java 実行時(shí)環(huán)境がインストールされているディレクトリです。com.sun.management.jmxremote
または com.sun.management.jmxremote.port
のいずれかのコマンド行プロパティが設(shè)定されている場(chǎng)合、JVM はこのファイルを読み取ります。SNMP 管理は同じ構(gòu)成ファイルを使用します。詳細(xì)は、「SNMP 監(jiān)視および管理」を參照してください。
次のコマンド行オプションでこの構(gòu)成ファイルに別の場(chǎng)所を指定することもできます。
com.sun.management.config.file=ConfigFilePath
ここで、ConfigFilePath は、この構(gòu)成ファイルへのパスです。
次の表は、すべての JMX 監(jiān)視および管理プロパティを示しています。
表 1. JMX 管理および監(jiān)視プロパティ
プロパティ名 |
説明 |
値 |
com.sun.management.jmxremote |
jconsole で使用される専用インタフェース上に公開された JMX コネクタ経由で JMX リモートエージェントおよびローカルの監(jiān)視を有効にします。jconsole ツールは、エージェントを開始したユーザ ID と同じユーザ ID で実行した場(chǎng)合、このコネクタを使用できます。このコネクタ経由の要求については、パスワードやアクセスファイルはチェックされません。 |
true / false - デフォルトは、true です。 |
com.sun.management.jmxremote. port |
JMX リモートエージェントを有効にして、指定したポート経由で待機(jī)するためにリモート JMX コネクタを作成します。デフォルトでは、SSL、パスワード、およびアクセスファイルプロパティがこのコネクタに使用されます。また、com.sun.management.jmxremote プロパティで説明したローカルの監(jiān)視も有効にします。 |
ポート番號(hào) - デフォルトはありません。 |
com.sun.management.jmxremote.
ssl |
SSL 経由で安全に監(jiān)視できるようにします。false の場(chǎng)合、SSL は使用されません。 |
true / false - デフォルトは、true です。 |
com.sun.management.jmxremote.
ssl.enabled.protocols |
SSL/TLS プロトコルバージョンを有効にするカンマ區(qū)切りのリスト。com.sun.management.jmxremote.ssl と組み合わせて使用されます。 |
デフォルトの SSL/TLS プロトコルバージョン |
com.sun.management.jmxremote.
ssl.enabled.cipher.suites |
SSL/TLS 暗號(hào)群を有効にするカンマ區(qū)切りのリスト。com.sun.management.jmxremote.ssl と組み合わせて使用されます。 |
デフォルトの SSL/TLS 暗號(hào)群 |
com.sun.management.jmxremote.
ssl.need.client.auth |
このプロパティが true でプロパティ com.sun.management.jmxremote.ssl が true の場(chǎng)合、クライアント認(rèn)証が実行されます。 |
true / false - デフォルトは、false です。 |
com.sun.management.jmxremote.
authenticate |
このプロパティが false の場(chǎng)合、JMX はパスワードまたはアクセスファイルを使用しません。すべてのユーザがアクセスを許可されます。 |
true / false -
デフォルトは、true です。 |
com.sun.management.jmxremote.
password.file |
パスワードファイルの場(chǎng)所を指定します。com.sun.management.jmxremote.password が false の場(chǎng)合、このプロパティとパスワードおよびアクセスファイルは無視されます。それ以外の場(chǎng)合は、パスワードファイルが存在し、有効なフォーマットである必要があります。パスワードファイルが空であるか存在しない場(chǎng)合、アクセスは許可されません。 |
JRE_HOME/lib/management/
jmxremote.password |
com.sun.management.jmxremote.
access.file |
アクセスファイルの場(chǎng)所を指定します。com.sun.management.jmxremote.password が false の場(chǎng)合、このプロパティとパスワードおよびアクセスファイルは無視されます。それ以外の場(chǎng)合は、アクセスファイルが存在し、有効なフォーマットである必要があります。アクセスファイルが空であるか存在しない場(chǎng)合、アクセスは許可されません。 |
JRE_HOME/lib/management/
jmxremote.access |
com.sun.management.jmxremote.
login.config |
RMI 監(jiān)視のユーザを認(rèn)証する場(chǎng)合に使用する JAAS ログイン設(shè)定エントリの名前を指定します。このプロパティをデフォルトのログイン設(shè)定をオーバーライドするために使用する場(chǎng)合は、JAAS でロードされたファイルに指定された設(shè)定エントリが存在する必要があります。また、設(shè)定で指定されたログインモジュールはユーザの資格を取得するために名前とパスワードのコールバックを使用する必要があります。詳細(xì)は javax.security.auth.callback.NameCallback および javax.security.auth.callback.PasswordCallback を參照してください。
com.sun.management.jmxremote.authenticate が false の場(chǎng)合、このプロパティおよびパスワード、アクセスファイルは無視されます。 |
デフォルトのログイン設(shè)定はファイルベースのパスワード認(rèn)証です。 |
構(gòu)成エラー
MBean サーバ、RMI レジストリ、またはコネクタの起動(dòng)中にエラーが発生した場(chǎng)合、JVM は例外をスローして終了します。構(gòu)成エラーには以下のものがあります。
- ポート番號(hào)へのバインドの失敗
- 無効なパスワードファイル
- 無効なアクセスファイル
- パスワードファイルが所有者以外に読み取り可能になっている
アプリケーションでセキュリティマネージャを?qū)g行している場(chǎng)合は、セキュリティ権限ファイルに追加の権限が必要です。