Войти в IT
Собственно любое необходимое нам значение для систем мониторинга можно получить в виде oid формата .1.3.6.1.4.1.15.Х и снимать через удобный SNMP
В моем случае возникла задача мониторить старенький ИБП Ippon, snmp – карты в нем, конечно же, нет, и покупать ее никто не собирался, но есть USB подключенный к компу, им и воспользуемся.
Для начала нам понадобится включить службу SNMP на имеющейся Windows(x64), как это сделать можно найти на просторах интернета
Далее копируем библиотеку snmptools.dll в папку C:\Windows\
Затем для наших нужд создадим папку Scripts на диске С для скриптов (путь будет C:\Scripts\)
В этой папке создадим файл counters.ini и для теста вставим содержимое
[1.3.6.1.4.1.15.1]
type=string
counter=SNMP TEST
О созданных файлах необходимо внести изменение в реестр, для этого можно воспользоваться готовым файлом или создать свой с расширением reg
Содержимое файла:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SNMP\Parameters\ExtensionAgents]
“snmptools”=”SOFTWARE\\snmptools\\CurrentVersion”
[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\snmptools\currentversion]
“counters”=”C:\Scripts\counters.ini”
“debug”=”1”
;system32=C:\Windows\SysWOW64 under x64
“Pathname”=”%systemroot%\snmptools.dll”
“oid”=”1.3.6.1.4.1.15”
Где counters – путь до counters.ini
debag – 1 = вести логи (лог будет в корне диска C), 0 = отключить ведение логов
Перезапускаем службу SNMP
После чего можем проверять, для проверки я воспользуюсь SNMPWALK.exe
Для этого копирую snmpwalk.exe в ту же рабочую папку C:\Scripts\
Открываем терминал CMD и вставляем туда
c:\Scripts\SnmpWalk.exe -r:127.0.0.1 -c:public -os:.1.3.6.1.4.1.15 -op:.1.3.6.1.4.1.15.9
Видим наше значение, если что-то пошло не так, то не забываем про лог файл в корне диска C
Далее необходимо отредактировать ранее созданный counter.ini желаемыми значениями сопоставив с oid
Примерное содержание может быть следующим:
;Для статичной записи
[1.3.6.1.4.1.15.1]
type=string
counter=SNMP TEST
;Для запуска скриптов VBS
[1.3.6.1.4.1.15.2]
type=exec
counter=cscript /nologo c:\1c_sessions.vbs
;Для однострочных команд
[1.3.6.1.4.1.15.3]
type=exec
counter=cmd /c hostname
;Для запуска python скриптов
[1.3.6.1.4.1.15.4]
type=exec
counter=python3 c:\Scripts\test.py
;Для запуска Powershell скриптов
[1.3.6.1.4.1.15.5]
type=exec
counter=powershell c:\Scripts\test.ps1
В моем случае для связи через USB c ИБП Ippon была установлена штатная программа WinPower, которая умеет запускать собственный веб-сервер доступный по адресу https://IP:8888, и к тому же умеет отдавать данные в формате JSON по адресу https://IP:8888/0/json
Этого оказалось достаточно, пишем простой Powershell скрипт и парсим нужное значение
[System.Net.ServicePointManager]::ServerCertificateValidationCallback = { $true }
$json = (New-Object System.Net.WebClient).DownloadString(‘https://IP:8888/0/json’)
$data = $json | ConvertFrom-Json
$data.batCapacity.Trim(‘%’)
Увы, запрос json у ибп доступен только через ssl зашифрованное соединение, в нашем случае с невалидным сертификатом. Powershell явно не умеет игнорировать сертификат, для этого и пользуемся [System.Net.ServicePointManager]::ServerCertificateValidationCallback = { $true } перед запросом. Список всех доступных значений можем получить поменяв $data.batCapacity.Trim(‘%’) на $data