はじめに
WebSphere Application Server Liberty ProfileのJMX(Java Management Extensions)仕様に基づくサーバ管理情報をJMX REST APIで取得できるよう、restConnector-2.0を試してみたいと思います。
試した環境
- IBM WebSphere Application Liberty Profile (Open Libertyでも同じように動作します)
17.0.0.4(旧バージョンでもかまいません) - JDK 8
- Linux版、Windows版およびEclipse上のMac環境で確認。 ホスト版は対象としていません。
LibertyにrestConnectorを組み込む
LibertyサーバでJMX(MBean/MXBean)管理情報をREST公開する方法は簡単で、restConnectorフィーチャをserver.xmlに組み込み、起動することで動作します。
これで、LibertyサーバのJMX管理BeanをREST経由で参照できます。
<featureManager>
<feature>javaee-7.0</feature>
<feature>monitor-1.0</feature>
<feature>restConnector-2.0</feature>
</featureManager>
restConnector-2.0フィーチャーの他にmonitor-1.0フィーチャも追加しています。monitor-1.0フィーチャーはLibertyサーバのJMX管理情報を広げてくれるますので、合わせて使用すると便利です。
monitor-1.0フィーチャの提供する管理情報はIBM Knowledge Centerの「Liberty Profileで提供されている MBean のリスト」を参照してください。
JMX REST APIは、httpsでアクセスする必要があるため、サーバ認証が行えるよう、認証ユーザも追加しておきます。
<basicRegistry id="basic" realm="BasicRealm">
<user password="password" name="jmxuser"/>
</basicRegistry>
JMXで取得できるMBeanデータはシステム管理情報のため、管理者権限をもつユーザからのみRESTアクセス可能となっています。そのため、作成したユーザには、合わせてLibertyサーバへの管理者ロールを与えておいてください。次のように記述します。
<administrator-role>
<user>jmxuser</user>
</administrator-role>
server.xmlの準備ができたら、Libertyサーバを開始します。
サーバ起動後、REST APIでJMXサーバ管理情報へアクセスが可能になります。
ブラウザでLibertyのサーバ管理情報を取得してみる
ウェブ・ブラウザからLibertyサーバへアクセスし、JMXサーバ管理情報をREST API経由で取得できるか確認してみます。restConnectorによって、次のアクセス・ポイントが公開されています。
https://xxxxxxxx/IBMJMXConnectorREST/
/IBMJMXConnectorREST/エントリ・ポイントを使用してJMX MBeanあるいはMXBeanの情報を取得してみます。
例えば、ObjectName=WebSphere:type=JvmStatsの管理するUsedMemoryの値を問い合わせるのであれば、次のようにパラメータを指定します。
https://xxxxxxxx/IBMJMXConnectorREST/mbeans/WebSphere%3Atype%3DJvmStats/attributes/UsedMemory
結果がJSON形式で戻されますので、いろいろなプログラム言語やツールで情報を利用できます。
jconsoleからrestConnectorにリモート接続してみる
restConnector経由で、リモート端末のjconsoleからもREST APIによるJMXアクセスが可能ですので、こちらも試してみたいと思います。
jconsoleを起動(-J-Dオプション付き)
service:jmx:restプロトコルでjconsoleとLibertyサーバーをリモート接続するには、SSLでの接続を可能にする必要がありませにで、-J-Dオプションを使用し、次のようjconsoleをSSLアクセス用に起動します。
※自分のMacBook Airでは、何故かjconsoleでのREST接続がうまく出来ませんでした。
そのため、以降はWindows環境を前提にjconsoleを操作を記述しています。
jconsole
-J-Djava.class.path=${JAVA_HOME}¥lib¥jconsole.jar:${WAS_DIR}¥clients¥restConnector.jar
-J-Djavax.net.ssl.trustStore=key.jks
-J-Djavax.net.ssl.trustStorePassword=password
-J-Djavax.net.ssl.trustStoreType=jks
通常、jconsoleと打鍵するだけでコンソール画面は起動しますが、Liberty RESR APIでのjconsoleを利用するには、更にjconsole.jar、restConnector.jar、各実行ライブラリの指定が必要です。restConnector.jarは、Libertyサーバに付属するランタイム・プログラムで、JMX REST APIを使用する上で必要になるクライアント・ライブラリです。Libertyサーバを導入した、[インストール・ディレクトリ]/clientsディレクトリに格納されていますので、事前にコピーを入手しておいてください。
SSL通信を行うためのtrustStoreの設定も必要です。key.jksファイルはLibertyサーバで生成されたサーバ証明ファイルです。ファイル生成の際の指定したパスワードとも一致させます。こちらも、Libertyサーバから予め入手しておいてください。
jconsoleが起動したら、「リモート・プロセス」を使用して接続設定を行います。入力エリアに、”service:jmx:rest://(サーバアドレス):443/IBMJMXConnectorREST”と入力します。なお、IHSを経由していないのであれば、直接LibertyのSSLポート(例えば9443)を指定します。
jconsoleのLibertyサーバ接続が成功した後は、普段どおりのjconsole機能がそのまま使えます。REST経由での接続でも、jconsole自体の使い勝手は同じです。
なお、montor-1.0フィーチャーを組み込んでいますので、"WebSphere"と言うキーワードのWAS独自のサーバ管理カテゴリーの情報も参照できます。
おわりに
WebSphere Application Server Liberty Profileのサーバ管理情報を、JMX REST APIで取得するrestConnectorフィーチャーを使用してみました。
出典・参考
-
WASdev blog : Accessing Liberty’s JMX REST APIs
https://developer.ibm.com/wasdev/docs/accessing-libertys-jmx-rest-apis/ -
IBM Knowledge Center : Liberty へのセキュア JMX 接続の構成 https://www.ibm.com/support/knowledgecenter/ja/SSEQTP_9.0.0/com.ibm.websphere.wlp.nd.multiplatform.doc/ae/twlp_admin_restconnector.html
-
IBM Knowledge Center : Liberty Profileで提供されている MBean のリスト
https://www.ibm.com/support/knowledgecenter/ja/SSEQTP_9.0.0/com.ibm.websphere.wlp.doc/ae/rwlp_mbeans_list.html -
JConsole を使用した Bluemix 内の Liberty のモニター
https://console.bluemix.net/docs/runtimes/liberty/monitoring/jconsole.html#jconsole