
Протокол SNMP (англ. Simple Network Management Protocol — простой протокол управления сетями) давно зарекомендовал себя как простое и удобное средство сбора информации о работе различных устройств и систем. Агенты SNMP реализованы для множества операционных систем что даёт возможность строить масштабируемые системы мониторинга функционирования инфраструктуры.
К сожалению, штатный агент Windows, несмотря на кажущуюся информативность, ограничен в вариантах доступной информации о работе системы и в особенности сторонних приложений, работающих на сервере. В этой статье описано как получать по SNMP больше данных о работе сервера, в частности значения счётчиков производительности ОС и любые другие данные, которые могут предоставлять приложения работающие на сервере, например количество подключённых пользователей к серверу приложений 1С 8 или любую другую информацию, которую Вы захотите получить.
SNMP Агент Windows позволяет расширить охват данных при помощи подключения дополнительных библиотек, что дает возможность получить доступ к нужным данным. Информацию по написанию таких расширений можно найти в MSDN, но мы воспользуемся одним из готовых, а именно — snmptools. Эта библиотека позволяет передавать информацию полученную из счетчиков произовдительности Windows или результат выполнения консольной программы/скрипта в ответах SNMP агента.
snmptools поддерживает все современные версии Windows, начиная с XP и заканчивая 2008R2 и имеет функционал, достаточный для решения большинства задач по мониторингу.
Качаем архив с библиотекой.В нем лежат:
- snmptools.dll и snmptools64.dll — собственно библиотеки расширения SNMP Агента. 32-х и 64-х битная версии соответственно
- counters.sample и traps.sample — файлы с примерами конфигурации
- .reg файлы с примерами регистрации расширения в системном реестре
- .reg файлы с примерами регистрации расширения в системном реестре
- perf32.exe — программка для доступа к значениям счетчиков производительности из командной строки
- папки с примерами скриптов
Для установки копируем библиотеку нужной архитектуры в системную папку Windows. Рядом создаем ini файл с конфигурацией (по умолчанию предлагается его ложить в корень диска С:). После чего изменяем путь к библиотеке и конфигурации в .reg файле и импортируем ключи в реестр. Вуаля — после перезапуска службы SNMP библиотека будет загружена, и будет возвращать данные описанные в файле конфигурации.
Файл конфигурации представляет собой ini-файл с простой структурой. Заголовок раздела задает обрабатываемый oid. Параметры которых всего 2 — type и counter — указывают какую информацию возвращать.
;
;Скалярные счетчики
;
;Просто текстовая строка
[1.3.6.1.4.1.15.1]
type=string
counter=this is a test
;Значение счетчика производительности
[1.3.6.1.4.1.15.2]
counter=LogicalDisk\Free Megabytes\_Total
;Результат выполнения консольной команды.
[1.3.6.1.4.1.15.3]
type=exec
counter=cmd /c ver
;Результат выполнения VB скрипта
[1.3.6.1.4.1.15.4]
type=exec
counter=cscript /nologo c:\1c_sessions.vbs
;
;Табличные объекты
;
;Индекс
[1.3.6.1.4.1.15.10]
type=string
counter=2
; Описательные поля
[1.3.6.1.4.1.15.10.1]
type=string
counter=2
[1.3.6.1.4.1.15.10.1.1]
type=string
counter=Available Bytes
[1.3.6.1.4.1.15.10.1.2]
type=string
counter=Committed Bytes
; Информационные поля
[1.3.6.1.4.1.15.10.2]
type=string
counter=2
[1.3.6.1.4.1.15.10.2.1]
counter=memory\Available Bytes
[1.3.6.1.4.1.15.10.2.2]
counter=memory\Committed Bytes
;Необходимо указывать конец для корректной работы последовательного обхода с помощью snmp_get_next
[1.3.6.1.4.1.15.9999]
type=string
counter=EOF
И проверим работу:
> snmpwalk -v 2c -c public -O a 192.168.1.1 1.3.6.1.4.1.15
SNMPv2-SMI::enterprises.15.1 = STRING: "this is a test"
SNMPv2-SMI::enterprises.15.2 = INTEGER: 160922
SNMPv2-SMI::enterprises.15.3 = STRING: "Microsoft Windows [...... 5.2.3790]"
SNMPv2-SMI::enterprises.15.4 = INTEGER: 4
SNMPv2-SMI::enterprises.15.10 = INTEGER: 2
SNMPv2-SMI::enterprises.15.10.2 = INTEGER: 2
SNMPv2-SMI::enterprises.15.10.2.1 = STRING: "Available Bytes"
SNMPv2-SMI::enterprises.15.10.2.2 = STRING: "Committed Bytes"
SNMPv2-SMI::enterprises.15.10.3 = INTEGER: 2
SNMPv2-SMI::enterprises.15.10.3.1 = INTEGER: 427024384
SNMPv2-SMI::enterprises.15.10.3.2 = INTEGER: 522661888
SNMPv2-SMI::enterprises.15.9999 = STRING: "EOF"
End of MIB
Если что-то не заладилось можно включить отладку работы библиотеки установив в единицу параметр HKEY_LOCAL_MACHINE\SOFTWARE\snmptools\currentversion\debug. При этом отладочные сообщения будут сохранятся в файл c:\log.txt
Также можно настроить отправку трапов. Для этого нужно в настройках SNMP Агента Windows указать адрес получателя трапов, и в реестре в ветке HKEY_LOCAL_MACHINE\SOFTWARE\snmptools\currentversion создать строковой параметр traps с путем к файлу конфигурации трапов. Опционально можно добавить параметр trap_delay типа DWord для указания периодичности отправки трапов в миллисекундах.
Как видим snmptools это простой и удобный инструмент который может немного помочь в контроле увеличения энтропии вселенной и селекции зеленых хомячков.;-)
Если же Вам недостаточно функциональности предоставляемой snmptools, например требуются расширенные возможности протокола SNMP, типа управления сервером — можете попробовать использовать более продвинутые аналоги например, SNMPInformant
И в дополнение пример скрипта на VBScript для получения количества подключенных пользователей к серверу приложений 1Сv82.
Set Connector = CreateObject("V82.COMConnector")
Set Connection = Connector.ConnectAgent("tcp://localhost")
Clasters = Connection.GetClusters()
Set Cluster = Clasters (0)
Connection.Authenticate Cluster , "user", "password"
Sessions=Connection.GetSessions (Cluster)
WScript.StdOut.WriteLine (UBound(Sessions)+1)
Сайт snmptools2 erwan.l.free.fr/snmptools
Архив с snmptools2 erwan.l.free.fr/snmptools/snmptools2.zip
32-х битный инсталлятор erwan.l.free.fr/snmptools/snmptools32.exe