Я не совсем понимаю ваш вариант использования (я не до конца понимаю, что часть «каждый модуль может содержать полную копию своих одноранговых модулей», особенно потому, что сами ваши модули фактически «имеют» ничего если вы централизуете информацию в одном месте), но это кажется идеальной возможностью для таблиц .Это аналогично массиву структур на языках, подобных С.
Вместо того, чтобы миллион раз повторять Version, Uptime, ErrorA, ErrorB и ErrorC (как в MIB, так и в реальном логическом дереве),у вас есть таблица , которая содержит пять столбцов, и заполните ее столько строк, сколько вам нужно.Синтаксис / форму каждого столбца нужно указывать только один раз.
У вас будет дополнительный столбец (поместите его первым) для «индекса» каждой строки, то есть номер модуля.
Мой SMI ржавый, но определения выглядят примерно так:
sysManagerGroup OBJECT IDENTIFIER
::= { systemInfoGroup 1 }
sysManagerModuleTable OBJECT-TYPE
SYNTAX SEQUENCE OF SysManagerModuleEntry
MAX-ACCESS not-accessible
STATUS current
DESCRIPTION "Table of modules being monitored"
::= { sysManagerGroup 1 }
sysManagerModuleEntry OBJECT-TYPE
SYNTAX SysManagerModuleEntry
MAX-ACCESS not-accessible
STATUS current
DESCRIPTION "A row in the table of modules being monitored"
INDEX { sysManagerModuleId }
::= { sysManagerModuleTable 1 }
SysManagerModuleEntry ::= { SEQUENCE
sysManagerModuleId Integer32,
sysManagerModuleVersion OCTET STRING,
sysManagerModuleUptime OCTET STRING,
sysManagerModuleErrorA ErrorStatus,
sysManagerModuleErrorB ErrorStatus,
sysManagerModuleErrorC ErrorStatus,
}
sysManagerModuleId OBJECT-TYPE
SYNTAX Integer32,
MAX-ACCESS not-accessible
STATUS current
DESCRIPTION "Numeric ID of the module"
::= { sysManagerModuleEntry 1 }
sysManagerModuleVersion OBJECT-TYPE
SYNTAX OCTET STRING (SIZE (1..100))
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"Contains the version string of the software module."
::= { sysManagerModuleEntry 2 }
sysManagerModuleUptime OBJECT-TYPE
SYNTAX OCTET STRING (SIZE (1..100))
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"Up time."
::= { sysManagerModuleEntry 3 }
sysManagerModuleErrorA OBJECT-TYPE
SYNTAX ErrorStatus
MAX-ACCESS read-only
STATUS current
::= { sysManagerModuleEntry 4 }
sysManagerModuleErrorB OBJECT-TYPE
SYNTAX ErrorStatus
MAX-ACCESS read-only
STATUS current
::= { sysManagerModuleEntry 5 }
sysManagerModuleErrorC OBJECT-TYPE
SYNTAX ErrorStatus
MAX-ACCESS read-only
STATUS current
::= { sysManagerModuleEntry 6 }
И все - повторных определений не требуется.Во время выполнения добавьте столько строк, сколько вам нужно / нужно.
Отдельные записи будут напрямую доступны следующим образом:
4.1.12345.40.2.1.1.1.<ID>.<FIELD>
например, ошибка модуля 2 B
4.1.12345.40.2.1.1.1.2.5
и время работы модуля 48,570 составляет
4.1.12345.40.2.1.1.1.48570.3
Конечно, ваш удаленный менеджер не будет знать количество строк заранее, но это нормально: менеджеры будут использовать «прогулку» или вариант - некоторыекомбинация GetNext или GetBulk запросов - для обнаружения содержимого таблицы.
Вставьте эти определения SMIv2 в вашу MIB и передайте MIB вашему SNMP Manager, иВы должны увидеть, как это улучшает макет.Фактическое заполнение таблицы будет зависеть от программного обеспечения вашего агента.
Обратите внимание, что объекты "таблица" и "запись" на самом деле являются псевдообъектами и, следовательно, должны иметь уровень доступа not-accessible
;индекс записи является действительным значением, но должен быть not-accessible
, поскольку его значение логически является частью OID для каждой записи, а не отдельным объектом, который вы можете опрашивать.
Кстати, корпоративный номер 12345 имеетбыл назначен на VWB Group ;если вы не они, вам нужно будет получить свой собственный .