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

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

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

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

Для целей этой статьи я хочу забыть о Hyper-V и показать вам некоторые общие приемы обработки журналов событий. После того, как я расскажу об основах, я вернусь к Hyper-V.

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

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

$Мой журнал | Список форматов – свойство *

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

Изображение 15012
Рисунок A. Это самая последняя запись из системного журнала.

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

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

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

Вы можете увидеть полученные данные, показанные на рисунке B.

Изображение 15013
Рисунок B: Вот пять последних записей из системного журнала.

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

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

Если у вас есть только несколько серверов Hyper-V или вы не следуете соглашению об именах, то вам, вероятно, будет лучше ссылаться на имена серверов в создаваемом сценарии. На самом деле это довольно легко сделать. У меня есть два сервера Hyper-V с именами Prod1 и Prod2. Предположим на мгновение, что я хочу отобразить десять самых последних записей в системных журналах серверов Prod1 и Prod2. Я мог бы сделать это, введя следующие команды:

$MyLog = Get-EventLog –Система журналов –ComputerName prod1, Prod2 – Newest 5

$миог | Format-List – свойство MachineName, EventID, EntryType, Message

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

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

Изображение 15014
Рисунок C: Эти записи журнала событий поступают с нескольких серверов.

Метод, который я только что использовал, работает достаточно хорошо для небольших развертываний Hyper-V, но одно кластерное развертывание Hyper-V может включать более 60 серверов. Вы действительно не хотите вручную вводить все эти имена серверов каждый раз, когда запускаете строку кода. Если вы используете соглашения об именах для своих серверов Hyper-V, которые отличают эти серверы от других серверов в вашей организации, вам не нужно вручную вводить имена серверов. Вместо этого вы можете ссылаться на серверы через запрос Active Directory (все серверы Hyper-V должны быть присоединены к Active Directory).

Хитрость заключается в выполнении запроса, который извлекает список серверов, а затем присваивает результаты запроса переменной. Затем вы можете сослаться на эту переменную, указав параметр ComputerName, вместо того, чтобы вводить имена компьютеров вручную. Это намного проще сделать, чем кажется. Позвольте мне показать вам, как это работает:

В моей организации мои лабораторные серверы Hyper-V называются Hyper-V-1, Hyper-V-2, Hyper-V-3 и т. д. Поскольку имена очень похожи, я могу указать PowerShell искать в Active Directory компьютеры с имена «как» Hyper-V. Это можно сделать с помощью команды Get-ADComputer.

Проблема с запуском этой команды заключается в том, что она возвращает множество свойств, которые нам не нужны. Нам не только не нужны эти дополнительные свойства, они фактически мешают нам достичь желаемого результата. Ключом к получению именно той информации, которая нам нужна, является использование ForEach, за которым следует {$_.Name}. В этом случае будет возвращено только имя сервера. Фактическая команда, которую мы будем использовать:

$Computer= Get-ADComputer –Filter 'Имя –Like «Hyper-V*»' –Properties Name | ForEach {$_.Name}

Если мы затем введем $Computer (это имя переменной, которой мы присвоили список имен серверов), мы должны увидеть список серверов Hyper-V. Вы можете увидеть, как это выглядит на рисунке D.

Изображение 15015
Рисунок D: PowerShell вернул список моих серверов Hyper-V.

Теперь я могу добавить команды для получения записей журнала событий с различных серверов. Эти команды очень похожи на те, что я показал вам ранее. Команды:

$MyLog = Get-EventLog –Система журналов –ComputerName $Computer –Newest 5

$миог | Format-List – свойство MachineName, EventID, EntryType, Message

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

Вывод

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

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