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