IBM WAS LibertyのJMX restConnectorを試してみる


はじめに

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経由で参照できます。

server.xml
  <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でアクセスする必要があるため、サーバ認証が行えるよう、認証ユーザも追加しておきます。

server.xml
    <basicRegistry id="basic" realm="BasicRealm"> 
        <user password="password" name="jmxuser"/>
    </basicRegistry>

JMXで取得できるMBeanデータはシステム管理情報のため、管理者権限をもつユーザからのみRESTアクセス可能となっています。そのため、作成したユーザには、合わせてLibertyサーバへの管理者ロールを与えておいてください。次のように記述します。

server.xml
    <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フィーチャーを使用してみました。

出典・参考