━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
ケーススタディ
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
NSX API によるトラブルシューティング
今回は NSX の機能の1つである NSX API について取り上げます。NSX のリリースノートや KB でも対応策として API を案内していることがあり、弊社サポートからも情報収集や復旧を目的としてお客様へ API の実行を依頼することも少なくありません。そこで本項ではNSX API の基本的な実行方法と実践的な API を2つご紹介します。
■ NSX API の実行
ここではNSX APIの基本的な実行手順を解説します。
<クライアントマシンの確認>
NSX API では、外部から NSX Manager に対し HTTP リクエストを送信することで様々な処理を実行できます。リクエスト送信では HTTPS プロトコルのみがサポートされているため、クライアントマシンは NSX Manager と HTTPS (443 ポート) で通信できる必要があります。これはクライアントマシンから Web ブラウザで NSX Manager アプライアンス GUI(https ://<nsx-manager-ip> または https ://<nsx-manager-hostname>) を表示できるかどうかで確認できます。
<REST クライアントの導入>
HTTP リクエストを送信するための REST クライアントとして Postman やcurl コマンド等を導入する必要があります。NSX APIド キュメントでもいくつか紹介されていますが、Hands On Lab 環境でも利用出来る Postman がよく使われているようです。また最近のWindows 10 (バージョン 1803 以降) では標準コマンドとして curl コマンドが追加されているため、Linux だけでなく Windows 上でも curl で簡単に API を実行できます。
<NSX APIの実行>
ここでは Windows 上でPostman および curl コマンドを用いて NSX Manager のバージョン情報をAPIで取得する手順をご紹介します。
実行する API の情報
Authorization:
- Type: BasicAuthorization
- Username: admin
- Password: <admin-password>
Method: GET
URL: https ://<nsx-manager>/api/1.0/appliance-management/global/info
Postman でこの API を実行する手順は以下の通りです。

図.1 Postman での API 実行例
- メソッドとして GET が選択されていることを確認します。
- URL 欄に https ://<nsx-manager> を入力します。
- [Authorization] タブで [Type] として Basic Auth を選択し、[Username] に admin、[Password] に <admin-password> を入力したら [Update Request] をクリックして認証情報を反映します。
- [Send] をクリックして API を実行します。
- HTTP ステータスコードとレスポンスを確認します。レスポンスが得られず図.2 のように表示された場合は、ホスト名や IP アドレスが間違っていたり、Chrome (拡張元のブラウザ) で自己署名証明書を例外として受け入れていないため HTTPS コネクション確立に失敗したりしている可能性があります。Chrome で NSX Manager アプライアンス GUI にアクセスした場合に SSL に関するエラーが表示されているか確認し、もしエラーが表示されていれば NSX Manager の自己署名証明書を例外として受け入れます。

図.2 Postman で HTTPS コネクション確立に失敗した場合のエラー
Windows のコマンドプロンプトから curl でこの API を実行する場合は以下のようなコマンドを実行します。
CMD> curl.exe -k -D - -u admin:<admin-password> -X GET https ://192.168.10.30/api/1.0/ appliance-management/global/info
HTTP/1.1 200 OK
...
<globalInfo><currentLoggedInUser>admin</currentLoggedInUser><versionInfo> <majorVersion>6</majorVersion><minorVersion>4</minorVersion><patchVersion> 4</patchVersion><buildNumber>11197766</buildNumber></versionInfo><read OnlyAccess>false</readOnlyAccess></globalInfo>
-k オプションにより HTTPS コネクション確立時に NSX Manager の自己署名証明書の検証をスキップします。
-D オプションにより HTTP ステータスコードを含むレスポンスヘッダを標準出力(”-”)へ表示します。
-u オプションにより認証で利用するユーザとして admin、パスワードとして <admin-password> を指定します。ユーザとパスワードは ":" で区切ります。
-X オプションによりメソッドとして GET を指定します。
URL として https ://<nsx-manager>/api/1.0/appliance-management/global/info を指定します。
■ よく利用される API
ここではトラブルシューティングで利用頻度が高い実践的な API を2つご紹介します。
1. メッセージバスの同期
POST /api/2.0/nwfabric/configure?action=synchronize の API を実行すると NSX Manager とホスト間でメッセージバスを同期出来ます。NSX Manager とホスト間の通信はこのメッセージバスと呼ばれるコネクション上で行われており、分散ファイアウォールのルール配信や Edge の設定変更などで問題が発生した場合はこのメッセージバスの同期が有効なケースがあります。複数の既知問題に対する復旧策としてもリリースノートに記載されており、お客様へご案内することが最も多い API の1つです。
メッセージバス同期 API の情報
Authorization:
- Type: BasicAuthorization
- Username: admin
- Password: <admin-password>
Header:
- Key: Content-Type
- Value: application/xml
Method: POST
URL: https ://<nsx-manager>/api/2.0/nwfabric/configure?action=synchronize
Request Body:
<nwFabricFeatureConfig>
<featureId>com.vmware.vshield.vsm.messagingInfra</featureId>
<resourceConfig>
<resourceId> host-id または cluster-id </resourceId>
</resourceConfig>
</nwFabricFeatureConfig>
API 実行時はメッセージバスを同期する対象として特定のホストの host-id またはクラスタの cluster-idを指定する必要があります。host-id や cluster-id は NSX Manager の ”show cluster“ コマンドで確認できます。
”show cluster“ コマンド実行例 (分散ファイアウォールの CLI コマンドより)
nsxmgr> show cluster all
No. Cluster Name Cluster Id Datacenter Name Firewall Status
1 Compute Cluster A domain-c33 Datacenter Site A Enabled
2 Management & Edge Cluster domain-c41 Datacenter Site A Enabled
nsxmgr> show cluster domain-c33
Datacenter: Datacenter Site A
Cluster: Compute Cluster A
No. Host Name Host Id Installation Status
1 esx-02a.corp.local host-32 Enabled
2 esx-01a.corp.local host-28 Enabled
Postman でこの API を実行する場合はメソッド、URL、認証情報に加え [Headers] タブで Key に Content-Type、Value に application/xml を入力します。さらに [Body] タブで [raw] を選択しリクエストボディを入力します。API を実行するとレスポンスボディとして jobdata-xxxx が表示されます。

図.3 Postman でのメッセージバス同期 API 実行例1

図.4 Postman でのメッセージバス同期 API 実行例2
Windows のコマンドプロンプトから curl でこの API を実行する場合は以下のようなコマンドを実行します。メソッド、URL、認証情報に加え -H オプションでヘッダを指定し、-d オプションでリクエストボディを指定します。API を実行するとレスポンスボディとして jobdata-xxxx が表示されます。
CMD> curl.exe -k -D - -u admin: <admin-password> -H "Content-Type: application/xml"-X POST https ://192.168.10.30/api/2.0/nwfabric/configure?action=synchronize -d "<nwFabricFeatureConfig>
<featureId>com.vmware.vshield.vsm.messagingInfr
a</featureId><resourceConfig><resourceId>host-124</resourceId></resourceConfig> </nwFabricFeatureConfig>"
HTTP/1.1 200 OK
...
jobdata-2848
2. Guest Introspection のログ収集
GET /api/1.0/hosts/<host-id>/techsupportlogs を実行すると指定したホスト上で稼働する Guest Introspection の仮想マシンのログバンドルを収集できます。NSX 6.2/6.3 では GUI 操作で Guest Introspection の仮想マシンのログバンドルを収集することができずログ収集は必ずこの API を利用する必要があるため、利用頻度の高い API です。
Guest Introspection ログバンドル収集 API の情報
Authorization:
- Type: BasicAuthorization
- Username: admin
- Password: <admin-password>
Method: GET
URL: https ://<nsx-manager>/api/1.0/hosts/<host-id>/techsupportlogs
API 実行時は対象の Guest Introspection の仮想マシンが稼働しているホストの host-id を指定する必要があります。
Postman でこの API を実行する場合はメソッド、URL、認証情報を入力し [Send and Download] をクリックしてログバンドル (gz 形式) をダウンロードします。

図.5 Postman での Guest Introspection ログバンドル収集 API 実行例
Windows のコマンドプロンプトから curl でこの API を実行する場合は以下のようなコマンドを実行します。メソッド、URL、認証情報に加え -L オプションでリダイレクトを有効にし、-o オプションでログバンドルの出力先ファイル名を指定します。
CMD> curl.exe -k -D - -u admin:<admin-password> -L -X GET https ://192.168.10.30/api/1.0/hosts/host-124/techsupportlogs -o log_GI_host-124.gz
HTTP/1.1 303 See Other
...
Location: https ://192.168.10.30//tech_support_logs/usvm/vshield_host_support_host-124_usvm_012419_163908GMT.log.gz
...
HTTP/1.1 200 OK
...
|