Прошлый раз мы рассмотрели мониторинг в zabbix Linux IOPS при помощи iostat.
Сегодня мы попробуем сделать тоже самое, но уже в windows окружении.
Windows в фоновом режиме самостоятельно обсчитывает определенный набор метрик, делается это через «Perfomance Monitor» доступ к которому в zabbix реализуется через функцию «perf_counter».
На вход perf_counter получает «имя» счетчика, и это первый подводный камень.
В Интернете можно найти несколько вариантов обозначения одного и того же счетчика, например:
perf_counter[\PhysicalDisk(_Total)\Disk Reads/sec] perf_counter[\Физический диск(_Total)\Обращений чтения с диска/с] perf_counter[\234(_Total)\214] |
Несмотря на различия, это действительно один и тот же счетчик.
Первый два характерны для разных локаций windows и использовать их в мониторинге мы не будем, т.к. под русской windows не будут работать английские счетчики и наоборот.
Третий вариант стоит назвать универсальным, т.к. он работает везде, но «overhead» в интуитивной непонятности обозначений.
Несколько вариантов получить счетчики:
typeperf -qx lodctr /s:perfcount.txt |
В «lodctr» мы видим сопоставление цифр и названий счетчиков:
234 - PhysicalDisk 236 - LogicalDisk |
Или в виде удобной таблицы: Techwiki:Performance Counter Indexes
В качестве примера, я сделал шаблон для «Disk I/O Operations» и «File I/O Operations» диска «Total». Особенность шаблона, что он не требует никаких изменений конфигурации zabbix на клиентах.
https://github.com/spions/zabbix/tree/master/zabbix_Windows_IOPS
Disk I/O Operations
График показывает общее количество операций ввода\вывода, обработанных (завершенных) диском в течении 1 секунды (Input/Output Operations Per Second, IOPS). Этот счетчик позволяет примерно оценить, насколько нагрузка на диски близка к предельной.
File I/O Operations
Если нужна расшифровка по всем дискам, то уже потребуется изменение конфигурации zabbix, путем добавления нового UserParameter: объявляем переменную windowsdisk.discovery с запуском powershell скрипта:
UserParameter=windowsdisk.discovery, powershell -NoProfile -ExecutionPolicy Bypass -File c:\get_disks.ps1 |
get_disks.ps1:
https://github.com/spions/zabbix/blob/master/zabbix_Windows_IOPS/files/get_disks.ps1
$drives = Get-WmiObject win32_PerfFormattedData_PerfDisk_PhysicalDisk | ?{$_.name -ne "_Total"} | Select Name $idx = 1 write-host "{" write-host " `"data`":[`n" foreach ($perfDrives in $drives) { if ($idx -lt $drives.Count) { $line= "{ `"{#DISKNUMLET}`" : `"" + $perfDrives.Name + "`" }," write-host $line } elseif ($idx -ge $drives.Count) { $line= "{ `"{#DISKNUMLET}`" : `"" + $perfDrives.Name + "`" }" write-host $line } $idx++; } write-host write-host " ]" write-host "}" |
Результатом будет json с количеством дисков:
{ "data":[ { "{#DISKNUMLET}" : "0 C:" } ] } |
На основе данного discovery можно снимать необходимое вам количество метрик и строить графики, но это тема для отдельного поста.