вторник, мая 03, 2016

Как читать SNMP MIB?

Привет читатели! Если вы прочитали все 5 предыдущих статей о настройке протокола SNMP в Windows, то Вы наверное заметили, что практически в каждой статье я обращал ваше внимание на то, что перед тем как начать работать с каким то устройством по протоколу SNMP, хорошо бы было ознакомиться с его специфичными MIB файлами от производителя.  Сегодня мы с Вами разберемся как читать SNMP MIB файлы и что полезного можно из них узнать.

Для начала необходимо найти и скачать требуемые MIB файлы. Обычно их можно легкой найти на сайте производителя оборудования, или же производитель предоставляет их по запросу. В крайнем случае всегда можно воспользоваться гуглом). В данной статье, в качестве примера, я буду использовать один из MIB файлов на мультиплексор RAD Optimux-1551, скаченный вот отсюда http://www.radproductsonline.com/support/cs11c01.rad.co.il/radcnt/mediaserver/27751_op15both.mib Для удобной работы с MIB файлами создано огромное количество специализированных приложений, и такие приложения встроены в практически каждую более или менее серьезную систему мониторинга. Но сегодня мы рассмотрим самый суровый вариант - мы будем рассматривать содержимое MIB файлов с помощью обычного текстового редактора. Поэтому щелкаем правой кнопкой мыши по MIB файлу и выбираем Открыть с помощью - Блокнот.

Перед нами предстанет фрагмент вида:

--
-- file :op15both.pkb
--
RAD-MIB        DEFINITIONS ::= BEGIN

--Title:    OPTIMUX-155  MIB  (merged: OPT-155-1 and OPT-155-3)
--
-- Copyright 1993 RAD Data Communications, Ltd.
-- All Rights Reserved. 

-- It is RAD's intent to encourage the widespread use of
-- this Specification in connection with the management of
-- RAD products. RAD grants vendors, end-users,
-- and other interested parties a non-exclusive license to
-- use this Specification in connection with the management
-- of RAD products.

-- This Specification is supplied "as is," and RAD makes
-- no warranty, either express or implied, as to the use,
-- operation, condition, or performance of the Specification.

IMPORTS
        enterprises, IpAddress,
        TimeTicks, OBJECT-TYPE,
        Integer32, Counter32, Gauge32,Counter64,Unsigned32, 
        NOTIFICATION-TYPE,OBJECT-IDENTITY         FROM SNMPv2-SMI
    DisplayString, RowStatus, TimeStamp,
    DateAndTime, MacAddress                 FROM SNMPv2-TC
        PerfCurrentCount,PerfIntervalCount,
        PerfTotalCount                          FROM PerfHist-TC-MIB
    ifIndex, InterfaceIndex, ifAlias        FROM IF-MIB
    IANAifType                                       FROM IANAifType-MIB
    dsx1LineStatus, dsx1LineStatusLastChange,
    dsx1LoopbackStatus, dsx1CurrentIndex,
    dsx1IntervalIndex, dsx1IntervalNumber,
    dsx1TotalIndex,dsx1LineIndex            FROM DS1-MIB
    dsx3LineStatus,
    dsx3LoopbackStatus                      FROM DS3-MIB
    SnmpAdminString                          FROM SNMP-FRAMEWORK-MIB;

-- Some MIB compilers need those two lines:
-- enterprises OBJECT IDENTIFIER ::=
--                   { iso org(3) dod(6) internet(1) private(4) 1 }



rad OBJECT IDENTIFIER ::= { enterprises 164 }
radWan   OBJECT IDENTIFIER ::= { rad 3 } -- rad WAN Tree
radGen   OBJECT IDENTIFIER ::= { rad 6} -- General information
wanGen   OBJECT IDENTIFIER ::= { radWan 1}
diverseIfWanGen OBJECT IDENTIFIER ::= {wanGen 6}
agnWanGen   OBJECT IDENTIFIER ::= {wanGen 2}
<Продолжение файла опущено>

Все строки начинающиеся с -- являются комментариями. И представлены в MIB файле только для упрощения его понимания и донесения дополнительной информации до пользователя.

Конструкция вида  RAD-MIB      DEFINITIONS ::= BEGIN говорит о начале MIB файла с именем  RAD-MIB. Все содержимое этого файла будет находится между конструкциями DEFINITIONS ::= BEGIN и END.





Далее идет раздел IMPORTS. В данном разделе указывается что и из каких сторонних MIB мы хотим использовать в данном MIB файле.

В данном случае после раздела IMPORTS начинается непосредственное описание фрагмента дерева MIB от производителя оборудования. Как раз в нем и описываются переменные которые нас интересуют.

Описание переменных выглядит примерно вот так:

sysSAlrStatusAll OBJECT-TYPE

      SYNTAX  INTEGER

       {

  off      (2),

  major    (3),

  minor    (4),

  event    (5),

  warning  (6),
  critical (7)
       }
      MAX-ACCESS  read-only
      STATUS  current
      DESCRIPTION
      "Indicates the current alarm state including all levels: 
       system, card, port.
       - critical(7): when there is at least one active (ON) critical 
                    alarm .
       - major (3): when there is no active critical alarm, but there is
                    at least one active (ON) major alarm .
       - minor (4): when there is no active major or critical alarm, but 
                    there is at least one active minor alarm.
       - warning (6): when there is no active major, critical or minor alarm, but 
                    there is at least one active warning alarm.
       - event (5): when there is no active alarm of another type, but 
                    there is at least one active event alarm.
       - off(2): when there is no active (ON) alarm (since last clear operation)."
      ::= { sysStatus 9 }

Здесь sysSAlrStatusAll - это имя переменной. INTEGER - это тип переменной. off      (2),  major    (3),  minor    (4),  event    (5),  warning  (6),  critical (7) - это перечень всех значений которые может принимать данная переменная. В поле MAX-ACCESS указывается тип доступа к данной переменной - в данном случае только для чтения. В поле STATUS указывает на то является ли данная переменная действующей или устаревшей. В данном случае действующая. В поле DESCRIPTION содержится самая главная для нас информация - а именно описание переменной и для чего она предназначена. Строка ::= { sysStatus 9 }, идущая после описания переменной, определяет место расположения данной переменной в дереве MIB. В данном случае переменная sysSAlrStatusAll является 9 на ветке sysStatus. На основе данной строки можно получить полный OID переменной. Давайте попробуем это сделать. Как мы только-то сказали sysSAlrStatusAll является 9 на ветке sysStatus, поэтому пока наш OID, будет иметь вид:

sysStatus.9 
или
sysStatus.sysSAlrStatusAll

Далее ищем в MIB файле описание sysStatus. Оно имеет вид:
sysStatus     OBJECT IDENTIFIER ::= {systemDacsMux 3}
То есть sysStatus является 3 на ветке systemDacsMux, поэтому наш первоначальный OID примет вид:

systemDacsMux.3.9 
или
systemDacsMux.sysStatus.sysSAlrStatusAll

Далее ищем в MIB файле описание systemDacsMux. Оно имеет вид:
systemDacsMux OBJECT IDENTIFIER ::= {dacsMux 1}
То есть systemDacsMux является 1 на ветке dacsMux, поэтому наш первоначальный OID примет вид:

dacsMux.1.3.9 
или
dacsMux.systemDacsMux.sysStatus.sysSAlrStatusAll

Далее ищем в MIB файле описание dacsMux. Оно имеет вид:
dacsMux       OBJECT IDENTIFIER ::= {radWan 3}
То есть dacsMux является 3 на ветке radWan, поэтому наш первоначальный OID примет вид:

radWan.3.1.3.9 
или
radWan.dacsMux.systemDacsMux.sysStatus.sysSAlrStatusAll

Далее ищем в MIB файле описание radWan. Оно имеет вид:
radWan   OBJECT IDENTIFIER ::= { rad 3 } -- rad WAN Tree
То есть radWan является 3 на ветке rad, поэтому наш первоначальный OID примет вид:

rad.3.3.1.3.9 
или
rad.radWan.dacsMux.systemDacsMux.sysStatus.sysSAlrStatusAll

Далее ищем в MIB файле описание rad. Оно имеет вид:
rad OBJECT IDENTIFIER ::= { enterprises 164 }
То есть rad является 164 на ветке enterprises, поэтому наш первоначальный OID примет вид:

enterprises.164.3.3.1.3.9 
или
enterprises.rad.radWan.dacsMux.systemDacsMux.sysStatus.sysSAlrStatusAll

В данном MIB файле после раздела IMPORT заботливо приведен комментарий следующего вида:

-- Some MIB compilers need those two lines:
-- enterprises OBJECT IDENTIFIER ::=
--                   { iso org(3) dod(6) internet(1) private(4) 1 }

Как можно понять он указывает путь до ветки enterprises. Основываясь на этих данных получим полный OID:

1.3.6.1.4.1.164.3.3.1.3.9 
или
iso.org.dod.internet.private.enterprises.rad.radWan.dacsMux.systemDacsMux.sysStatus.sysSAlrStatusAll

Используя данный OID можно считать значение переменной sysSAlrStatusAll. Когда мы захотим использовать этот OID на практике, нам необходимо будет добавить к нему дополнительный номер для получения значения этой переменной. То есть, нам необходимо добавить в конце OID .0, представляющий первый (и единственный, поскольку устройство не может иметь более одного описания) экземпляр этого объекта итого получаем:

1.3.6.1.4.1.164.3.3.1.3.9.0 
или
iso.org.dod.internet.private.enterprises.rad.radWan.dacsMux.systemDacsMux.sysStatus.sysSAlrStatusAll.0

Я думаю принцип получения номеров OID из MIB файлов на данном примере показан довольно наглядно.

P.S. И напоследок, для того чтобы найти в данном фрагменте дерева MIB интересующие нас переменные можно конечно прочитать его целиком, но лучше пользоваться поиском и искать какие то определенные ключевые слова в полях DESCRIPTION. Например, если вас интересует электропитание - то ищите Power (правда можно нарваться на мощность оптического излучения =)) и т.д.


6 коммент.:

Спасибо очень помогли

Всегда пожалуйста! =)

Спасибо! Наглядно, кратко, понятно!

Супер, спасибо огромное!

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

Отправить комментарий