Вывод всех доступных событий и их ID на VMware vCenter в CSV-файл.

This post was originally published on this site

Вильям Ламм написал интересную статью про вывод информации обо всех доступных событиях на сервере 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, с помощью которого это можно сделать, можно посмотреть вот тут.

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.