Как создать какой-то шаблон для разделов в файле SNMP - MIB - PullRequest
0 голосов
/ 23 октября 2018

У нас есть программный комплекс, который собирает информацию о состоянии здоровья из своих модулей (сервисов).Мы имеем дело с этой информацией о здоровье, но мы также хотим использовать SNMP, чтобы сообщить внешнему миру, в каком состоянии находятся модули.Вместо использования файла MIB и необходимости реализации SNMP в каждом модуле мы хотим использовать SNMP в одной централизованной службе с одним файлом MIB.Это имеет свои преимущества, но сопровождающий MIB-файл становится огромным из-за того, что каждый модуль может содержать полную копию своих одноранговых модулей.Это выглядит так, и это просто очень простой пример.

example mib tree

Вопрос заключается в следующем: есть ли способ построить подразделы в Mib-дерево для того, чтобы сделать MIB-файл более обслуживаемым?Было бы так приятно создать своего рода шаблон для модуля со всеми его дочерними объектами и просто создать объекты из этого шаблона.

Возможно ли это как-то?

Ниже приведен MIB-файлдля этого примера дерево Mib:

    MYCOMP-MYAPP-MIB DEFINITIONS ::= BEGIN

   IMPORTS
        MODULE-IDENTITY, OBJECT-TYPE, NOTIFICATION-TYPE, enterprises
           FROM SNMPv2-SMI
        TEXTUAL-CONVENTION
           FROM SNMPv2-TC;

mycomp             OBJECT IDENTIFIER ::= {enterprises 12345}

myapp MODULE-IDENTITY                      
       LAST-UPDATED  "201810220000Z"
       ORGANIZATION  "MyCompany"
       CONTACT-INFO  ""
       DESCRIPTION   ""
       ::= { mycomp 40 }

systemInfoGroup OBJECT IDENTIFIER ::= {myapp 2}

ErrorStatus ::= TEXTUAL-CONVENTION
    STATUS     current   
    DESCRIPTION
        "Status"
    SYNTAX     INTEGER {
        normal(0),
        error(1),
    }

sysManagerGroup OBJECT IDENTIFIER 
::= {systemInfoGroup 1}

sysManagerModule1 OBJECT IDENTIFIER 
::= {sysManagerGroup 1}

sysManagerModule1Version  OBJECT-TYPE
   SYNTAX  OCTET STRING (SIZE (1..100))
   ACCESS  read-only
   STATUS  current
   DESCRIPTION
           "Contains the version string of the software module."
   ::= { sysManagerModule1 1 }

sysManagerModule1Uptime  OBJECT-TYPE
   SYNTAX  OCTET STRING (SIZE (1..100))
   ACCESS  read-only
   STATUS  current
   DESCRIPTION
           "Up time."
   ::= { sysManagerModule1 2 }

sysManagerModule1ErrorA OBJECT-TYPE
    SYNTAX  ErrorStatus                
    ACCESS  read-only
    STATUS  current
    ::= { sysManagerModule1 4 }

sysManagerModule1ErrorB OBJECT-TYPE
    SYNTAX   ErrorStatus 
    ACCESS  read-only
    STATUS  current
    ::= { sysManagerModule1 5 }

sysManagerModule1ErrorC OBJECT-TYPE
    SYNTAX  ErrorStatus 
    ACCESS  read-only
    STATUS  current
    ::= { sysManagerModule1 6 }

sysManagerModule2 OBJECT IDENTIFIER 
::= {sysManagerGroup 2}

sysManagerModule2Version  OBJECT-TYPE
   SYNTAX  OCTET STRING (SIZE (1..100))
   ACCESS  read-only
   STATUS  current
   DESCRIPTION
           "Contains the version string of the software module."
   ::= { sysManagerModule2 1 }

sysManagerModule2Uptime  OBJECT-TYPE
   SYNTAX  OCTET STRING (SIZE (1..100))
   ACCESS  read-only
   STATUS  current
   DESCRIPTION
           "Up time."
   ::= { sysManagerModule2 2 }

sysManagerModule2ErrorA OBJECT-TYPE
    SYNTAX  ErrorStatus                
    ACCESS  read-only
    STATUS  current
    ::= { sysManagerModule2 4 }

sysManagerModule2ErrorB OBJECT-TYPE
    SYNTAX   ErrorStatus 
    ACCESS  read-only
    STATUS  current
    ::= { sysManagerModule2 5 }

sysManagerModule2ErrorC OBJECT-TYPE
    SYNTAX  ErrorStatus 
    ACCESS  read-only
    STATUS  current
    ::= { sysManagerModule2 6 }
END

1 Ответ

0 голосов
/ 23 октября 2018

Я не совсем понимаю ваш вариант использования (я не до конца понимаю, что часть «каждый модуль может содержать полную копию своих одноранговых модулей», особенно потому, что сами ваши модули фактически «имеют» ничего если вы централизуете информацию в одном месте), но это кажется идеальной возможностью для таблиц .Это аналогично массиву структур на языках, подобных С.

Вместо того, чтобы миллион раз повторять 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 ;если вы не они, вам нужно будет получить свой собственный .

...