PowerShell и счетчики производительности
Один из стереотипов, с которыми я сталкиваюсь с завидной периодичностью, состоит в том что важность PowerShell в процессах автоматизации работы системного администратора мало кто может оценить, поэтому его считают не основным рабочим инструментом, а неким «прибабахом» созданным в отместку всесильному bash. Во времена первой версии еще как то можно было иронизировать, а сейчас, когда уже ps имеет четвертую версию, не пользоваться им непозволительная роскошь…
Примечание: Чаще всего, все работают «по-старинке» и не стараются взять то что лежит на поверхности. Из десятка админов всего два-три человека пользуются полным арсеналом возможностей. Это печально…
Давайте сегодня посмотрим что нам может дать PowerShell для того что бы облегчить нудный процесс сбора счетчиков производительности.
Get—CounterСмотрим что получается. Получается вывод сэмплов для сетевого интерфейса, процессора, памяти и физического диска.
Get—Counter —ListSet *Через пару экранов жмем Ctrl+C и пишем более конкретное
Get—Counter —ListSet *diskЛучше, но все еще неясно что дальше?
Get—Counter —ListSet *disk | Sort-Object CounterSetName | Select-Object CounterSetNameТеперь запрашиваем конкретный набор
Get—Counter —ListSet ‘ LogicalDisk’и получаем список доступных для этого набора счетчиков.
Get—Counter —ListSet ‘PhysicalDisk’ | Select-Object -ExpandProperty CounterДля полноты картинки вводим еще
Get—Counter —ListSet LogicalDisk | Select-Object -ExpandProperty PathsWithInstancesЧто дальше?
Get—Counter —ListSet ‘PhysicalDisk’ | Select-Object -ExpandProperty Counter | Out-File C:\TEMP\Sample.txtПолученный список счетчиков выгружается в файл «C:\TEMP\Sample.txt». Что бы все это хозяйство заработало, нам понадобится создать CSV-файл
Get—Counter —ListSet ‘LogicalDisk’, ‘PhysicalDisk’ |
ForEach-Object {
$CounterCategory = $_
$CounterCategory | Select-Object -ExpandProperty Counter |
ForEach-Object {
$CounterName = $_
$CounterName | Where-Object {$CounterName -match ‘(sec/Transfer|Avg. Disk Queue Length)’} |
Select-Object @{E={$CounterCategory.CounterSetName};N="CounterSetName"},
@{E={$CounterCategory.Description};N="Description"},
@{E={$CounterName};N="Counter"}
}
} | Export-csv C:\temp\BaselineCounters.csv -NoClobber -NoTypeInformation -AppendФайл сформирован, смотрим что получилось
$Counters = (Import-Csv C:\temp\BaselineCounters.csv).counter
Get—Counter —Counter $CountersДля упрощения восприятия немного причесываем вывод
$Counters = (Import-Csv C:\temp\BaselineCounters.csv).counter
Get—Counter —Counter $Counters |
Select-Object -ExpandProperty countersamples |
Select-Object @{E={$_.timestamp};N="Date"},
@{E={$_.path};N="Counter"},
InstanceName,
@{E={$_.cookedvalue};N="Value"}Что бы получить заданные счетчики сразу с нескольких хостов добавляем в код
$Computers = Get-Content c:\temp\Servers.txt
# и модифицируем строку
Get—Counter -ComputerName $Computers —Counter $CountersДальше, что называется «по вкусу», добавляем количество запросов
Get—Counter —Counter $Counters —SampleInterval 2 —MaxSamples 10Выгружаем информацию в файл
$Counters = (Import-Csv C:\temp\BaselineCounters.csv).counter
Get—Counter —Counter $Counters —SampleInterval 2 —MaxSamples 10 | Export—counter -Path C:\TEMP\data1.blgНу а дальше… За чашечкой кофе разбираем результаты.
Только полноправные пользователи могут оставлять комментарии. Аутентифицируйтесь пожалуйста, используя сервисы.