Мониторинг запланированных событий для виртуальных машин Azure

Применимо к: Виртуальные машины ✔️ Виртуальные машины Windows ✔️ Гибкие масштабируемые наборы ✔️ Универсальные масштабируемые наборы

Каждый день разные части Azure обновляются, чтобы обеспечить безопасность и актуальность работающих служб. Помимо запланированных обновлений могут возникать незапланированные события. Например, если обнаруживается сбой или снижение производительности оборудования, для служб Azure может потребоваться незапланированное обслуживание. Благодаря динамической миграции, обновлениям с сохранением памяти и строгому контролю последствий обновлений в большинстве случаев эти события почти прозрачны для клиентов и не влияют на работу или останавливают виртуальную машину максимум на несколько секунд. Однако для некоторых приложений даже несколько секунд замораживания виртуальной машины может привести к серьезным последствиям. Чтобы обеспечить оптимальную работу этих приложений, важно заранее знать о предстоящем обслуживании Azure. Служба "Запланированные события" предоставляет программный интерфейс для уведомления о предстоящем обслуживании и позволяет принять меры.

В этой статье мы покажем, как можно использовать запланированные события, чтобы получать уведомления о событиях обслуживания, которые могут повлиять на виртуальные машины, и создать простую автоматизацию для мониторинга и анализа.

Маршрутизация запланированных событий в Log Analytics

Служба "Запланированные события" доступна в составе Службы метаданных экземпляров Azure на каждой виртуальной машине Azure. Клиенты могут написать задачу автоматизации для запроса конечных точек виртуальных машин, чтобы найти уведомления о запланированном обслуживании и принять меры, например сохранить состояние и вывести виртуальную машину из оборота. Рекомендуется создавать задачи автоматизации для записи Запланированных событий, чтобы можно было вести журнал аудита событий обслуживания Azure.

В этой статье мы рассмотрим, как записать Запланированные события обслуживания в Log Analytics. Затем мы активируем некоторые основные действия по уведомлению, такие как отправка сообщения электронной почты команде и получение исторического представления всех событий, которые затронули ваши виртуальные машины. Для агрегирования событий и автоматизации мы будем использовать Log Analytics, но вы можете использовать любое решение мониторинга для сбора этих журналов и запуска автоматизации.

Diagram showing the event lifecycle

Предварительные требования

В этом примере необходимо создать виртуальную машину Windows в группе доступности. Запланированные события предоставляют уведомления об изменениях, которые могут повлиять на виртуальные машины в группе доступности, облачной службе, масштабируемом наборе виртуальных машин или отдельных виртуальных машинах. Мы будем использовать службу, опрашивающую запланированные события на одной из виртуальных машин, которая будет действовать в качестве сборщика для получения событий для остальных виртуальных машин в этой группе доступности.

Не удаляйте группу ресурсов в конце этого руководства.

Кроме того, необходимо создать рабочую область Log Analytics, которая будет использоваться для агрегирования информации из виртуальных машин в группе доступности.

Настройка среды

Теперь в группе доступности должно быть две начальных виртуальных машины. Теперь необходимо создать третью виртуальную машину с именем myCollectorVM в той же группе доступности.

New-AzVm `
   -ResourceGroupName "myResourceGroupAvailability" `
   -Name "myCollectorVM" `
   -Location "East US" `
   -VirtualNetworkName "myVnet" `
   -SubnetName "mySubnet" `
   -SecurityGroupName "myNetworkSecurityGroup" `
   -OpenPorts 3389 `
   -PublicIpAddressName "myPublicIpAddress3" `
   -AvailabilitySetName "myAvailabilitySet" `
   -Credential $cred

Скачайте ZIP-файл установки проекта с GitHub.

Подключитесь к myCollectorVM, скопируйте ZIP-файл на виртуальную машину и извлеките все файлы. В виртуальной машине откройте командную строку PowerShell. Переместите запрос в папку, содержащую SchService.ps1, например PS C:\Users\azureuser\AzureScheduledEventsService-master\AzureScheduledEventsService-master\Powershell>, и настройте службу.

.\SchService.ps1 -Setup

Запускает службу.

.\SchService.ps1 -Start

Теперь служба будет выполнять опрос каждые 10 секунд для всех запланированных событий и утверждать события для ускорения обслуживания. Запланированные события записывают следующие события: заморозка, перезагрузка, повторное развертывание и вытеснение. Обратите внимание, что можно расширить скрипт, чтобы запустить меры по смягчению последствий до утверждения события.

Проверьте состояние службы и убедитесь, что она запущена.

.\SchService.ps1 -status  

Вернутся выходные данные: Running.

Теперь служба будет выполнять опрос каждые 10 секунд для всех запланированных событий и утверждать события для ускорения обслуживания. Запланированные события записывают следующие события: заморозка, перезагрузка, повторное развертывание и вытеснение. Можно расширить скрипт, чтобы запустить меры по смягчению последствий до утверждения события.

Если любое из указанных выше событий записывается службой "Запланированные события", оно будет зарегистрировано в журнале событий приложений с указанием состояния события, типа события, ресурсов (имена виртуальных машин) и NotBefore (минимальный период уведомления). События с идентификатором 1234 можно найти в журнале событий приложения.

После настройки и запуска службы она регистрирует события в журналах приложений Windows. Чтобы убедиться, что это работает, перезапустите одну из виртуальных машин в группе доступности, и вы увидите событие, регистрируемое в средстве просмотра событий в разделе "Журналы Windows > Журнал приложений", где отображается перезапущенная виртуальная машина.

Screenshot of event viewer.

Когда события записываются службой "Запланированные события", они регистрируются в журнале событий приложений с указанием состояния события, типа события, ресурсов (имя виртуальной машины) и NotBefore (минимальный период уведомления). События с идентификатором 1234 можно найти в журнале событий приложения.

Примечание

В этом примере виртуальные машины находятся в группе доступности, что позволило нам назначить одну виртуальную машину в качестве сборщика для прослушивания и маршрутизации запланированных событий в рабочую область Log Analytics. При наличии автономных виртуальных машин можно запустить службу на каждой виртуальной машине, а затем подключить их по отдельности к рабочей области log Analytics.

Для нашей конфигурации мы выбрали Windows, но вы можете разработать аналогичное решение в Linux.

В любой момент можно отключить или удалить службу "Запланированное событие" с помощью параметров –stop и –remove.

Подключение к рабочей области

Теперь необходимо подключить рабочую область Log Analytics к виртуальной машине — сборщику. Рабочая область Log Analytics выступает в качестве репозитория, и мы настроим сбор журналов событий для получения журналов приложений с виртуальной машины — сборщика.

Чтобы направить Запланированные события в журнал событий, который будет сохранен в качестве журнала приложений нашей службой, необходимо подключить виртуальную машину к рабочей области Log Analytics.

  1. Откройте страницу для созданной рабочей области.

  2. В разделе Подключение к источнику данных выберите Виртуальные машины Azure.

    Connect to a VM as a data source

  3. Найдите и выберите myCollectorVM.

  4. На новой странице для myCollectorVM выберите Подключить.

Эта операция устанавливает Microsoft Monitoring Agent на виртуальной машине. Подключение виртуальной машины к рабочей области и установка расширения займет несколько минут.

Настройка рабочей области

  1. Откройте страницу рабочей области и выберите Дополнительные параметры.

  2. Выберите Данные вменю слева и нажмите Журналы событий Windows.

  3. В поле Сборка из следующих журналов событий начните вводить приложение, а затем выберите Приложение из списка.

    Select Advanced settings

  4. Оставьте пункты ОШИБКА, ПРЕДУПРЕЖДЕНИЕ и ИНФОРМАЦИЯ выбранными и нажмите Сохранить, чтобы сохранить параметры.

Примечание

Будет небольшая задержка, и может пройти до 10 минут, прежде чем журнал будет доступен.

Создание правила генерации оповещений с помощью Azure Monitor

После отправки событий в Log Analytics можно выполнить следующий запрос, чтобы найти запланированные события.

  1. В верхней части страницы выберите Журналы и вставьте в текстовое поле следующий текст:

     Event
     | where EventLog == "Application" and Source contains "AzureScheduledEvents" and RenderedDescription contains "Scheduled" and RenderedDescription contains "EventStatus" 
     | project TimeGenerated, RenderedDescription
     | extend ReqJson= parse_json(RenderedDescription)
     | extend EventId = ReqJson["EventId"]
     ,EventStatus = ReqJson["EventStatus"]
     ,EventType = ReqJson["EventType"]
     ,NotBefore = ReqJson["NotBefore"]
     ,ResourceType = ReqJson["ResourceType"]
     ,Resources = ReqJson["Resources"]
     | project-away RenderedDescription,ReqJson
    
  2. Нажмите Сохранить, а затем введите в качестве имени ogQuery, оставьте в качестве типа Запрос и введите VMLogs для параметра Категория, после чего выберите Сохранить.

    Save the query

  3. Выберите Новое правило генерации оповещений.

  4. На странице Создание правила оставьте значение collectorworkspace для параметра Ресурс.

  5. В разделе Условие выберите запись Каждый раз, когда поиск клиента по журналу — <вход не определен>. Откроется страница Настройка логики сигналов.

  6. В разделе Пороговое значение введите 0 и нажмите Готово.

  7. В разделе Действия выберите Создать группу действий. Откроется страница Добавить группу действий.

  8. В поле Имя группы действий введите myActionGroup.

  9. В поле Короткое имя введите myActionGroup.

  10. В разделе Группа ресурсов выберите myResourceGroupAvailability.

  11. В разделе "Действия" в поле ИМЯ ДЕЙСТВИЯ введите Электронная почта, а затем выберите Электронная почта, SMS, push-уведомление, голосовой вызов. Откроется страница Электронная почта, SMS, push-уведомление, голосовой вызов.

  12. Выберите Электронная почта, введите адрес электронной почты и нажмите кнопку ОК.

  13. На странице Добавить группу действий нажмите ОК.

  14. На странице Создание правила в разделе СВЕДЕНИЯ О ПРЕДУПРЕЖДЕНИИ введите myAlert для параметра Имя правила генерации оповещений, а затем введите Правило генерации оповещений по электронной почте в поле Описание.

  15. Когда закончите, выберите Создать правило генерации оповещений.

  16. Перезапустите одну из виртуальных машин в группе доступности. В течение нескольких минут вы получите сообщение электронной почты о том, что оповещение активировано.

Чтобы управлять правилами генерации оповещений, перейдите в группу ресурсов, выберите Оповещения в меню слева, а затем выберите Управление правилами генерации оповещений в верхней части страницы.

Дальнейшие действия

Дополнительные сведения см. на странице Служба запланированных событий на сайте GitHub.