PowerCLI で vCenter Server のトリガー済みアラームを取得
Table of contents
はじめに
vCenter Server の各インベントリオブジェクトのトリガー済みアラームは公式の PowerCLI サンプルスクリプトにもあるように $entity.ExtensionData.TriggeredAlarmState で取得できます。
今回は以下のような vCenter Server オブジェクトに表示される全トリガー済みアラームを取得してみます。
インベントリ階層とデータセンターフォルダ
vCenter Server のインベントリ階層は以下のVMware社ドキュメントに記載があります。
- 権限の階層的な継承
→ vSphere のインベントリ階層
以下の図は上記ドキュメントからの引用です。
アラームのターゲットタイプのうち階層の最上位のタイプは “vCenter Server” ですが、これは実際は図の上から3番目の「データセンターフォルダ」に対応しています。トリガー済みアラーム画面でオブジェクトタイプをよく見ると vCenter Server は「フォルダ」扱いになっていることが分かります。
トリガー済みアラームの一覧を取得する
データセンターフォルダは名前が「Datacenters」または ID が「Folder-group-d1」なので、Get-Folder でこれらを指定すれば取得できます。
PowerCLI サンプルスクリプトからコードを拝借し、少しカスタマイズした PowerShell 関数が以下です。
1function Get-AllTriggeredAlarm {
2
3 $alarmOutput = @()
4
5 # Get the folder named "Datacenters", which is the root of the inventory tree.
6 $entity = Get-Folder -Name "Datacenters"
7
8 if ($entity.ExtensionData.TriggeredAlarmState -ne "") {
9 foreach ($alarm in $entity.ExtensionData.TriggeredAlarmState) {
10 $tempObj = "" | Select-Object -Property Alarm, Entity, EntityMoRef, AlarmStatus, Time, AlarmMoRef
11 $tempObj.Entity = Get-View $alarm.Entity | Select-Object -ExpandProperty Name
12 $tempObj.Alarm = Get-View $alarm.Alarm | Select-Object -ExpandProperty Info | Select-Object -ExpandProperty Name
13 $tempObj.AlarmStatus = $alarm.OverallStatus
14 $tempObj.AlarmMoRef = $alarm.Alarm
15 $tempObj.EntityMoRef = $alarm.Entity
16 $tempObj.Time = $alarm.Time
17 $alarmOutput += $tempObj
18 }
19 }
20
21 return $alarmOutput
22
23}
この関数を実行すると以下のように vCenter Server に定義が存在するトリガー済みアラームも取得できます。