Вопрос или проблема
Насколько я понимаю, базы данных SNMP Management Information Base используются Станциями управления сетью для перевода данных от агентов SNMP в понятную форму. Например, в случае sysUpTimeInstance:
$ snmpwalk -v 2c -c public 10.10.10.1 sysUpTimeInstance
DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (28267576) 3 дня, 6:31:15.76
$
..Я предполагаю, что именно благодаря MIB 28267576 преобразуется в 3 дня, 6 часов, 31 минуту, 15.76 секунды? Теперь я ищу правильный файл MIB, чтобы увидеть эту трансляцию:
$ grep -ir sysUpTimeInstance /usr/local/share/smi/mibs/
/usr/local/share/smi/mibs/ietf/DISMAN-EVENT-MIB:sysUpTimeInstance OBJECT IDENTIFIER ::= { sysUpTime 0 }
/usr/local/share/smi/mibs/ietf/DISMAN-EVENT-MIB: DEFVAL { sysUpTimeInstance }
/usr/local/share/smi/mibs/ietf/DISMAN-EXPRESSION-MIB:sysUpTimeInstance OBJECT IDENTIFIER ::= { sysUpTime 0 }
/usr/local/share/smi/mibs/ietf/DISMAN-EXPRESSION-MIB: DEFVAL { sysUpTimeInstance }
$
..и похоже, что оно определено в файле /usr/local/share/smi/mibs/ietf/DISMAN-EVENT-MIB
. Как мне понять это sysUpTimeInstance OBJECT IDENTIFIER ::= { sysUpTime 0 }
?
Это может быть очень утомительным, если выполнять все вручную. Существуют инструменты, такие как snmptranslate
, которые выполняют такую работу за вас. Попробуйте snmptranslate -M /path/to/mibs -m ALL -Pu -Tso|grep -B1 sysUpTimeInstance
. Чтобы увидеть все детали sysUpTime, используйте snmptranslate -Td -OS .iso.org.dod.internet.mgmt.mib-2.system.sysUpTime
. Это покажет вам, что он измеряется в TimeTicks.
Но чтобы ответить на ваш вопрос, файлы MIB пишутся на ASN.1, где каждый объект может основываться на всех предыдущих объектах. Помимо прочего, например, описаний и типов объектов и т.д., создаются OID, также известные как Object IDentifiers, которые сопоставляют OID с именами, такими как .iso.org.dod.internet.mgmt.mib-2.system.sysUpTime.sysUpTimeInstance
Для этой записи sysUpTimeInstance OBJECT IDENTIFIER ::= { sysUpTime 0 }
грубо переводится как “OID для sysUpTimeInstance равен OID sysUpTime плюс ‘.0’, а MIB равен MIB sysUpTime плюс ‘.sysUpTimeInstance’
Чтобы увидеть, что такое OID и остальная часть MIB для sysUpTime, вы должны посмотреть раньше в файле. Имейте в виду, что он мог быть импортирован из другого файла. В этом случае он был импортирован, так что если вы посмотрите секцию IMPORTS, вы увидите, что sysUpTime был импортирован из SNMPv2-MIB. Если вы затем проверите этот файл, то увидите определение sysUpTime, и в этом определении вы найдете ::= { system 3 }
.
До сих пор у нас есть .3.0
и system.sysUpTime.sysUpTimeInstance
, что является просто последней частью OID и полным именем MIB. Затем мы можем проследить system
обратно к его определению и т.д., и т.д. Следуя этой цепочке через файлы, вы в итоге получите полный OID и полный MIB.
Конечно, вы можете просто использовать snmptranslate
, как показано в первом абзаце, чтобы сделать все это за вас. Это покажет вам MIB и OID. Для большинства из нас, это обычно самый дальний предел, к которому нам нужно идти.
Для получения дополнительной информации см.:
- Demystifying the SNMP MIB (рекламный буклет, но также содержит хороший обзор MIB)
- ASN.1 – Википедия
Ответ или решение
Теория
Simple Network Management Protocol (SNMP) и его связанные компоненты, такие как Управляющие Базы Информации (MIB), являются стандартами управления сетью, которые позволяют мониторинг, упращение и контроль за различными элементами сетевого оборудования. MIB в контексте SNMP выступает как база данных, где хранятся описания всех ресурсов, которыми можно управлять через SNMP. Каждый объект в этой базе данных имеет свой уникальный идентификатор, который называется Object Identifier (OID).
OID организуются в иерархическую структуру, похожую на дерево, где каждое "ветвление" представляет собой последовательность чисел, разделённых точками. ASN.1 (Abstract Syntax Notation One) — это язык описания данных, используемый для формальной спецификации объектов в MIB, включая OID.
Пример
Вы указываете на sysUpTimeInstance как на пример использования MIB. Рассмотрим детально, как это выглядит:
Когда вы запускаете команду snmpwalk -v 2c -c public 10.10.10.1 sysUpTimeInstance
, она извлекает информацию о времени работы системы (sysUpTime) с устройства за последние 3 дня, 6:31:15.76. В выводе команда преобразует "28267576" в эти человечески понятные значения, благодаря MIB.
Теперь, чтобы понять, что означает запись sysUpTimeInstance OBJECT IDENTIFIER ::= { sysUpTime 0 }
, необходимо понимать, как объекты связаны в MIB. Эта запись означает, что sysUpTimeInstance — это подкомпонент sysUpTime, к которому добавлено .0
. Это полезно в контексте, когда вы хотите идентифицировать конкретные инстансы или варианты более общего объекта.
Применение
Как понять и работать с MIB?
-
Инструменты для понимания MIB:
- Используйте
snmptranslate
— это мощный инструмент, который автоматически переводит OID в более читаемые имена их иерархий, и обратно. Например, командаsnmptranslate -M /path/to/mibs -m ALL -Pu -Tso|grep -B1 sysUpTimeInstance
поможет проследить связи и зависимости для sysUpTimeInstance через все MIB.
- Используйте
-
Чтение исходных файлов MIB:
- В файле MIB следуйте цепочке определений для каждого идентификатора (
IMPORTS
секция), чтобы понять происхождение объектов и их места в иерархии. Это позволяет вручную строить понимание MIB и OID.
- В файле MIB следуйте цепочке определений для каждого идентификатора (
-
Практическое использование:
- Если вы работаете над мониторингом или настройкой оборудования, убедитесь, что у вас корректная версия MIB, которая соответствует вашему устройству и прошивке.
- MIB-файлы используются параметрами управления и наборов данных, которые могут быть настроены и извлечены для анализа и диагностики.
Пример прикладного использования:
Импорт MIB из одного файла в другой, как в вашем примере с SNMPv2-MIB, позволяет разделить и переиспользовать компоненты MIB в различных конфигурациях и контекстах. Это позволяет эффективно управлять большим количеством разнообразных устройств, интегрируя их мониторинг в единую систему.
Помните, что для комплексного мониторинга корпоративной сети необходимо не только использование стандартных MIB-файлов, но и создание кастомизированных объектов, специфичных для вашего сетевого окружения.
Заключение
Работа с SNMP и MIB-файлами может показаться сложной на первый взгляд, но с помощью правильных инструментов и методик (таких как использование snmptranslate и изучение иерархии объектов в MIB) вы сможете эффективно управлять и контролировать любые сетевые устройства. Это возможно благодаря тому, что MIB предоставляет формализованный способ обращения ко всем элементам сетевого устройства. Выбор верных инструментов и понимание принципов работы с ASN.1 облегчит эту задачу.