JMXとはJava Management Extensionsの略で、アプリケーションやシステムオブジェクト、サービス指向ネットワークの管理と監視を行うツールを提供するJava技術です。この記事ではJMXの使い方をご紹介します。
JMX (Java Management Extensions)はアプリケーション、システムオブジェクト、デバイス及びサービス指向ネットワークの管理と監視を行うツールを提供するJava技術である。
JMXでは監視及び管理対象のリソースをMBeanと呼ばれるオブジェクトで表現して、アプリケーション側からはJMX Agent (MBean Server)を介してアクセスする。JMX Agentへのリモートアクセスは、通信プロトコルごとに用意されたConnectorと呼ばれる通信モジュールを介して行う。
JMXでは管理対象とするデバイス、アプリケーション又はリソースの属性及び操作をまとめたBeanで管理する。この管理対象BeanをMBeanと呼ぶ。
JCconsole (Java Monitoring & Management Console)はJMX仕様に準拠した監視ツールである。jconsoleはJDK_HOME/bin
ディレクトリに配置されている。
jconsole [-interval=n] [-notile] [-pluginpath path] [-version] [connection ...]
connectionには、次に示す形式で接続先を指定する。
pid|host:port|service:jmx:protocol://url
JConsoleには次に示すオプションを指定できる。
JMXには次のパッケージが用意されている。
javax.managementはJMXの核となるクラスを提供するパッケージである。
インタフェース | 説明 |
---|---|
MBeanServerConnection | MBeanサーバとの通信方法 |
クラス | 説明 |
---|---|
JMX | JMX APIからのstaticメソッド |
ObjectName | MBeanのオブジェクト名 |
例外 | 説明 |
---|---|
MalformedObjectNameException | 文字列の形式が有効なObjectNameに対応していない |
javax.management.JMXはJMX APIからのstaticメソッドを提供するクラスである。JMXクラスのインスタンスは存在しない。
Method | Description |
---|---|
newMBeanProxy | ローカル又はリモートのMBeanサーバ内に標準MBeanプロキシを作成する。 |
javax.management.MBeanServerConnectionはMBeanサーバとの通信方法を表すインタフェースである。
javax.management.ObjectNameはMBeanのオブジェクト名、又は複数のMBean名に一致するパターンを表すクラスである。
javax.management.openmbeanは公開データ型とOpen MBean記述子クラスを提供するパッケージである。
Interface | Description |
---|---|
TabularData | テーブルデータ構造を表す公開データ |
javax.management.remoteはJMX Beanサーバにリモートアクセスするためのインタフェースを提供するパッケージである。
Interface | Description |
---|---|
JMXConnector | JMX APIのクライアント側 |
Class | Description |
---|---|
JMXConnectorFactory | JMX APIコネクタクライアントを作成するファクトリ |
JMXServiceURL | JMX APIコネクタサーバのアドレス |
javax.management.remote.JMXServiceURLはJMX APIコネクタサーバのサービスURLを表すクラスである。
サービスURLは次に示す形式である。
service:jmx:protocol:sap
protocolはコネクタサーバに接続する際に使用する転送プロトコルである。
sapはコネクタサーバが検出されたアドレスで、次に示す形式である。
//[host[:port]][url]
javax.management.remote.JMXConnectorはJMX APIコネクタのクライアント側を表すインタフェースである。
Method | Description |
---|---|
close | クライアントとサーバの接続を終了する。 |
getMBeanServerConnection | リモートMBeanサーバを表すMBeanServerConnction オブジェクトを返す。 |
javax.management.remote.JMXConnectorFactoryはJMX APIコネクタクライアントを作成するファクトリである。JMXConnectorFactoryクラスのインスタンスは存在しない。通常、JMXへの接続はJMXConnectorFactoryクラスのconnect
メソッドにより確立される。
JolokiaとはMBeanにHTTP経由でアクセスできるエージェントである。応答はJSONで返ってくる。
JMXクライアントプログラムの例を次に示す。
import java.io.IOException;
import java.net.MalformedURLException;
import java.util.HashMap;
import javax.management.MBeanServerConnection;
import javax.management.remote.JMXConnector;
import javax.management.remote.JMXConnectorFactory;
import javax.management.remote.JMXServiceURL;
public class JmxClient {
public static void main(String[] args) {
HashMap<String, String[]> environment = new HashMap<String, String[]>();
String username = "karaf";
String password = "karaf";
String[] credentials = new String[] { username, password };
environment.put("jmx.remote.credentials", credentials);
try {
JMXServiceURL url = new JMXServiceURL("service:jmx:rmi://localhost:44444/jndi/rmi://localhost:1099/karaf-trun");
JMXConnector jmxc = JMXConnectorFactory.connect(url, environment);
MBeanServerConnection mbsc = jmxc.getMBeanServerConnection();
String domains[] = mbsc.getDomains();
for (int i = 0; i < domains.length; i++) {
System.out.println("Domain[" + i + "] = " + domains[i]);
}
jmxc.close();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}