vmware-appmonitorを試す

# 概要
 vSphere環境のHA機能の仮想マシンの監視機能であるアプリケーション監視を簡易に実現できるvmware-appmonitorの動作を、遅まきながら確認してみました。

# 内容
## 環境
 vSphere上のゲストはRHEL7.4で確認してみました。

## 事前設定
 vSphere環境の可用性設定で、「仮想マシンの監視」で「アプリケーションの監視」を有効にしておく必要があります。
 また、VMWareのGuestSDKに含まれるlib配下は、/usr/lib64配下に転送し、bin配下のvmware-appmonitorには実行権限を付けておきました。

## vmware-appmonitorのオプション
```
[root@hpdb0101 bin64]# ./vmware-appmonitor --help                                                                                                                                                                                
Usage: ./vmware-appmonitor {enable | disable | markActive | isEnabled | getAppStatus | postAppState [appStateOk|appStateNeedReset]}
```
 - enable : 監視を開始します。
 - disable : 監視を無効にします。
 - markActive : ゲスト(アプリケーション)が健全なことをvSphereに通知します。
 - isEnabled : 監視の有効状態を確認します。
 - getAppStatus : 監視の状態を確認します。
 - postAppStat : 以下のサブコマンドを実行します。
  * appStateOK : 不明(よくわかりません）
  * appStateNeedRest : ゲストをリセットします。
   * どうやら以下とのことです。(https://vdc-repo.vmware.com/vmwb-repository/dcr-public/4ac029aa-34ad-46b1-9b60-d2603b426d6e/62af2377-9649-4707-88a7-6e4b3df5376d/doc/guest_sdk_HAappmon.6.4.html#992070)

```
VMGuestAppMonitor_PostAppState int
ゲストOSがvSphere HAに配信したいアプリケーション状態を公開します。アプリケーションはその環境を監視し、それに応じて状態を更新する必要があります。ハートビートカウントを前提条件として有効にする必要はないので、enable（）呼び出しは不要です。成功した場合は0（ゼロ）を返します。
この呼び出しに渡される単一の状態パラメータは、次のいずれかです。
■OK - ゲストのアプリケーションエージェントは状態が正常であると宣言したため、対処は不要です。
■needReset - ゲストのアプリケーションエージェントは即時リセットを要求しました。ゲストはいつでもこれをリクエストできます。
```

## 動作
監視開始からリセットまでを確認してみました。

```
★まずは、監視は無効状態です。
[root@hpdb0101 bin64]# ./vmware-appmonitor getAppStatus
gray

[root@hpdb0101 bin64]# ./vmware-appmonitor isEnabled                                                                                                                                                                             
false

★監視を有効にします。
[root@hpdb0101 bin64]# ./vmware-appmonitor enable                                                                                                                                                                                

★監視が有効になりました。
[root@hpdb0101 bin64]# ./vmware-appmonitor isEnabled
true

★ステータスもgreenになります。
[root@hpdb0101 bin64]# ./vmware-appmonitor getAppStatus                                                                                                                                                                          
green

★健全性を通知します。
[root@hpdb0101 bin64]# ./vmware-appmonitor markActive                                                                                                                                                                            

★ステータスもgreenのままです。
[root@hpdb0101 bin64]# ./vmware-appmonitor getAppStatus
green

★暫く健全を通知しないと・・・ステータスがredになってきます。
[root@hpdb0101 bin64]# ./vmware-appmonitor getAppStatus
red

★その後、暫くして、vSphereのHAが発動して、ゲストが再起動されます。(vCenterにも、HAが発動した旨のタスクなどが表示されます。）

```

さらに、appStateNeedRestを実行してみました。
こちらは、監視を有効にせずとも、利用可能なようで、即座にゲストが再起動されます。

```
[root@hpdb0101 bin64]# ./vmware-appmonitor getAppStatus                                                                                                                                                                          
gray
[root@hpdb0101 bin64]# ./vmware-appmonitor isEnabled                                                                                                                                                                             
false
[root@hpdb0101 bin64]# ./vmware-appmonitor postAppState appStateNeedReset  
★ここで再起動。
```

PacemakerのRAなどを作成しておけば、enabled/markActive/disableの実行でアプリケーション監視を利用出来そうです。
(watchdogデバイスが使えないなどのゲストの場合は、特に有効かも知れません。)
また、postAppState appStateNeedResetを上手くStonithエージェントとしてラップすれば、fencingによる自殺は出来そうです。

# 関連リンク
 参考にさせて頂きました
 - http://deathon2legs.blogspot.com/2015/05/vmware-appmonitor.html
 HA Applicationの情報
 - https://vdc-repo.vmware.com/vmwb-repository/dcr-public/4ac029aa-34ad-46b1-9b60-d2603b426d6e/62af2377-9649-4707-88a7-6e4b3df5376d/doc/guest_sdk_HAappmon.6.1.html#991058