vCenter Server 7.0 のイベントをテキストで取得
Table of contents
はじめに
vSphere Web Client (Flash 版) が vSphere 7 で遂に廃止となりました。vSphere Client (HTML5 版) は動作もスムーズで良いのですが、どうやら現時点では従来のイベントのエクスポートが行えないようです。
Exporting virtual machine events from the Tasks & Events tab (2008204)
Note: The export tasks/Events option is only available on the vSphere Web Client (Flex). The HTML client does not include this feature at this time.
このため、別の方法でイベントを取得する方法を試してみました。試した方法は以下の2パターンです。
- イベントストリーミングで転送してみる
- PowerCLI でエクスポートしてみる
なお、どちらの方法もメッセージの言語のローカライズは行われないためご注意ください。
VCSA のイベントストリーミングで転送してみる
イベントストリーミングでの転送では以下の2点の設定が必要ですが、後者は既定で設定済みなので、実質的には前者のリモート Syslog 転送の設定だけ行うことでイベントが転送されるようになります。
Syslog 転送の構成はアプライアンス管理インターフェイス (VAMI) から行います。まず root ユーザーで VAMI にログインして以下のように [syslog] を開きましょう。
転送設定の [設定] をクリックすると以下のダイアログがポップアップします。syslog サーバ側のネットワーク情報を入力して [保存] ボタンを押下します。
これでリモート Syslog 転送の構成ができました。なお、プロトコルに UDP を使用する場合は [接続状態:] 列が “不明” になります。
なお、[テスト メッセージの送信] を実行すると以下のメッセージが syslog サーバに送信されます。ただ、実際にはリモート syslog 転送を構成した時点から vCenter Server のログが syslog サーバにリダイレクトされるので確認する意味は薄いかもしれません。
2020-08-05T03:15:33.757329+00:00 vcsa01a This is a diagnostic syslog test message from vCenter Server.
では実際に vCenter Server のイベントを確認してみましょう。アラームをクリアするとイベントとして登録されるので、一例として「ホストの接続と電源状態」アラームを手動でクリアしてみます。
上の画像の赤枠で囲った部分は syslog サーバ側では以下のようなメッセージとして確認できます。メッセージの頭に “Event” がついている点がポイントです。
2020-08-05T03:23:22.872302+00:00 vcsa01a vpxd[8225] Event [189190] [1-1] [2020-08-05T03:23:22.871617Z] [vim.event.AlarmStatusChangedEvent] [info] [VSPHERE.LOCAL\Administrator] [002 Nested Datacenter] [189190] [Alarm ‘Host connection and power state’ on esxi70-01.jangari.local changed from Red to Green]
2020-08-05T03:23:22.873174+00:00 vcsa01a vpxd[8225] Event [189191] [1-1] [2020-08-05T03:23:22.872082Z] [vim.event.AlarmClearedEvent] [info] [VSPHERE.LOCAL\Administrator] [002 Nested Datacenter] [189191] [Manually cleared alarm ‘Host connection and power state’ on esxi70-01.jangari.local from Red]
メッセージの具体的なフォーマットや設定などは以下のVMware社ドキュメントやナレッジベースに記載されています。
なお、元々はログの転送機能を使用しているのでイベント以外のログも大量に転送されます。このため、現実では syslog サーバ側でフィルタリングなどが必要になってくると思います。
補足として、今回は syslog サーバ側は CentOS 8 に rsyslog をインストールして試していますが rsyslog の構成は主旨と関係ないため割愛します。
PowerCLI でエクスポートしてみる
vSphere で独自のレポートを手軽に作りたいな、という時に使うものといえば PowerCLI ですよね。
PowerCLI には Get-VIEvent というそのものズバリのコマンドレットが存在します。これにより vCenter Server のイベントを Event オブジェクトの配列として取得することができます。
Get-VIEvent - Cmdlet Reference - VMware {code}
今回は Get-VIEvent で取得した Event オブジェクトを Export-Csv にパイプラインで渡すことで、CSV ファイルとしてエクスポートしてみます。
Export-Csv (Microsoft.PowerShell.Utility) - PowerShell
まずは Connect-VIServer で vCenter Server に接続しましょう。
1> Connect-VIServer vcsa01a.jangari.local -User administrator@vsphere.local -Password VMware1!
2
3Name Port User
4---- ---- ----
5vcsa01a.jangari.local 443 VSPHERE.LOCAL\Administrator
次に、Get-VIEvent を実行します。以下は MaxSamples パラメータで取得件数を 200 件としています。既定は 100 件です。
1> $events = Get-VIEvent -MaxSamples 200
あとは、取得した Event オブジェクトの配列を Export-Csv に流し込んであげればイベントの CSV ファイルの出来上がりです。
1> $events | Export-Csv -Path events.csv
ちなみに以下のように -Start と -Finish を指定して採取期間の範囲指定も出来ます。
1Get-VIEvent -Start "YYYY/MM/DD hh:mm:ss" -Finish "YYYY/MM/DD hh:mm:ss"
Get-VIEvent で取得したイベントのオブジェクトにはプロパティが多いので1、実際には Select-Object でエクスポートするプロパティを選択しておく、エクスポートした CSV から必要なカラムを抽出するなど、データの加工を行った方が良いと思います。
おわりに
イベントは普段はあまり見ないかもしれませんが、何か問題が出たときはイベントを見ると vCenter Server システム全体の状況を俯瞰できたりもします。自力でトラブルシューティングする場合などにお役に立てば幸いです。
-
Get-VIEvent で取得したオブジェクトは厳密には VMware.Vim.UserLogoutSessionEvent などの Event を継承したオブジェクトになっています。このため、取得した配列内のオブジェクトがすべて同じプロパティを持っているわけではありません。vSphere Web Services API の Data Object Types から個別の型の詳細を確認できます。 ↩︎