A la hora de monitorizar vía SNMP hay que verificar si la herramienta que estamos utilizando permite cargar la información a través del archivo MIB (Base de Información Gestionada) o si por el contrario requiere especificar el OID (Identificador de Objeto) del objeto a monitorizar.
Si permite cargar el archivo MIB, perfecto. Si no es así, tendremos que averiguar como extraer el OID de cada objeto a partir del MIB. Para ello, el propio paquete snmpd en sistemas GNU/Linux ofrece herramientas y comandos para facilitar la tarea.
El comando que vamos a utilizar para realizar la conversión es snmptranslate
. Para hacer el trabajo más cómodo, lo primero que hacemos es copiar el archivo MIB a una de las rutas en las que snmpd cargará automátimente el archivo.
/usr/share/snmp/mibs/ $HOME/.snmp/mibs [...]
En este caso he copiado el archivo STREAMLINE-TAPE-LIBRARY-MIB.txt
y el objeto del cual necesito averiguar el OID es slFanTable
:
slFanTable OBJECT-TYPE SYNTAX SEQUENCE OF SLFanEntry MAX-ACCESS not-accessible STATUS current DESCRIPTION "A table of the library's fans" ::= { slPhysHardware 6 }
Ejecutando snmptranslate con los siguientes parámetros se visualiza el OID del objeto:
$ snmptranslate -m +STREAMLINE-TAPE-LIBRARY-MIB -On -IR slFanCount .1.3.6.1.4.1.1211.1.15.4.5
En la página man de snmptranslate encontraréis muchos más ejemplos con mucha utilidad para la gestión de archivos MIB:
$ snmptranslate -On -IR sysDescr will translate "sysDescr" to a more qualified form: system.sysDescr $ snmptranslate -Onf -IR sysDescr .iso.org.dod.internet.mgmt.mib-2.system.sysDescr $ snmptranslate -Td -OS system.sysDescr SNMPv2-MIB::sysDescr sysDescr OBJECT-TYPE -- FROM SNMPv2-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." ::= { system(1) 1 } $ snmptranslate -Tp -OS system +--system(1) | +-- -R-- String sysDescr(1) | Textual Convention: DisplayString | Size: 0..255 +-- -R-- ObjID sysObjectID(2) +-- -R-- TimeTicks sysUpTime(3) +-- -RW- String sysContact(4) | Textual Convention: DisplayString | Size: 0..255 +-- -RW- String sysName(5) | Textual Convention: DisplayString | Size: 0..255 +-- -RW- String sysLocation(6) | Textual Convention: DisplayString | Size: 0..255 +-- -R-- Integer sysServices(7) +-- -R-- TimeTicks sysORLastChange(8) | Textual Convention: TimeStamp | +--sysORTable(9) | +--sysOREntry(1) | +-- ---- Integer sysORIndex(1) +-- -R-- ObjID sysORID(2) +-- -R-- String sysORDescr(3) | Textual Convention: DisplayString | Size: 0..255 +-- -R-- TimeTicks sysORUpTime(4) Textual Convention: TimeStamp $ snmptranslate -Ta | head dump DEFINITIONS ::= BEGIN org ::= { iso 3 } dod ::= { org 6 } internet ::= { dod 1 } directory ::= { internet 1 } mgmt ::= { internet 2 } experimental ::= { internet 3 } private ::= { internet 4 } security ::= { internet 5 } snmpV2 ::= { internet 6 } $ snmptranslate -Tl | head will produce the following dump: .org(3) .dod(6) .internet(1) .directory(1) .mgmt(2) .mib-2(1) .system(1) .sysDescr(1) .sysObjectID(2) .sysUpTime(3) $ snmptranslate -To | head .1.3 .1.3.6 .1.3.6.1 .1.3.6.1.1 .1.3.6.1.2 .1.3.6.1.2.1 .1.3.6.1.2.1.1 .1.3.6.1.2.1.1.1 .1.3.6.1.2.1.1.2 .1.3.6.1.2.1.1.3 $ snmptranslate -Ts | head .iso.org .iso.org.dod .iso.org.dod.internet .iso.org.dod.internet.directory .iso.org.dod.internet.mgmt .iso.org.dod.internet.mgmt.mib-2 .iso.org.dod.internet.mgmt.mib-2.system .iso.org.dod.internet.mgmt.mib-2.system.sysDescr .iso.org.dod.internet.mgmt.mib-2.system.sysObjectID .iso.org.dod.internet.mgmt.mib-2.system.sysUpTime $ snmptranslate -Tt | head org(3) type=0 dod(6) type=0 internet(1) type=0 directory(1) type=0 mgmt(2) type=0 mib-2(1) type=0 system(1) type=0 sysDescr(1) type=2 tc=4 hint=255a sysObjectID(2) type=1 sysUpTime(3) type=8