Search
Write a publication
Pull to refresh

Расширение возможностей SNMP агента в Windows


Протокол 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

Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.