免責事項: これは英文の記事「 Exporting system logs for any virtual machine fails via vCenter UI and downloads an invalid file starting version 8.0u3 」の日本語訳です。記事はベストエフォートで翻訳を進めているため、ローカライズ化コンテンツは最新情報ではない可能性があります。最新情報は英語版の記事で参照してください。
任意の仮想マシンでシステムログのダウンロードまたはエクスポートを実施した時:
vCenter UI にログインし、任意の仮想マシンを右クリックして [システム ログのエクスポート] を選択すると、数 KB の無効なファイルがエクスポートされ、直ちに失敗します。
ESXi ホスト UI では、仮想マシンに対する [システムログのエクスポート] オプションがグレーアウトされます。
以下は同画面のスクリーンショットです:
同様に、vSphere Client から「Send_NMI_To_Guest」オプションを使用して仮想マシンのシステムログをエクスポートすると、データが含まれない無効なファイルがダウンロードされます。
以下は、/var/log/vmware/vsphere-ui/logs/vsphere_client_virgo.log のログの抜粋です。
[YYYY-MM-DD] [ERROR] nio-127.0.0.1-5090-exec-9007 c.v.vsphere.client.h5.admin.controllers.ExportLogsController
FileId parameter is empty.
[YYYY-MM-DD] [ERROR] nio-127.0.0.1-5090-exec-9007 c.v.vsphere.client.h5.admin.controllers.ExportLogsController
Error while downloading logs. java.io.IOException: Server returned HTTP response code: 500 for URL: http://localhost:1080
/external-vecs/443/cgi-bin/vm-support.cgi?manifests=
at sun.reflect.GeneratedConstructorAccessor3066.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at sun.net.www.protocol.http.HttpURLConnection$10.run(HttpURLConnection.java:1952)
at sun.net.www.protocol.http.HttpURLConnection$10.run(HttpURLConnection.java:1947)
at java.security.AccessController.doPrivileged(Native Method)
at sun.net.www.protocol.http.HttpURLConnection.getChainedException(HttpURLConnection.java:1946)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1516)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1500)
at com.vmware.vise.util.http.ConnectionManager.getResponseBodyAsStream(ConnectionManager.java:341)
at com.vmware.vise.util.http.SimpleHttpClient.executeMethodResponseAsStream(SimpleHttpClient.java:223)
at com.vmware.vise.util.http.SimpleHttpClient.executeMethodResponseAsStream(SimpleHttpClient.java:244)
at com.vmware.vsphere.client.logbundle.HttpZipEntry.connect(HttpZipEntry.java:211)
at com.vmware.vsphere.client.logbundle.UrlZipEntry.write(UrlZipEntry.java:165)
at com.vmware.vsphere.client.h5.admin.controllers.ExportLogsController.writeHostLogsToStream(ExportLogsController.java:608)
at com.vmware.vsphere.client.h5.admin.controllers.ExportLogsController.access$500(ExportLogsController.java:82)
at com.vmware.vsphere.client.h5.admin.controllers.ExportLogsController$1.run(ExportLogsController.java:372)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at com.vmware.vise.util.concurrent.ExecutorUtil$LatchRunnable.run(ExecutorUtil.java:1301)
at com.vmware.vise.util.concurrent.ExecutorUtil.executeTasks(ExecutorUtil.java:325
VMware vCenter Server 8.0.3x
これは、vCenter Server バージョン 8.0 U3 に影響する既知の問題です。
この問題は、vCenter Server 8.0 Update 3e で解決されています。
注: 仮想マシンをサスペンド状態にして以下に記載するハングコマンドを送信すると、ゲスト OS が一時的にクラッシュする可能性があります。
回避策:
root ユーザーとして SSH またはコンソールで ESXi ホストにログインし、以下の手順に従って特定の仮想マシン用ログバンドルを生成します。
vm-support --listvms
出力例:
/vmfs/volumes/xxxxxxxx-xxxxxxxx-xxxx-xxxxxxxxxxxx/New Virtual Machine/New Virtual Machine.vmx (Registered)
/vmfs/volumes/xxxxxxxx-xxxxxxxx-xxxx-xxxxxxxxxxxx/Test VMachine/Test VMachine.vmx (Registered)
次のステップで、上記で確認した仮想マシンの .vmx ファイルの完全なパスを指定します。
vm-support --vm /vmfs/volumes/xxxxxxxx-xxxxxxxx-xxxx-xxxxxxxxxxxx/Test VMachine/Test VMachine.vmx
仮想マシンのログが生成され、完了すると保存先のデータストアのパスが出力されます。
上記に加え、ログバンドルをカスタマイズする (仮想マシンのサスペンドやハングコマンドの送信など) 場合は、以下のコマンドを使用してマニフェストを一覧表示できます。
vm-support --listmanifests
vm-support -h を使用して、利用可能なすべてのオプションを確認できます。
「Send_NMI_To_Guest」オプションを使用して仮想マシンのシステムログをエクスポートするための回避策:
vm-support コマンドラインを使用して、ホストから直接システムログを収集します。
root ユーザーとして SSH またはコンソールで ESXi ホストにログインします。
注: 仮想マシンがインベントリに登録されている必要があります。
以下のコマンドを実行し、登録済みで実行中のすべての仮想マシンを一覧表示します。
vm-support --listvms
vmdumper -l
以下のコマンドを実行して NMI を送信します。
vm-support -a HungVM:Send_NMI_To_Guest --vm=/vmfs/volumes/Path/of/VMname.vmx
KB「ESXi 6.x 以降でゲスト OS に対して NMI を送信する方法」を参照してください。