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でも同じように動作します）<br>
17.0.0.4（旧バージョンでもかまいません）
- JDK 8
- Linux版、Windows版およびEclipse上のMac環境で確認。 ホスト版は対象としていません。

# LibertyにrestConnectorを組み込む
LibertyサーバでJMX（MBean/MXBean）管理情報をREST公開する方法は簡単で、restConnectorフィーチャをserver.xmlに組み込み、起動することで動作します。
これで、LibertyサーバのJMX管理BeanをREST経由で参照できます。<br>

```xml: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 のリスト](https://www.ibm.com/support/knowledgecenter/ja/SSEQTP_9.0.0/com.ibm.websphere.wlp.doc/ae/rwlp_mbeans_list.html)」を参照してください。

JMX REST APIは、httpsでアクセスする必要があるため、サーバ認証が行えるよう、認証ユーザも追加しておきます。

```xml:server.xml
    <basicRegistry id="basic" realm="BasicRealm"> 
        <user password="password" name="jmxuser"/>
    </basicRegistry>
```
JMXで取得できるMBeanデータはシステム管理情報のため、管理者権限をもつユーザからのみRESTアクセス可能となっています。そのため、作成したユーザには、合わせてLibertyサーバへの管理者ロールを与えておいてください。次のように記述します。

```xml:server.xml
    <administrator-role>
    	<user>jmxuser</user>
    </administrator-role>
```
server.xmlの準備ができたら、Libertyサーバを開始します。
サーバ起動後、REST APIでJMXサーバ管理情報へアクセスが可能になります。

## ブラウザでLibertyのサーバ管理情報を取得してみる
ウェブ・ブラウザからLibertyサーバへアクセスし、JMXサーバ管理情報をREST　API経由で取得できるか確認してみます。restConnectorによって、次のアクセス・ポイントが公開されています。<br>

https://xxxxxxxx/IBMJMXConnectorREST/<br>

/IBMJMXConnectorREST/エントリ・ポイントを使用してJMX MBeanあるいはMXBeanの情報を取得してみます。
例えば、ObjectName=WebSphere:type=JvmStatsの管理するUsedMemoryの値を問い合わせるのであれば、次のようにパラメータを指定します。<br>
https://xxxxxxxx/IBMJMXConnectorREST/mbeans/WebSphere%3Atype%3DJvmStats/attributes/UsedMemory<br>
![スクリーンショット 2018-01-19 15.12.53.png](https://qiita-image-store.s3.amazonaws.com/0/217131/f7b16a75-a5c4-7a80-28f1-d69d8ce10490.png)
結果が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を操作を記述しています。

```CMD
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ディレクトリに格納されていますので、事前にコピーを入手しておいてください。<br>
SSL通信を行うためのtrustStoreの設定も必要です。key.jksファイルはLibertyサーバで生成されたサーバ証明ファイルです。ファイル生成の際の指定したパスワードとも一致させます。こちらも、Libertyサーバから予め入手しておいてください。<br>
jconsoleが起動したら、「リモート・プロセス」を使用して接続設定を行います。入力エリアに、”service:jmx:rest://(サーバアドレス):443/IBMJMXConnectorREST”と入力します。なお、IHSを経由していないのであれば、直接LibertyのSSLポート（例えば9443）を指定します。<br>
![jconsole_login.png](https://qiita-image-store.s3.amazonaws.com/0/217131/44ace240-0fb5-1ff8-d340-f675875c1ba7.png)<br>
jconsoleのLibertyサーバ接続が成功した後は、普段どおりのjconsole機能がそのまま使えます。REST経由での接続でも、jconsole自体の使い勝手は同じです。<br>
なお、montor-1.0フィーチャーを組み込んでいますので、"WebSphere"と言うキーワードのWAS独自のサーバ管理カテゴリーの情報も参照できます。
![jconsole_logded.png](https://qiita-image-store.s3.amazonaws.com/0/217131/c39ae1cd-4817-6ab2-a81b-35d858b05d60.png)

# おわりに
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