Вильям Ламм написал интересную статью про вывод информации обо всех доступных событиях на сервере VMware vCenter. Недавно мы писали о решении vCenter Event Broker Appliance (VEBA), которое позволяет пользователям создавать сценарии автоматизации на базе событий, генерируемых в VMware vCenter Service. Например, VEBA может выполнять такие рабочие процессы, как автоматическое привязывание нужного тэга ко вновь создаваемой виртуальной машине. Работает он по модели “If This Then That”.
Так вот, администраторы, использующие VEBA, часто задают вопрос о том, как найти конкретное событие vCenter и его ID в целях автоматизации операций. Также иногда это необходимо для использования с vSphere API. Для этого Вильям написал PowerCLI скрипт, который экспортирует список всех происходивших событий vCenter в CSV-файл, где в отдельных колонках приведены EventId, EventType (может быть Standard, EventEx или ExtendedEvent) и EventDescription:
$vcenterVersion = ($global:DefaultVIServer.ExtensionData.Content.About.ApiVersion) $eventMgr = Get-View $global:DefaultVIServer.ExtensionData.Content.EventManager $results = @() foreach ($event in $eventMgr.Description.EventInfo) { if($event.key -eq "EventEx" -or $event.key -eq "ExtendedEvent") { $eventId = ($event.FullFormat.toString()) -replace "|.*","" $eventType = $event.key } else { $eventId = $event.key $eventType = "Standard" } $eventDescription = $event.Description $tmp = [PSCustomObject] @{ EventId = $eventId; EventType = $eventType; EventDescription = $($eventDescription.Replace("","")); } $results += $tmp } Write-Host "Number of Events: $($results.count)" $results | Sort-Object -Property EventId | ConvertTo-Csv | Out-File -FilePath vcenter-$vcenterVersion-events.csv
Пример результатов работы данного сценария как для VMware vCenter 6.7 Update 3, так и для облачной среды VMware Cloud on AWS 1.8, можно найти в репозитории по этой ссылке: https://github.com/lamw/vcenter-event-mapping.
Также можно добавить в поток событий VMware vCenter и свое собственное событие. Можно сэмулировать как стандартное событие vCenter для тестирования срабатывания алармов vCenter, так и сделать кастомное.
Вот пример сценария, который генерирует такое событие в vCenter:
$eventMgr = Get-View $global:DefaultVIServer.ExtensionData.Content.EventManager $customEvent = New-Object VMware.Vim.EventEx $customEvent.eventTypeId = "vGhettoWelcomeEvent" $customEvent.message = "Hello from virtuallyGhetto" $customEvent.ChainId = "0" $customEvent.Key = "0" $customEvent.CreatedTime = $(Get-Date -Format g) $customEvent.UserName = "vGhetto-Bot" $eventMgr.postEvent($customEvent,$null)
Это событие мы увидим в консоли VMware vCenter:
На скриншоте видно, что в поле Description отображается не то, что было задано в свойствах события. Это связано с тем, что за отображение этого поля отвечает другая подсистема. Чтобы это поле корректно отображалось для кастомных событий нужно зарегистрировать кастомное расширение (custom extension), которое будет публиковать информацию о событии. Более подробную информацию об ExtensionManager, с помощью которого это можно сделать, можно посмотреть вот тут.