Pod として稼働する WAS Liberty を Health Center でモニターする

以前の記事で、Kubernetes クラスタ内で稼働する WAS Liberty をリモート・デバッグする方法を紹介しました。
今回は、WAS Liberty を Health Center でモニターする方法をご紹介します。

基本的な方法(`kubectl port-forward` でポート・フォワーディングする)はリモート・デバッグの場合と同じですが、IIOP 通信が使用されるので、ちょっとしたトリックが必要になります。IIOP 通信の場合、通信の途中で Pod の IP を使用して Pod に接続するフローになってしまい、Kubernetes クラスタ外からは接続できないからです。
そこで、マシン(PC)にループバック・アダプタを追加することで、対応します。

## マシン(PC)にループバック・アダプタを追加する
Health Center クライアントを起動するマシン(PC)にループバック・アダプタを追加します。Windows 10 の場合、以下の手順で追加できます。

1. `デバイスマネージャ` で `ネットワークアダプタ` を選択し、メニューから `操作->レガシーハードウェアの追加` を選択する。
1. 次に進んで、`一覧から選択したハードウェアをインストールする` を選択する。
1. 次に進んで、`ネットワーク アダプター` を選択する。
1. 次に進んで、`Microsoft KM-TEST Loopback Adapter` を選択して、インストールする。

## Health Center 用のオプションを設定をして、WAS Liberty を起動する
WAS Liberty 側の準備です。以下の JVM オプションを指定して、WAS Liberty を起動します。一時的な変更の場合は、環境変数 `JVM_ARGS` で指定するのが良いと思います。
 
```
-Xhealthcenter:port=1972,transport=iiop
-Dcom.ibm.java.diagnostics.healthcenter.agent.iiop.port=1973
-Dcom.ibm.java.diagnostics.healthcenter.data.collection.level=off
```

この例では、ブートストラップ・ポートとして 1972 を、IIOP ポートとして 1973 を使用するように指定しています。さらに、Health Center クライアントが接続するまで、Health Center エージェントがデータ収集を開始しないように指定しています。

- 参照： [Health Center の構成プロパティー](https://www.ibm.com/support/knowledgecenter/ja/SS3KLZ/com.ibm.java.diagnostics.healthcenter.doc/topics/configproperties.html)

## Health Center クライアントから WAS Liberty に接続しモニターする
Health Center 用のオプションを指定した WAS Liberty の Pod が起動したら、Health Center クライアントから WAS Liberty に接続します。
**ここらの操作は、Health Center クライアントを起動するマシン(PC)で行います。**

まず、`kubectl get pod -o wide` を実行し、pod の IP アドレスを確認します。
以下の例の場合、Pod "infra-test-debug-liberty-5fb4d89bcf-wsc66" の IP アドレスは 10.1.60.125 になっています。

```
C:\>kubectl get pod -o wide
NAME                                        READY   STATUS    RESTARTS   AGE   IP            NODE            NOMINATED NODE   READINESS GATES
infra-test-debug-liberty-5fb4d89bcf-wsc66   1/1     Running   0          20m   10.1.60.125   9.188.124.125   <none>           <none>
```

次に、ループバック・アダプタの IP アドレスに Pod の IP を設定します。Windows 10 の場合は、以下の手順になります。

1. ループバック・アダプタのプロパティー画面を開く。
1. IP v4 のプロパティーを開き、IP アドレスとして Pod の IP を指定する。(サブネットマスクは 255.255.255.255 でよい。その他の設定は不要。)
1. コマンド・プロンプトで `ipconfig -all` を実行し確認する。

続いて、`kubectl port-forward` を実行し、ポート・フォワーディングを開始します。`-address` オプションで、ループバック・アダプタの IP (=Pod の IP) をフォワーディング対象とし、２つのポートをフォワーディングします。
以下は、ループバック・アダプタの IP (=Pod の IP) 10.1.60.125 のポート 1972 と 1973 を 対象の Pod "infra-test-debug-liberty-5fb4d89bcf-wsc66" の同じポートにポート・フォワーディングする場合の例です。

```
C:\>kubectl port-forward --address 10.1.60.125 infra-test-debug-liberty-5fb4d89bcf-wsc66 1972 1973
Forwarding from 10.1.60.125:1972 -> 1972
Forwarding from 10.1.60.125:1973 -> 1973
```

準備が整ったので、Health Center クライアントを起動して WAS Liberty に接続します。Eclipse に Health Center クライアントをインストールしている場合は、以下の手順で接続できます。

1. Health Center のパースペクティブを開き、メニューから `File -> 新規接続` を選択し、`Health Center 接続ウィザード` を開く。
1. 次に進んで、下表の情報を入力する。
1. 次に進んで、検出された Pod に接続する。

|項目|入力内容|
|:------------|:-------------------|
|ホスト名|**ループバック・アダプタの IP (=Pod の IP)**|
|ポート|-Xhealthcenter:port= で指定したポート(例の場合は 1972)|
|次の100個の…|アンチェック|
|セキュリティ|セキュリティなし|

尚、Eclipse のメニューから `File -> 新規接続` を選択すると、既存の接続が切断されます。

## モニタリング・データをファイルに出力する場合
モニタリング・データをファイルに出力させ、後で、Health Center クライアントで確認することも可能です。
以下は、JVM オプションの設定例です。

```
-Xhealthcenter
-Dcom.ibm.diagnostics.healthcenter.headless=on
-Dcom.ibm.java.diagnostics.healthcenter.data.collection.level=headless
-Dcom.ibm.java.diagnostics.healthcenter.headless.output.directory=/logs
-Dcom.ibm.java.diagnostics.healthcenter.headless.files.max.size=100000000
-Dcom.ibm.java.diagnostics.healthcenter.headless.files.to.keep=2
```

- 参照： [Health Center の構成プロパティー](https://www.ibm.com/support/knowledgecenter/ja/SS3KLZ/com.ibm.java.diagnostics.healthcenter.doc/topics/configproperties.html)