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

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

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

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

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

Номер события, используемый для создания виртуальной машины, — 13002. Кстати, 13003 используется для удаления виртуальной машины. Таким образом, вы даже можете использовать PowerShell для создания отчета, который показывает количество созданных виртуальных машин, а не количество удаленных виртуальных машин.

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

$MyLog = Get-EventLog –Система журналов –Новейшие 5

$Мой журнал | Format-List – свойство EventID, EntryType, Message

Хитрость фильтрации журналов по типу события заключается в том, чтобы знать, на какие параметры вам разрешено ссылаться.

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

Давайте начнем с просмотра первой строки блока команд, показанного выше. Первая строка приведенного выше кода объявляет переменную. Для того, что я хочу вам показать, нам не нужно объявлять переменную, поэтому мы просто используем часть команды Get-EventLog вместе с различными параметрами. Есть еще два изменения, которые нам нужно сделать. Давайте изменим команду, чтобы она отображала только самую последнюю запись журнала, изменив Newest 5 на Newest 1. Другое изменение, которое я хочу сделать, — это добавить Select-Object * в конец команды. Таким образом, мы можем увидеть полную версию вывода. Финальная команда выглядит так:

Get-EventLog – Система журналов – Новейшие 1 | Выбрать объект *

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

Изображение 14954
Рисунок A: Это полная запись в журнале событий.

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

Поскольку наша цель — отфильтровать список записей журнала событий на основе идентификатора события, нам придется использовать командлет Where-Object. Синтаксис командлета Where-Object несколько запутан, но на самом деле им довольно легко пользоваться.

Чтобы использовать командлет Where-Object, необходимо указать три вещи. Во-первых, мы должны указать имя атрибута, который мы хотим проверить. В данном случае этот атрибут называется EventID. Помните, однако, что EventID является атрибутом объекта EventLog. Мы используем Get-EventLog для получения объекта EventLog. Мы сообщаем командлету Where-Object, что просматриваем атрибут объекта, который передается ему по конвейеру, используя $_ для представления имени объекта, а затем вводя имя атрибута после точки. В этом случае это будет выглядеть так: $_.EventID.

Следующее, что нам нужно указать, это оператор. В нашем случае оператор должен быть –EQ, потому что мы хотим посмотреть идентификатор события, чтобы увидеть, равен ли он (EQ) определенному числу.

Третий и последний элемент, который мы должны указать, — это, конечно же, идентификатор события, которое мы ищем. Для демонстрации мы будем искать идентификатор события 7036, который является идентификатором события, показанным на рисунке выше.

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

Get-EventLog – Система журналов – Новейшие 5 | Где-Объект {$_.EventID –EQ 7036}

Эта команда отображает пять последних вхождений события 7036. Вы можете увидеть, как это выглядит на рисунке B.

Изображение 14955
Рисунок B. Это пять последних случаев события 7036.

Глядя на рисунок выше, имейте в виду, что мы можем фильтровать вывод, чтобы отображать именно ту информацию, которая нас интересует.

Так что, если мы хотим увидеть информацию, связанную с созданием виртуальной машины? Ну, верьте или нет, это открывает целую банку червей. Теоретически поиск событий создания ВМ должен быть таким же простым, как использование той же команды, которую я вам только что показал, но с идентификатором события 13002. Но вот проблема… Событие с идентификатором 13002 не регистрируется в системном журнале. Он зарегистрирован в журнале Microsoft-Windows-Hyper-V-WorkerAdmin.

Так что нет проблем. Просто замените System на Microsoft-Windows-Hyper-V-WorkerAdmin, верно? Ну, не совсем. Если вы это сделаете, вы получите сообщение о том, что журнал не существует. На самом деле, если вы введете Get-EventLog –Log * в PowerShell, вы увидите, что команда Get-EventLog может просматривать только семь журналов событий. Вы можете увидеть, что я имею в виду, на рисунке C.

Изображение 14956
Рисунок C. Команда Get-EventLog может просматривать только семь журналов событий.

Итак, что нам теперь делать? Если вашей целью является анализ журналов событий, связанных с Hyper-V, вам потребуется использовать командлет Get-WinEvent вместо Get-EventLog. Например, если вы хотите просмотреть все события в журнале Microsoft-Windows-Hyper-V-Worker, вам потребуется ввести следующую команду:

Get-WinEvent –FilterHashTable @{LogName = «Microsoft-Windows-Hyper-V-Worker*»}

Вы можете увидеть пример этой команды на рисунке D.

Изображение 14957
Рисунок D. Это содержимое журнала Microsoft-Windows-Hyper-V-Worker.

Вывод

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

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