Мониторинг Windows OS при помощи SNMP

Раздел связанный с мониторингом ОС Windows
Аватара пользователя
Артём Мамзиков
Admin
Сообщения: 804
Стаж: 5 лет 1 месяц
Откуда: Вологодская область
Поблагодарили: 33 раза
Контактная информация:

Мониторинг Windows OS при помощи SNMP

Сообщение Артём Мамзиков »

Как установить стандартную службу SNMP в Windows и настроить мы разобрали тут Установка и настройка службы SNMP в Windows
Стандартный Шаблон ОС Windows SNMPv2

Теперь перейдем к пункту как получать с нее данные.

Неполный список MIB, которые поставляются с системой.
Они устанавливаются вместе со службой SNMP в каталоге %systemroot%\system32
Полный список баз MIB см. в наборе ресурсов Windows.

В моем случае были следующие MIB: Для Windows 10 x64 и один в один Server 2008 R2
accserv.mib 14кб
authserv.mib 15кб
dhcp.mib 4кб
ftp.mib 6кб
hostmib.mib 48кб
http.mib 21кб
inetsrv.mib 1кб
ipforwd.mib 15кб
lmmib2.mib 26кб
mcastmib.mib 30кб
mib_ii.mib 107кб
msft.mib 1кб
msipbtp.mib 13кб
msiprip2.mib 34кб
rfc2571.mib 22кб
smi.mib 4кб
wins.mib 26кб

Скачать
Стандартные MIB Windows 10.7z
Стандартные MIB Windows 10.7z
(49.56 КБ) 34 скачивания
Зависимости
FROM SNMPv2-SMI
FROM SNMPv2-TC
FROM SNMPv2-CONF
FROM RFC-1212
FROM SNMP-FRAMEWORK-MIB +
FROM RFC1155-SMI +
FROM RFC1213-MIB +
FROM MSFT-MIB +
FROM INTERNETSERVER-MIB +
FROM WINS-MIB +

Переименовал для удобства если выходит какая ошибка.
Стало - было
RADIUS-ACC-SERVER-MIB.mib - accserv.mib 14кб
RADIUS-AUTH-SERVER-MIB.mib - authserv.mib 15кб
DHCP-MIB.mib - dhcp.mib 4кб
FTPSERVER-MIB.mib - ftp.mib 6кб
HOST-RESOURCES-MIB-WIN бы такая но внутри разные HOST-RESOURCES-MIB.mib - hostmib.mib 48кб
HTTPSERVER-MIB.mib - http.mib 21кб
INTERNETSERVER-MIB.mib - inetsrv.mib 1кб
RFC1354-MIB.mib - ipforwd.mib 15кб
LanMgr-Mib-II-MIB.mib - lmmib2.mib 26кб
IPMROUTE-MIB.mib - mcastmib.mib 30кб
RFC1213-MIB.mib - mib_ii.mib 107кб
MSFT-MIB.mib - msft.mib 1кб
MSIPBOOTP-MIB.mib - msipbtp.mib 13кб
MSIPRIP2-MIB.mib - msiprip2.mib 34кб
SNMP-FRAMEWORK-MIB.mib - rfc2571.mib 22кб
RFC1155-SMI.mib - smi.mib 4кб
WINS-MIB.mib - wins.mib 26кб

Скачать:
Стандартные MIB Переименованные Windows 10.zip
Стандартные MIB Переименованные Windows 10.zip
(67.52 КБ) 28 скачиваний
Описание для некоторых Mib
lmmib2.mib — это частный MIB для серверов Windows.
dhcp.mib - Определенная Microsoft MIB, содержащая типы объектов для мониторинга сетевого трафика между удаленными узлами и DHCP-серверами.
hostmib.mib - Содержит типы объектов для мониторинга и управления ресурсами хоста.
lmmib2.mib - Охватывает службы рабочих станций и серверов
mib_ii.mib - Содержит информационную базу управления (MIB-II), которая обеспечивает простую работоспособную архитектуру и систему для управления Интернетом на основе TCP/IP.
wins.mib - Определенная Microsoft MIB для службы имен Интернета Windows (WINS)
База сведений об управлении SNMP (MIB)

Дополнительная информация:
Windows NT: обычно можно скопировать MIB из агента расширения SNMP, который поддерживает конкретный MIB. Некоторые дополнительные базы MIB доступны в комплекте ресурсов Windows NT 4.0.

Библиотеки DLL агента расширения для MIB-II, LAN Manager MIB-II и MIB ресурсов хоста устанавливаются вместе со службой SNMP. Библиотеки DLL агента расширения для других MIB устанавливаются при установке соответствующих служб. Во время запуска службы служба SNMP загружает все библиотеки DLL агента расширения, перечисленные в реестре.

Пользователи могут добавлять другие библиотеки DLL агента расширения, которые реализуют дополнительные MIB. Для этого они должны добавить запись реестра для новой библиотеки DLL в службе SNMP. Они также должны зарегистрировать новую MIB в приложении консоли управления SNMP. Дополнительные сведения см. в документации, прилагаемой к вашему приложению консоли управления.

Microsoft назначено пространство имен 1.3.6.1.4.1.311, определенное в MSFT.MIB. Microsoft имеет право назначать имена объектам в любом месте ниже этого пространства имен.

Идентификатор объекта в иерархии записывается как последовательность субидентификаторов, начинающаяся с корня и заканчивающаяся на объекте. Подидентификаторы разделяются точкой.



Возьмем пример: Мониторить состояние запущенных в Windows служб через SNMP
используя MIB, кажется, что вы можете получить статус каждой службы, обратившись к LanMgr-Mib-II-MIB::svSvcOperatingState, Я боролся с доступом к OID, который включал «строку имени службы».

Сразу напишу такое
Сама функция агента SNMP является услугой, официально предоставляемой MS. (—> Когда я обратился на форум MS, мне ответили, что «работа по SNMP не рекомендуется»...)


Изначально я нашел очень много инфы на такой вид запроса

Код: Выделить всё

snmpwalk -v 2c -c public IP:Port LanMgr-Mib-II-MIB::svSvcOperatingState["index","LanMgr-Mib-II-MIB::svSvcName","Имя Службы"]
Пример:

Код: Выделить всё

snmpwalk -v 2c -c public 192.168.150.3:161 LanMgr-Mib-II-MIB::svSvcOperatingState["index","LanMgr-Mib-II-MIB::svSvcName","Zabbix Agent"]
Или по OID

Код: Выделить всё

snmpwalk -v 2c -c public 192.168.150.3:161 1.3.6.1.4.1.77.1.2.3.1.3[index,1.3.6.1.4.1.77.1.2.3.1.1,"Zabbix Agent"]
И в ответ я должен был получить статус запрошенной службы
Рабочий статус сетевой службы:
активный(1)
ожидающий продолжения(2)
ожидающий паузы(3)
приостановленный(4)

Но приходил все к ошибке, разберем более детально:
Используем файл mib для запроса: LanMgr-Mib-II-MIB
Параметр: SvSvcOperatingState - Вы можете получить статус службы
LanMgr-Mib-II-MIB::svSvcOperatingState - объект, возвращающий рабочее состояние службы.
LanMgr-Mib-II-MIB::svSvcName - который возвращает имя службы.

По раздельности запросы выполнялись

Код: Выделить всё

snmpwalk -v 2c -c public 192.168.150.3:161 LanMgr-Mib-II-MIB::svSvcOperatingState

Код: Выделить всё

snmpwalk -v 2c -c public 192.168.150.3:161 LanMgr-Mib-II-MIB::svSvcName
получаем ответ
LanMgr-Mib-II-MIB::svSvcName."Zabbix Agent" = STRING: "Zabbix Agent"
LanMgr-Mib-II-MIB::svSvcName."............" = Hex-STRING: D0 A1 D0 B5 D1 80 D0 B2 D0 B5 D1 80

Русские символы в Hex формате.

Так же можно запросить данные по всем mib и выгрузить их в файл:

Код: Выделить всё

snmpwalk -v 2c -c public 192.168.150.3:161 >> Host3.log
Наткнулся на японскую статью по запросам служб windows snmp Японский Вариант статьи

Оказалось что имя службы не воспринимается для Английского языка имя службы нужно преобразовать в Десятичную систему ASCII
И синтаксис команды запроса будет другим.


Однако кажется, что часть символьной строки необходимо преобразовать в код ASCII. ( Я использовал этот сайт Преобразователь кода ASCII)

Видео подробно о кодировках



В десятичное число переводим имя
Пример для имени службы Skype for Business Server XMPP Translating Gateway
Показать
Skype for Business Server XMPP Translating Gateway
Получаем в 10тичной
83 107 121 112 101 32 102 111 114 32 66 117 115 105 110 101 115 115 32 83 101 114 118 101 114 32 88 77 80 80 32 84 114 97 110 115 108 97 116 105 110 103 32 71 97 116 101 119 97 121

Когда строка символов преобразуется
svSvcOperatingState.○.83.107.121.112.101.32.102.111.114.32.66.117.115.105.110.101.115.115.32.83.101.114.118.101.114.32.88.77.80.80.32.84.114.97.110.115.108.97.116.105.110.103.32.71.97.116.101.119.97.121
становится

Вам нужно ввести длину этой строки символов в начале получаем 50
Итак, в итоге будет следующее.
svSvcOperatingState.50.83.107.121.112.101.32.102.111.114.32.66.117.115.105.110.101.115.115.32.83.101.114.118.101.114.32.88.77.80.80.32.84.114.97.110.115.108.97.116.105.110.103.32.71.97.116.101.119.97.121
Для имени Службы: APC PBE Agent
APC PBE Agent - 65 80 67 32 80 66 69 32 65 103 101 110 116
Когда строка символов преобразуется
65.80.67.32.80.66.69.32.65.103.101.110.116
Кол-во чисел 13
Получаем OID
13.65.80.67.32.80.66.69.32.65.103.101.110.116

Пробуем запросить

Код: Выделить всё

snmpwalk -v 2c -c public 192.168.150.3:161 LanMgr-Mib-II-MIB::svSvcOperatingState.13.65.80.67.32.80.66.69.32.65.103.101.110.116
Ответ:
LanMgr-Mib-II-MIB::svSvcOperatingState."APC PBE Agent" = INTEGER: active(1)



Запрос

Код: Выделить всё

snmpwalk -v 2c -c public 192.168.150.3:161 LanMgr-Mib-II-MIB::svSvcName."Zabbix Agent"
В ответ ошибка
LanMgr-Mib-II-MIB::svSvcName.Zabbix Agent: Unknown Object Identifier (Index out of range: Zabbix Agent (svSvcName))

Если имя переведем в десятичную систему сформируем OID
Zabbix Agent - 12.90.97.98.98.105.120.32.65.103.101.110.116
Запрос

Код: Выделить всё

snmpwalk -v 2c -c public 192.168.150.3:161 LanMgr-Mib-II-MIB::svSvcName."12.90.97.98.98.105.120.32.65.103.101.110.116"
Ответ
LanMgr-Mib-II-MIB::svSvcName."Zabbix Agent" = STRING: "Zabbix Agent"
И ответ пришел.

Запрос

Код: Выделить всё

snmpwalk -v 2c -c public 192.168.150.3:161 LanMgr-Mib-II-MIB::svSvcOperatingState."12.90.97.98.98.105.120.32.65.103.101.110.116"
или

Код: Выделить всё

snmpwalk -v 2c -c public 192.168.150.3:161 1.3.6.1.4.1.77.1.2.3.1.3.12.90.97.98.98.105.120.32.65.103.101.110.116
Ответ
LanMgr-Mib-II-MIB::svSvcOperatingState."Zabbix Agent" = INTEGER: active(1)


Ради эксперимента попробуем первый запрос с OID

Код: Выделить всё

snmpwalk -v 2c -c public 192.168.150.3:161 LanMgr-Mib-II-MIB::svSvcOperatingState["index","LanMgr-Mib-II-MIB::svSvcName","12.90.97.98.98.105.120.32.65.103.101.110.116"]
Ответ
LanMgr-Mib-II-MIB::svSvcOperatingState[index,LanMgr-Mib-II-MIB::svSvcName,12.90.97.98.98.105.120.32.65.103.101.110.116]: Unknown Object Identifier

Запрос полностью в OID

Код: Выделить всё

snmpwalk -v 2c -c public 192.168.150.3:161 1.3.6.1.4.1.77.1.2.3.1.3["index","1.3.6.1.4.1.77.1.2.3.1.1","12.90.97.98.98.105.120.32.65.103.101.110.116"]
Ответ
.1.3.6.1.4.1.77.1.2.3.1.3[index,1.3.6.1.4.1.77.1.2.3.1.1,12.90.97.98.98.105.120.32.65.103.101.110.116]: Unknown Object Identifier (Sub-id not found: svSvcEntry -> 3[index,1)

Еще попробуем так:

Код: Выделить всё

snmpwalk -v 2c -c public 192.168.150.3:161 LanMgr-Mib-II-MIB::svSvcOperatingState."Zabbix Agent"
Ответ
LanMgr-Mib-II-MIB::svSvcOperatingState.Zabbix Agent: Unknown Object Identifier (Index out of range: Zabbix Agent (svSvcName)
И везде получаем ОШИБКИ


Для других языков
Однако если имя службы содержит японский язык, на него нельзя будет сослаться, даже если оно будет преобразовано в код ASCII.

Ниже описана процедура подтверждения SNMP OID японской службы.

Поскольку значение, возвращаемое Snmpwalk, представляет собой шестнадцатеричное число,

Веб-конференции Skype для бизнеса Server (Hex)
Hex-STRING: 53 6B 79 70 65 20 66 6F 72 20 42 75 73 69 6E 65 73 73 20 53 65 72 76 65 72 20 57 65 62 20 E4 BC 9A E8 AD B0

↑ Возвращаемое значение для запроса имени службы.

Исследуйте только «встречную» часть строки.




Часть «Встреча» → Раскрыт код символа → UTF-8 (шестнадцатеричный)
E4 BC 9A E8 AD B0
Преобразовать в двоичный

Стандарт преобразования сайта 32 символа (1 символ полной ширины считается за 1 символ) 32.83.101.114.118.101.114.32.87.101.98.32.228.188.154.232.173.176
→ НГ


Стандарт преобразования сайта 34 символа (1 символ полной ширины считается за 2 символа) 32.83.101.114.118.101.114.32.87.101.98.32.228.188.154.232.173.176
→ НГ


Стандарт конверсии сайта 36 символов (считается по количеству элементов, а не по количеству символов) 115.115.32.83.101.114 .118.101.114.32.87.101.98.32.228.188.154.232.173.176
→ Успех

Возвращаемое значение: LanMgr-Mib-II-MIB :: svSvcOperatingState.»Skype for Business Server Web ……» = ЦЕЛОЕ ЧИСЛО : активно (1 )



Теперь вы можете получить рабочее состояние служб Windows по SNMP, но когда служба выходит из строя, она не возвращает код, например стоп, в качестве возвращаемого значения.

По-видимому, когда служба не запущена, доступ к самому OID недоступен, и сторона диспетчера SNMP выдает ошибку «Такого OID нет». (Нет такого экземпляра в настоящее время не существует с этим OID)

Кроме того, похоже, что с момента остановки (запуска) службы проходит около 2 минут, пока статус не может быть обнаружен SNMP.

Вывод:
Мониторить состояние работы службы Windows можно прямо из SNMP-менеджера, но, похоже, потребуется некоторая изобретательность.


Немного из другой оперы но так же про кодировки в snmp
Аналогично например с антеннами microtik при обнаружении элементов вместо одного значения дает целую строку в шестнадцатеричных числах. Их необходимо преобразовать и получить 1 значение.

Что то вроде предобработки на JAVA

Код: Выделить всё

//разбиваем на части по разделителю "точка"
var a = value.split('.');
//последний элемент разбиваем на части по разделителю "двоеточие"
var b = a[a.length-1].split(':');
//и в цикле каждый его компонент преобразуем из HEX в DEC
for (var i=0; i<b.length; i++) {
b[i] = parseInt(b[i], 16)
}
//после чего собираем всё обратно
a[a.length-1] = b.join('.');
return a.join('.');
"Code:
.1.3.6.1.4.1.14988.1.1.1.2.1.3.c4:ad:34:50:3a:4c
При использовании в правилах LLD на входе будет не одна строка такого вида, а сгенерированный Zabbix-ом JSON, где строка такого вида - лишь одно из полей.
Поэтому логично, что скрипт ломается."

Если в вашей среде есть старые SNMP-устройства, и их время безотказной работы отображается как дата и время в шестнадцатеричных числах. Это требует многого, чтобы фактически преобразовать эти данные во что-то более понятное.
«используйте строго»; var str = значение; alert("str: " + str); var y256 = str.slice(0,2); var y = str.slice(3,5); var m = str.slice(6,8); var d = str.slice(9,11); var h = str.slice(12,14); var min = str.slice(15,17); var y256Base10 = +("0x" + y256); var yBase10 = +("0x" + y); var Год = 256*y256Base10 + yBase10; var mBase10 = +("0x" + m); var dBase10 = +("0x" + d); var hBase10 = +("0x" + h); var minBase10 = +("0x" + min); var YR = String(Year); var MM = String(mBase10); var DD = String(dBase10); var HH = String(hBase10); var MIN = String(minBase10); если (mBase10 < 10) MM = "0" + MM; если (dBase10 < 10) DD = "0" + DD; если (hBase10 < 10) HH = "0" + HH; если (minBase10 < 10) MIN = "0" + MIN; var Date = YR + "-" + MM + "-" + DD + " " + HH + ":" + MIN; Дата возврата;
С помощью предварительной обработки JavaScript вы можете получить более читаемые значения.

Преобразование SNMP «DateandTime» в метку времени
HEX в DEC
HEX в DEC
Problem to convert a data Hex-string in Zabbix Item Value
количество слов: 1474

Вернуться в «Windows»