А АTuesday 8 August 2017

Сбор сведений о производительности в Powershell.

Всем привет.

Сбор сведений о производительности в Powershell выполняется командлетом Get-Counter.

Далее я цитирую отрывок из замечательной книги Станек Уильям Р. "Windows PowerShell 2.0. Справочник администратора".

Командлет Get-Counter позволяет записывать данные о производительности в простые файлы и файлы журналов, главное — правильно указать нужные счетчики производительности. Вот общий синтаксис пути к счетчику производительности:
\\Компьютер\Объект\Счетчик

где Компьютер — имя или IP-адрес компьютера, Объект — имя объекта производительности, а Счетчик — имя счетчика производительности. Например, для мониторинга размера доступной памяти на компьютере Dbserver79 можно ввести:

get-counter "\\dbserver79\memory\available mbytes"
Timestamp CounterSamples
--------- --------------
2/27/2017 4:26:54 PM \\dbserver79\memory\available mbytes : 1675

Указывать имя компьютера в составе пути к счетчику не обязательно. Если имя компьютера пропущено, Get-Counter использует параметр –ComputerName (он же позволяет опрашивать группы компьютеров), если же этот параметр не задан, подразумевается локальный компьютер. Тем не менее, рекомендуется освоить формат указания полных путей, так как именно они заносятся в трассировки и журналы производительности. Если опустить имя компьютера, путь принимает следующий вид:
\Объект\Счетчик

Если вам доподлинно неизвестно название того или иного счетчика то его можно подсмотреть здесь

И ваш код будет выглядеть так:
$c = Get-Counter -listset Память
$c.paths
get-counter -listset Память | foreach ($a) {$_.paths}

Но вернемся к книге. Следующая команда проверяет размер доступной памяти на компьютерах, заданных параметром –ComputerName:

get-counter –computername fileserver12, dbserver18, dcserver21 "\memory\available mbytes"

При работе с удаленными компьютерами нередко требуется вводить альтернативные учетные данные. Вот как это можно сделать:
$cred = get-credential
get-counter –computername fileserver12, dbserver18, dcserver21
«\memory\available mbytes» –credential $cred

При вызове командлета Get-Credential PowerShell запрашивает у пользователя учетные данные и записывает их в переменную $cred. В дальнейшем эти учетные данные используются для аутентификации на удаленных компьютерах. Чтобы отслеживать все счетчики объекта, введите вместо имени счетчика звездочку (*):
get-counter "\\dbserver79\Memory\*"

В этом примере отслеживаются все счетчики объекта Memory. Если объект существует в нескольких экземплярах, например Processor или LogicalDisk, следует указать нужный экземпляр. В этом случае синтаксис полного пути принимает следующий вид:
\\Компьютер\Объект(Экземпляр)\Счетчик

Экземпляр указывают в скобках после имени объекта производительности. Чтобы наблюдать сразу за всеми экземплярами, введите _Total как имя экземпляра, либо, если требуется определенный экземпляр, укажите его идентификатор. Например, для мониторинга счетчика Processor\% Processor Time у всех процессоров в системе можно использовать команду
get-counter "\\dbserver79\Processor(_Total)\% Processor Time"

либо, для мониторинга определенного процессора:
get-counter "\\dbserver79\Processor(0)\% Processor Time"

Здесь экземпляр Processor(0) представляет первый процессор в системе. Get-Counter поддерживает ряд параметров. Параметр –MaxSamples задает число выборок данных; –SampleInterval — интервал между выборками (значение по умолчанию — 1 секунда); –ListSet — выводит счетчики для заданных объектов.

По умолчанию Get-Counter выводит данные на консоль; чтобы направить их в журнал, перенаправьте вывод командлету Export-Counter. По умолчанию Export-Counter экспортирует данные счетчиков в журналы двоичного формата. Параметр –FileFormat позволяет задать для журнала формат CSV (текстовый файл с разделителями-запятыми), TSV (текстовый файл с
разделителями-табуляторами) либо BLG (двоичный формат). Рассмотрим следующий пример:
get-counter «\\dbserver79\Memory\*» | export-counter -fileformat tsv –path .\dbserver79.txt

Эта команда отслеживает все счетчики объекта Memory и записывает их данные в текстовый файл Dbserver79.txt с разделителями-запятыми, расположенный в текущем рабочем каталоге. Чтобы использовать эти данные в дальнейшем, вызовите кмандлет Import-Counter. Для этого введите import-counter -path, затем путь к файлу с данными. Команда import-counter -summary -path (+ путь к файлу с данными) отображает сводку данных, а import-counter -listset * -path (+ путь к файлу с данными) — список отслеживаемых счетчиков. При желании можно указать интересующий вас период сбора данных с помощью параметров –StartTime и –EndTime. Рассмотрим пример:
$startdate = (get-date).adddays(-1)
$enddate = (get-date)
import-counter –path .\data.txt -starttime $startdate –endtime $enddate

Эти команды анализируют данные из расположенного в текущем каталоге файла Data.txt, собранные за сутки между текущим временем сегодняшнего и вчерашнего дня. Чтобы получить список счетчиков, поддерживаемых объектом производительности, введите get-counter -listset, затем имя нужного объекта. Так, например, можно узнать, какие счетчики поддерживает объект производительности Memory:
get-counter -listset Memory
Counter: {\Memory\Page Faults/sec, \Memory\Available Bytes,
\Memory\Committed Bytes, \Memory\Commit Limit...}
CounterSetName : Memory
MachineName : EngPC85
CounterSetType : SingleInstance
Description : The Memory performance object consists of counters
that describe the behavior of physical and virtual memory on the
computer. Physical memory is the amount of random access memory on the
computer. Virtual memory consists of the space in physical memory and
on disk. Many of the memory counters monitor paging, which is the movement
of pages of code and data between disk and physical memory. Excessive
paging, a symptom of a memory shortage, can cause delays which interfere
with all system processes.
Paths: {\Memory\Page Faults/sec, \Memory\Available Bytes,
\Memory\Committed Bytes, \Memory\Commit Limit...}
PathsWithInstances : {}

Как и любые другие команды PowerShell, команды этого примера возвращают объекты, с которыми можно работать. Чтобы получить полный список счетчиков с указанием полного пути к каждому из них, опросить свойство Paths:
$c = get-counter -listset Memory
$c.paths
\Memory\Page Faults/sec
\Memory\Available Bytes
\Memory\Committed Bytes
\Memory\Commit Limit

либо используйте следующую команду:
get-counter -listset memory | foreach ($a) {$_.paths}

Получить список счетчиков с учетом экземпляров объектов производительности позволяет свойство PathsWithInstances. Вот как с ним работают:
$d = get-counter -listset PhysicalDisk
$d.pathswithinstances
\PhysicalDisk(0 E: C:)\Current Disk Queue Length
\PhysicalDisk(1 W:)\Current Disk Queue Length
\PhysicalDisk(2 D:)\Current Disk Queue Length
...
\PhysicalDisk(10 Q:)\Current Disk Queue Length
\PhysicalDisk(_Total)\Current Disk Queue Length
Тот же самый результат даст и следующая команда:
get-counter -listset PhysicalDisk | foreach ($a) {$_.pathswithinstances}

Все эти примеры выводят длинный список счетчиков, сгруппированный по экземплярам объектов производительности. Вывод можно записать в текстовый файл:
get-counter -listset PhysicalDisk > disk-counters.txt

Далее полученный файл можно отредактировать, оставив в нем только нужные счетчики. Используется такой файл следующим образом:
get-counter (get-content .\disk-counters.txt) | export-counter –path
c:\perflogs\disk-check.log

В этом примере Get-Counter читает список отслеживаемых счетчиков из файла Disk-Counters.txt и записывает их в двоичный файл Disk-Check.log в каталоге C:\Perflogs. По умолчанию Get-Counter будет выбирать данные раз в секунду, пока вы не нажмете Ctrl+C. Это удобно, если вы можете просматривать данные счетчиков в консоли PowerShell. Однако чаще всего у администраторов нет на это времени. В этом случае нужно настроить длительность и интервал выборки данных. Для этого служат параметры –MaxSamples и –SampleInterval, соответственно. Например, чтобы заставить Get-Counter записать в журнал 100 значений счетчика с интервалом 120 секунд, можно ввести такую команду:
get-counter (get-content .\disk-counters.txt) –sampleinterval 120
–maxsamples 100 | export-counter –path c:\perflogs\disk-check.log

Вот все.

No comments:

Post a Comment

А что вы думаете по этому поводу?

Версия на печать

Популярное