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
Ну а дальше… За чашечкой кофе разбираем результаты.
Только полноправные пользователи могут оставлять комментарии. Аутентифицируйтесь пожалуйста, используя сервисы.