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

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

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

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

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

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

Итак, приступим. Если вы вспомните часть 10 этой серии, вы вспомните, что это наш сценарий для получения событий создания и удаления виртуальной машины из журнала событий:

ЦЛС

$CreateEvents = Get-WinEvent –LogName Microsoft-Windows-Hyper-V-VMMS-Admin | Где {$_.ID –eq «13002»}

$DeleteEvents = Get-WinEvent –LogName Microsoft-Windows-Hyper-V-VMMS-Admin | Где {$_.ID –eq «13003»}

Написать-Host «Были»-NoNewLine; Write-Host $CreateEvents.count -NoNewLine; Write-Host «виртуальные машины созданы».

Написать-Host «Были»-NoNewLine; Write-Host $DeleteEvents.count -NoNewLine; Write-Host «виртуальные машины удалены».

Пишите-Хозяин » «

 

#Get-WinEvent -LogName Microsoft-Windows-Hyper-V-VMMS-Admin | Где {$_.ID -EQ «13002»} | ForEach-Object -Process {

$Создать События | ForEach-Object -Process {

Пишите-Хозяин » «

$ObjSID = $_.UserID.Value;

# $ОбжСИД

$Object = Новый объект System.Security.Principal.SecurityIdentifier ($ObjSID)

$ObjUser = $Object.Translate([System.Security.Principal.NTAccount])

$_.Сообщение

Write-Host «От:» -NoNewLine; Запись хоста $ObjUser.value

}

Как вы можете видеть на рисунке A, сценарий сообщает об общем количестве созданных виртуальных машин и общем количестве удаленных виртуальных машин, а затем отображает фактические записи журнала событий.

Изображение 14792
Рисунок A: Это то, что сейчас делает скрипт.

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

В таком случае первое, что я хочу сделать, это показать вам, как искать определенный тип события в определенном временном диапазоне. Первое, что вам нужно понять при этом, это то, что PowerShell требует от вас использовать очень специфический формат для даты и времени. Предположим, например, что вы хотите исследовать полдень 30 декабря 2015 года. Способ ввода этой даты и времени:

30.12.2015 12:00:00

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

Давайте представим, что мне интересно увидеть все вхождения события с идентификатором 5973, которые произошли в журнале приложений в период с 29 декабря 2015 г. по 30 декабря 2015 г. Первое, что я, вероятно, хотел бы сделать, это зафиксировать эти даты в некоторые переменные. Я мог бы, например, сделать что-то вроде этого:

$StartDate = '29.12.2015 00:00:00'

$EndDate = '30.12.2015 23:59:59'

Моя начальная дата начинается в полночь 28-го числа (технически 29-го), а моя конечная дата установлена на одну секунду до полуночи 30-го числа. Таким образом, я могу зафиксировать любые события, которые могли произойти в любой день, независимо от времени. Теперь я могу подключить значения $StartDate и $EndDate к моей команде Get-WinEvent вместе с именем журнала и идентификатором интересующего меня события. Команда выглядит примерно так:

Get-WinEvent –FilterHashTable @{LogName="Application";ID=5973;StartTime=$StartDate;EndTime=$EndDate}

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

Изображение 14793
Рисунок B: Я получил экземпляры события 5973, происходящие в журнале приложений в течение определенного диапазона дат.

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

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

Мой подход будет заключаться в жестком кодировании нескольких диапазонов дат. Это не самый элегантный способ работы, и он приводит к написанию большего количества строк кода, но я думаю, что этот метод будет самым простым для понимания. Итак, с учетом сказанного, я собираюсь создать целых 48 переменных! Да, вы прочитали это правильно. Нам нужно 48 новых переменных. Почему так много? Что ж, наш сценарий будет проверять журналы событий за 12 месяцев, и нам понадобятся четыре переменные для каждого месяца.

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

Вывод

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

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