Взятие под контроль разрастания виртуальных машин (часть 5)

Опубликовано: 19 Апреля, 2023

  • Взятие под контроль разрастания виртуальных машин (часть 2)
  • Взятие под контроль разрастания виртуальных машин (часть 3)
  • Взятие под контроль разрастания виртуальных машин (часть 4)
  • Взятие под контроль разрастания виртуальных машин (часть 6)
  • Взятие под контроль разрастания виртуальных машин (часть 7)
  • Взятие под контроль разрастания виртуальных машин (часть 8)
  • Взятие под контроль разрастания виртуальных машин (часть 9)
  • Взятие под контроль разрастания виртуальных машин (часть 10)
  • Взятие под контроль разрастания виртуальных машин (часть 11)
  • Взятие под контроль разрастания виртуальных машин (часть 12)
  • Взятие под контроль разрастания виртуальных машин (часть 18)

В моей предыдущей статье я объяснил, что журналы событий Windows часто являются лучшим источником информации, когда речь идет о сборе истории виртуальной машины. К сожалению, поиск в журналах событий вручную нецелесообразен, за исключением некоторых очень специфических разовых ситуаций. Подумайте об этом на мгновение. Кластерное развертывание Hyper-V может состоять из более чем пяти десятков серверов Hyper-V, а такие функции, как динамическая миграция или обновление с учетом кластера, могут часто перемещать виртуальные машины между узлами кластера. Это означает, что журналы событий, относящиеся к виртуальной машине, скорее всего, не будут храниться в одном месте. Соответствующие записи журнала, вероятно, будут разбросаны по нескольким различным хост-серверам.

Ваш единственный реальный вариант анализа записей журнала без помощи стороннего инструмента — это углубиться в PowerShell и создать инструмент самостоятельно. К счастью, PowerShell на удивление прост, когда дело доходит до журналов событий. Относительно легко (относительно это ключевой термин) использовать PowerShell для анализа нескольких журналов событий, фильтрации записей журнала, а затем записи этих записей журнала в отчет. Ключом к тому, чтобы заставить процесс работать, является понимание того, как PowerShell взаимодействует с журналами событий и как выполнять фильтрацию и запросы PowerShell. Мне потребуется некоторое время, чтобы объяснить различные концепции и методы, которые нам нужно будет использовать, но я лучше не тороплюсь и объясняю, что я делаю и почему, чем просто дам вам сценарий для использования.

Итак, давайте начнем. Как я объяснял в предыдущей статье, большинство записей журнала событий, связанных с Hyper-V, хранятся в журнале Hyper-V с соответствующим названием. В таком случае первое, что мне нужно показать вам, это как просматривать записи журнала через PowerShell.

Командлет PowerShell, используемый для получения и отображения записей журнала событий, называется Get-WinEvent. Однако, если вы введете этот командлет сам по себе, PowerShell выдаст, казалось бы, бесконечный поток ошибок «данные недействительны». В таком случае мы должны немного подсказать командлету Get-WinEvent, сообщив ему, что именно мы хотим видеть. Например, предположим, что мы хотим заглянуть в журнал приложений и увидеть пять последних записей. Мы могли бы сделать это, введя следующую команду:

Get-WinEvent — Приложение LogName — MaxEvents 5

Вы можете увидеть, как выглядят результаты этой команды на рисунке A.

Изображение 15021
Рисунок A: PowerShell возвращает пять последних событий из журнала приложений.

Прямо сейчас я уверен, что некоторые из вас задаются вопросом, что только что произошло. Я упомянул, что события Hyper-V отображаются в журналах Hyper-V, но я просто показал вам, как просматривать журнал приложений. Так что дает? Что ж, взгляните внимательно на рисунок B. Журнал Hyper-V на самом деле вовсе не журнал. Это действительно пользовательский вид.

Изображение 15022
Рисунок B. Журнал Hyper-V на самом деле является настраиваемым представлением.

Для тех, кто может быть не знаком с пользовательскими представлениями, это именно то, на что они похожи. Пользовательское представление — это просто отфильтрованное представление различных событий. Windows содержит некоторые встроенные настраиваемые представления для конкретных ролей сервера, но также позволяет создавать собственные настраиваемые представления. Хорошей новостью является то, что эти настраиваемые представления дают нам действительно хорошую отправную точку для выполнения расширенных запросов PowerShell. Конечно, вы всегда можете просто создать собственное представление, которое предоставит вам необходимую информацию непосредственно через средство просмотра событий. Я покажу вам, как сделать и то, и другое.

Давайте начнем с того, что заглянем за кулисы того, что на самом деле делает пользовательское представление и как мы можем предоставить пользовательское представление через PowerShell. Начните с щелчка правой кнопкой мыши на пользовательском представлении Hyper-V и выбора параметра «Фильтровать текущее пользовательское представление» в контекстном меню. Когда вы это сделаете, Windows отобразит диалоговое окно, показанное на рисунке C.

Изображение 15023
Рисунок C. Это код, используемый для создания пользовательского представления.

Взглянув на рисунок выше, вы заметите, что код, показанный в диалоговом окне, представляет собой XML, а не PowerShell. Тем не менее, мы можем использовать его с пользой. Для этого выделите код мышью, а затем нажмите Ctrl+C, чтобы скопировать текст в буфер обмена. Затем создайте текстовый файл и скопируйте код во вновь созданный текстовый файл. Сохраните изменения и присвойте текстовому файлу расширение XML. Для целей этой статьи я назвал свой файл HyperVLog.xml и сохранил его в папке с именем C:Scripts.

XML-файл сам по себе ничего не делает, но вы можете использовать PowerShell для выполнения запроса журнала событий на основе содержимого XML-файла. На самом деле, вы можете сделать это с помощью одной строки кода. Команда:

Get-WinEvent –FilterXML([XML](Get-Content C:ScriptsHyperVLog.xml))

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

Изображение 15024
Рисунок D. Это результаты для Hyper-V.

Итак, команда, которую я только что вам показал, приводит к отображению чрезмерного количества событий, но помните, что даже несмотря на то, что мы используем файл XML, часть вещей PowerShell по-прежнему использует командлет Get-WinEvent. Это означает, что любая команда, которая обычно работает с Get-WinEvent, по-прежнему может использоваться. Например, мы можем добавить –MaxEvents 5 в конец этой команды, и она отобразит только пять последних событий Hyper-V.

Этот метод, безусловно, полезен, но мы можем добиться большего. Наконец-то мы достигли момента, когда можем отображать события Hyper-V через PowerShell. Теперь нам нужно отфильтровать эти события, чтобы отображались только те события, которые нам интересны.

Ключом к тому, чтобы сделать это, является знание имен объектов, используемых Get-WinEvent. Как только мы узнаем имена объектов, мы можем фильтровать на основе этих имен объектов.

Чтобы увидеть имена объектов, введите следующую команду:

Get-WinEvent –FilterXml ((Get-Content C:ScriptsHyperVLog.xml)) –MaxEvents 1 | Выбрать объект *

Эта команда отображает самую последнюю запись журнала, связанную с Hyper-V, как показано на рисунке E. Однако, что более важно, запись журнала отображается полностью. Каждый доступный объект отображается вместе с именем объекта. Именно эти имена объектов мы можем использовать для создания некоторых значимых фильтров, которые могут помочь нам отслеживать наши виртуальные машины.

Изображение 15025
Рисунок E: Это имена объектов, с которыми мы можем работать.

Вывод

Как видите, отображать события, связанные с Hyper-V, через PowerShell относительно просто. По мере продвижения серии я покажу вам, как осмысленно фильтровать результаты, а затем записывать отфильтрованные результаты в отчет. Я также покажу вам, как создавать собственные настраиваемые фильтры событий с помощью графического интерфейса средства просмотра событий.

  • Взятие под контроль разрастания виртуальных машин (часть 2)
  • Взятие под контроль разрастания виртуальных машин (часть 3)
  • Взятие под контроль разрастания виртуальных машин (часть 4)
  • Взятие под контроль разрастания виртуальных машин (часть 6)
  • Взятие под контроль разрастания виртуальных машин (часть 7)
  • Взятие под контроль разрастания виртуальных машин (часть 8)
  • Взятие под контроль разрастания виртуальных машин (часть 9)
  • Взятие под контроль разрастания виртуальных машин (часть 10)
  • Взятие под контроль разрастания виртуальных машин (часть 11)
  • Взятие под контроль разрастания виртуальных машин (часть 12)
  • Взятие под контроль разрастания виртуальных машин (часть 18)