/
Tutorial: NMIS8, creación de un nuevo modelo

Tutorial: NMIS8, creación de un nuevo modelo

1. Información general

En este tutorial, lo guiaremos a través de la creación de un nuevo modelo para un dispositivo compatible con NMIS 8 y para agregar una nueva métrica.

Lo que aprenderemos

  • Cómo obtener datos útiles para ser utilizados en el modelo.
  • Cómo implementar un nuevo modelo para un dispositivo Net-SNMP.
  • Agregar una nueva métrica.
  • Añadir un nuevo gráfico.

Lo que necesitarás

  • Nuestro Opmantek Virtual Appliance (VM), el cual puede ser descargado de Opmantek.com

2. Configuración del entorno de trabajo


Si aún no lo has hecho. Descargue nuestro version mas reciente del dispositivo virtual de Opmantek.com

Debe importarlo a su virtualizador de preferencia, ejecutar la VM y obtener la dirección IP asignada.

Para este tutorial, mi servidor de NMIS8 está utilizando 192.168.1.100, tenga en cuenta que esta dirección IP puede ser diferente en su configuración.


Debe acceder a la VM a través de SSH para editar los archivos de configuración, las credenciales predeterminadas para la VM son:


username: root
password: NM1$88


Important

Es importante verificar la sintaxis de los archivos editados, recuerde usar: perl -c filename después de guardar los cambios.

Important

La VM de Opmantek tiene habilitado el SNMPv2c de forma predeterminada, la comunidad utilizada en esta VM es: nmisGig8

Esto se puede verificar en el archivo de configuración snmp que se puede encontrar en /etc/snmpd/snmpd.conf

3.Recopilación de datos para el nuevo modelo y la detección del modelo.

Necesitamos tener todas las MIB estándar (IETF / IEEE) y las MIB específicas del proveedor para el dispositivo a modelar, una vez que tengamos las MIB, la mejor manera de interpretar las MIB es ejecutar un SNMPWALK al dispositivo a modelar, para ello, se primero se debe comprobar que el dispositivo este correctamente configurado.

Usualmente utilizaremos la VM de Opmantek para monitorear los dispositivos de nuestra red, pero por simplicidad, la misma VM se utilizara en este tutorial como el dispositivo a modelar, por lo que tendrá 2 roles, de manera predeterminada, el servidor NMIS se monitorea a si mismo y se puede encontrar como el dispositivo localhost.

Primero, debemos realizar un snmpwalk al dispositivo para obtener todos los datos y la métrica del mismo. Necesitamos la "comunidad" o la contraseña para acceder a esta información con éxito, para la VM de Opmantek, la comunidad es: nmisGig8 y la dirección IP para este ejemplo es 192.168.1.100

El comando debe ejecutarse de la siguiente manera:

snmpwalk -v 2c -c nmisGig8 192.168.1.100 .1

Resultado:

SNMPv2-MIB::sysDescr.0 = STRING: Linux Lab_Master 4.9.0-11-amd64 #1 SMP Debian 4.9.189-3+deb9u2 (2019-11-11) x86_64
SNMPv2-MIB::sysObjectID.0 = OID: NET-SNMP-MIB::netSnmpAgentOIDs.10
DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (166698) 0:27:46.98
SNMPv2-MIB::sysContact.0 = STRING: Root <root@nmis8> (configure /etc/snmp/snmpd.conf)
SNMPv2-MIB::sysName.0 = STRING: Lab_Master
SNMPv2-MIB::sysLocation.0 = STRING: Unknown (edit /etc/snmp/snmpd.conf)
SNMPv2-MIB::sysORLastChange.0 = Timeticks: (7) 0:00:00.07
SNMPv2-MIB::sysORID.1 = OID: SNMP-MPD-MIB::snmpMPDCompliance
SNMPv2-MIB::sysORID.2 = OID: SNMP-USER-BASED-SM-MIB::usmMIBCompliance
SNMPv2-MIB::sysORID.3 = OID: SNMP-FRAMEWORK-MIB::snmpFrameworkMIBCompliance
SNMPv2-MIB::sysORID.4 = OID: SNMPv2-MIB::snmpMIB
SNMPv2-MIB::sysORID.5 = OID: SNMP-VIEW-BASED-ACM-MIB::vacmBasicGroup
SNMPv2-MIB::sysORID.6 = OID: TCP-MIB::tcpMIB
SNMPv2-MIB::sysORID.7 = OID: IP-MIB::ip
SNMPv2-MIB::sysORID.8 = OID: UDP-MIB::udpMIB
SNMPv2-MIB::sysORID.9 = OID: SNMP-NOTIFICATION-MIB::snmpNotifyFullCompliance
SNMPv2-MIB::sysORID.10 = OID: NOTIFICATION-LOG-MIB::notificationLogMIB
SNMPv2-MIB::sysORDescr.1 = STRING: The MIB for Message Processing and Dispatching.
SNMPv2-MIB::sysORDescr.2 = STRING: The management information definitions for the SNMP User-based Security Model.
SNMPv2-MIB::sysORDescr.3 = STRING: The SNMP Management Architecture MIB.
SNMPv2-MIB::sysORDescr.4 = STRING: The MIB module for SNMPv2 entities
SNMPv2-MIB::sysORDescr.5 = STRING: View-based Access Control Model for SNMP.
SNMPv2-MIB::sysORDescr.6 = STRING: The MIB module for managing TCP implementations
SNMPv2-MIB::sysORDescr.7 = STRING: The MIB module for managing IP and ICMP implementations
SNMPv2-MIB::sysORDescr.8 = STRING: The MIB module for managing UDP implementations
SNMPv2-MIB::sysORDescr.9 = STRING: The MIB modules for managing SNMP Notification, plus filtering.
SNMPv2-MIB::sysORDescr.10 = STRING: The MIB module for logging SNMP Notifications.
SNMPv2-MIB::sysORUpTime.1 = Timeticks: (7) 0:00:00.07
SNMPv2-MIB::sysORUpTime.2 = Timeticks: (7) 0:00:00.07
SNMPv2-MIB::sysORUpTime.3 = Timeticks: (7) 0:00:00.07
SNMPv2-MIB::sysORUpTime.4 = Timeticks: (7) 0:00:00.07
SNMPv2-MIB::sysORUpTime.5 = Timeticks: (7) 0:00:00.07
SNMPv2-MIB::sysORUpTime.6 = Timeticks: (7) 0:00:00.07
SNMPv2-MIB::sysORUpTime.7 = Timeticks: (7) 0:00:00.07
SNMPv2-MIB::sysORUpTime.8 = Timeticks: (7) 0:00:00.07
SNMPv2-MIB::sysORUpTime.9 = Timeticks: (7) 0:00:00.07
SNMPv2-MIB::sysORUpTime.10 = Timeticks: (7) 0:00:00.07
IF-MIB::ifNumber.0 = INTEGER: 2
IF-MIB::ifIndex.1 = INTEGER: 1
IF-MIB::ifIndex.2 = INTEGER: 2
IF-MIB::ifDescr.1 = STRING: lo
IF-MIB::ifDescr.2 = STRING: Intel Corporation 82545EM Gigabit Ethernet Controller (Copper)
IF-MIB::ifType.1 = INTEGER: softwareLoopback(24)
IF-MIB::ifType.2 = INTEGER: ethernetCsmacd(6)
IF-MIB::ifMtu.1 = INTEGER: 65536
IF-MIB::ifMtu.2 = INTEGER: 1500
IF-MIB::ifSpeed.1 = Gauge32: 10000000
IF-MIB::ifSpeed.2 = Gauge32: 1000000000
IF-MIB::ifPhysAddress.1 = STRING: 
IF-MIB::ifPhysAddress.2 = STRING: 8:0:27:c4:1f:3f
IF-MIB::ifAdminStatus.1 = INTEGER: up(1)
IF-MIB::ifAdminStatus.2 = INTEGER: up(1)
IF-MIB::ifOperStatus.1 = INTEGER: up(1)
IF-MIB::ifOperStatus.2 = INTEGER: up(1)
IF-MIB::ifLastChange.1 = Timeticks: (0) 0:00:00.00
IF-MIB::ifLastChange.2 = Timeticks: (3927) 0:00:39.27
IF-MIB::ifInOctets.1 = Counter32: 8315005
IF-MIB::ifInOctets.2 = Counter32: 1309639
IF-MIB::ifInUcastPkts.1 = Counter32: 41439
IF-MIB::ifInUcastPkts.2 = Counter32: 15249
IF-MIB::ifInNUcastPkts.1 = Counter32: 0
IF-MIB::ifInNUcastPkts.2 = Counter32: 38
IF-MIB::ifInDiscards.1 = Counter32: 0
--snip--

Info: Para un procesamiento más rápido, puede usar el comando "snmpbulkwalk" en  lugar de "snmpwalk", ya que está optimizado para un mejor rendimiento.


Ahora que sabemos cómo obtener información útil del dispositivo, agreguemos un nuevo modelo de dispositivo a NMIS.

Imaginemos que acabamos de obtener un nuevo servidor Debian 9 (nuestra VM) y necesitamos crear un modelo para este. Para empezar,nos interesa obtener los detalles descritos en SysDescr y SysObjectId.

SNMPv2-MIB::sysDescr.0 = STRING: Linux Lab_Master 4.9.0-11-amd64 #1 SMP Debian 4.9.189-3+deb9u2 (2019-11-11) x86_64
SNMPv2-MIB::sysObjectID.0 = OID: NET-SNMP-MIB::netSnmpAgentOIDs.10

Necesitamos obtener el OID del proveedor del sysObjectID: NET-SNMP-MIB, se puede encontrar usando google. En una búsqueda simple, obtenemos que el OID es: 1.3.6.1.4.1.8072 (https://oidref.com/1.3.6.1.4.1.8072). El código del nodo es: 8072.

El sysDescr: Debian 4.9.189-3 + deb9u2 nos dice que este dispositivo es un Debian 9 con Kernel 4.9.189

En base a esta información, crearemos un modelo.

Primero debemos agregar el Código del nodo a Enterprise.nmis, en este caso el proveedor ya está presente.

/usr/local/nmis8/conf/Enterprise.nmis
  '8071' => {
    'Enterprise' => 'Sandstorm Enterprises, Inc.',
    'OID' => '8071'
  },
  '8072' => {
    'Enterprise' => 'net-snmp',
    'OID' => '8072'
  },
  '8073' => {
    'Enterprise' => 'Lumos Technologies Inc',
    'OID' => '8073'
  },

Luego, actualizamos o agregamos la información relacionada con el dispositivo en /usr/local/nmis8/models/Model.nmis. Usamos la descripción del sysDescr para encontrar el dispositivo que le corresponde.

La sección "net-snmp" en el archivo actualmente se ve así:

/usr/local/nmis8/models/Model.nmis
    'Frogfoot Networks' => {
      'order' => {
        '10' => {
          'Ubiquiti' => 'Linux 2.6.3.'
        },
        '20' => {
          'FrogFoot' => 'Linux'
        }
      }
    },
    'net-snmp' => {
      'order' => {
        '5' => {
          'Checkpoint' => '2.6.18-92cp|2.6.18-92cpx86_64|2.4.21-21cpsmp'
        },
        '10' => {
          'net-snmp' => 'SunOS|Darwin|HP-UX'
        },
        '20' => {
          'net-snmp' => '.'
        }
      }
    },
    'Prime Computer' => {
      'order' => {
        '10' => {
          'net-snmp' => 'Cisco Secure Access Control System'
        }
      }
    },

Agregaremos un nuevo elemento para que coincida con un dispositivo que utiliza el agente net-snmp y tiene un sysDescr que incluye la palabra "Debian". Podríamos ser más específicos y agregar la versión si es necesario, sin embargo, este no es el caso.

Debería verse así ahora:

/usr/local/nmis8/models/Model.nmis
    'Frogfoot Networks' => {
      'order' => {
        '10' => {
          'Ubiquiti' => 'Linux 2.6.3.'
        },
        '20' => {
          'FrogFoot' => 'Linux'
        }
      }
    },
    'net-snmp' => {
      'order' => {
        '5' => {
          'Checkpoint' => '2.6.18-92cp|2.6.18-92cpx86_64|2.4.21-21cpsmp'
        },
        '10' => {
          'net-snmp' => 'SunOS|Darwin|HP-UX'
        },
        '15' => {
          'Debian' => 'Debian'
        },
        '20' => {
          'net-snmp' => '.'
        }
      }
    },
    'Prime Computer' => {
      'order' => {
        '10' => {
          'net-snmp' => 'Cisco Secure Access Control System'
        }
      }
    },

Con estos cambios, nuestro modelo se cargará para el dispositivo.

Ahora probamos si nuestro modelo se ha agregado correctamente y si NMIS lo detecta automáticamente.

En la GUI de NMIS, agregamos el nuevo dispositivo. Ingresamos la comunidad SNMP, IP y un nombre para el dispositivo. Se debe tener en cuenta que el Modelo está seleccionado como "Automático" de forma predeterminada, y lo dejaremos como está.

Hacemos click en "Add and Update" para aplicar los cambios al nuevo nodo. Unos segundos mas trade, NMIS nos mostrara una ventana con los detalles de la operacion ejecutada.

Aquí podemos ver que nuestro modelo ha sido detectado con éxito: