Как расшифровать OID, полученные с помощью команды snmpwalk?

Как настроить мониторинг принтеров с помощью Zabbix, используя SNMP? Я попробовал выполнить команду snmpwalk для одного принтера, и получил множество oid, но не смог определить, что каждый из них означает. Я слышал, что для этого можно использовать mib-файлы. Подскажите, как получить описание oid с их помощью? Также возможно ли так настроить snmpwalk, чтобы сразу отображалось описание oid при выполнении команды?
  • 31 октября 2024 г. 7:03
Ответы на вопрос 3
Чтобы расшифровать OID, полученные с помощью команды `snmpwalk`, вам действительно понадобятся MIB-файлы. MIB (Management Information Base) — это структура данных, которая описывает объекты в сети, доступные для мониторинга и управления через SNMP. Каждый OID связан с определённым объектом, и MIB-файлы содержат описание этих объектов, включая их названия и типы.

### Шаги для работы с MIB-файлами:

1. **Скачивание MIB-файлов**:
   - Вы можете найти MIB-файлы для вашего оборудования на сайте производителя принтера или в общедоступных MIB-библиотеках, таких как [NET-SNMP](http://www.net-snmp.org).
   - Установите MIB-файлы на вашу локальную машину, обычно они находятся в директории, такой как `/usr/share/snmp/mibs` на системах Linux.

2. **Настройка окружения для SNMP**:
   - Убедитесь, что ваш SNMP-клиент (например, snmpwalk) может находить MIB-файлы. Для этого вам нужно указать переменную окружения `MIBS`.
   - В командной строке вы можете установить переменную, выполнив:
     ```bash
     export MIBS=+ALL
     ```
   - Это укажет SNMP-клиенту загружать все доступные MIB-файлы.

3. **Использование `snmpwalk` с MIB-описаниями**:
   - После установки MIB-файлов и настройки окружения, вы можете использовать команду `snmpwalk`, и она будет автоматически расшифровывать OID:
     ```bash
     snmpwalk -v2c -c public <IP-адрес-принтера> .
     ```
   - Операция должна показывать имена объектов вместо OID.

### Настройка мониторинга принтеров с Zabbix через SNMP:

1. **Добавление хоста в Zabbix**:
   - Войдите в веб-интерфейс Zabbix и добавьте новый хост, указав имя и IP-адрес принтера.
   - Убедитесь, что в качестве типа соединения выбран SNMP.

2. **Добавление элементарных данных**:
   - После добавления хоста, нужно создать элементы (items), соответствующие OID, которые вы хотите мониторить (например, уровень тонера, статус принтера и т.д.).
   - Получение OID можно выполнить с помощью `snmpwalk`, а затем добавить соответствующие параметры в Zabbix.

3. **Создание триггеров**:
   - Вы можете создать триггеры для уведомлений, если, например, уровень тонера будет ниже определённого значения, или если принтер отключится.

4. **Мониторинг и отчёты**:
   - Zabbix будет собирать данные с устройств и позволять вам создавать отчёты и графики для анализа состояния принтеров.

### Заключение

Использование MIB-файлов не только сделает ваши OID более читаемыми, но и поможет вам настроить эффективный мониторинг ваших устройств через Zabbix. Убедитесь, что вы правильно настроили SNMP на вашем принтере и что он доступен из сети для вашего Zabbix-сервера.
SNMP MIB файл - это подробное описание каждого SNMP OID в устройстве определённого производителя. 
Поэтому вам надо найти этот SNMP MIB файл, сгенерированный производителем этого принтера.
В нём вы и увидите описание каждого OID, а так же все его параметры и перечисленные вложенные OID-ы.
Можно через MIB, можно использовать online-сервисы, например https://oidref.com 
Например
snmpwalk -v 2c -c public corerouter.my.domain
...
iso.3.6.1.2.1.1.1.0 = STRING: "RouterOS CRS309-1G-8S+"
iso.3.6.1.2.1.1.2.0 = OID: iso.3.6.1.4.1.14988.1
...

Получим описание интересующего OID'а. Естественно, предварительно надо установить пакет со стандартными MIB'ами, в Ubuntu это snmp-mibs-downloader.
snmptranslate -mALL -Td iso.3.6.1.2.1.1.1.0
SNMPv2-MIB::sysDescr.0
sysDescr OBJECT-TYPE
  -- FROM	SNMPv2-MIB, RFC1213-MIB
  -- TEXTUAL CONVENTION DisplayString
  SYNTAX	OCTET STRING (0..255) 
  DISPLAY-HINT	"255a"
  MAX-ACCESS	read-only
  STATUS	current
  DESCRIPTION	"A textual description of the entity.  This value should
            include the full name and version identification of
            the system's hardware type, software operating-system,
            and networking software."
::= { iso(1) org(3) dod(6) internet(1) mgmt(2) mib-2(1) system(1) sysDescr(1) 0 }

snmptranslate -Td -mAll iso.3.6.1.2.1.1.2.0
SNMPv2-MIB::sysObjectID.0
sysObjectID OBJECT-TYPE
  -- FROM	SNMPv2-MIB, RFC1213-MIB
  SYNTAX	OBJECT IDENTIFIER
  MAX-ACCESS	read-only
  STATUS	current
  DESCRIPTION	"The vendor's authoritative identification of the
            network management subsystem contained in the entity.
            This value is allocated within the SMI enterprises
            subtree (1.3.6.1.4.1) and provides an easy and
            unambiguous means for determining `what kind of box' is
            being managed.  For example, if vendor `Flintstones,
            Inc.' was assigned the subtree 1.3.6.1.4.1.424242,
            it could assign the identifier 1.3.6.1.4.1.424242.1.1
            to its `Fred Router'."
::= { iso(1) org(3) dod(6) internet(1) mgmt(2) mib-2(1) system(1) sysObjectID(2) 0 }

Видим, что у микротика есть ещё свой enterprise-блок с кодом 14988, в котором находятся специфичные для него OID'ы. Если скачать MIB для микротика (в папку ~/.snmp/mibs), то в нём увидим строку
mikrotik OBJECT IDENTIFIER ::= { enterprises 14988 }
.
Получим OID'ы микротика
snmpwalk -v 2c -c public corerouter.my.domain 1.3.6.1.4.1.14988
...
iso.3.6.1.4.1.14988.1.1.3.100.1.2.17 = STRING: "cpu-temperature"
iso.3.6.1.4.1.14988.1.1.3.100.1.3.17 = INTEGER: 22
iso.3.6.1.4.1.14988.1.1.3.100.1.4.17 = INTEGER: 1
...

snmptranslate -mAll iso.3.6.1.4.1.14988.1.1.3.100.1.2.17
MIKROTIK-MIB::mtxrGaugeName.17

snmptranslate -mAll iso.3.6.1.4.1.14988.1.1.3.100.1.3.17
MIKROTIK-MIB::mtxrGaugeValue.17

snmptranslate -Td -mAll iso.3.6.1.4.1.14988.1.1.3.100.1.4.17
MIKROTIK-MIB::mtxrGaugeUnit.17
mtxrGaugeUnit OBJECT-TYPE
  -- FROM	MIKROTIK-MIB
  SYNTAX	INTEGER {celsius(1), rpm(2), dV(3), dA(4), dW(5), status(6)} 
  MAX-ACCESS	read-only
  STATUS	current
  DESCRIPTION	"units"
::= { iso(1) org(3) dod(6) internet(1) private(4) enterprises(1) mikrotik(14988) mikrotikExperimentalModule(1) mtXRouterOs(1) mtxrHealth(3) mtxrGaugeTable(100) mtxrGaugeTableEntry(1) mtxrGaugeUnit(4) 17 }

Видим, что под OID'ом 1.3.6.1.4.1.14988.1.1.3.100.1.3.17 находится температура процессора (mtxrGaugeName = cpu-temperature) в градусах цельсия (mtxrGaugeUnit = 1) и сейчас она равна 22 градусам (mtxrGaugeValue = 17).
Похожие вопросы