Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Table of Contents

1- Introducción al modelado en NMIS 8

Arquitectura de NMIS 8

Se accede a la información de los nodos utilizando daemons o pollers que forman parte del sistema de poleo. La información obtenida en este nivel podría ser ICMP (Protocolo de mensajes de control de Internet), SNMP (Protocolo simple de administración de redes), etc.

...

En el nivel de la interfaz de usuario, Network.pl realiza la mayor parte del trabajo pesado, que carga el sistema de abstracción y los datos para producir las vistas, el tablero y todo lo que se muestra al usuario de manera significativa y útil.

Proceso de Modelado

Tipos de archivos de modelo

Estos son los archivos con los que debemos familiarizarnos para poder seguir con éxito el proceso de modelado.

...

nodename-node.json y nodename-node.json: para cada nodo se genera y mantiene un nodo y un archivo de vista después de un ciclo de sondeo (Actualizar y recopilar). Contiene información de nodo en caché de SNMP MIBS y otros datos derivados, los datos que contiene se conservan temporalmente. El archivo de vista son datos que se mostrarán al presentar la interfaz de usuario.


Visión general

1. Recopilación de datos del dispositivo

El primer paso es recopilar datos del dispositivo, sysDescr (Descripción del sistema) y SysObjectId (Identificación del dispositivo por parte del proveedor). NMIS realiza un SNMP GET en la ruta y obtiene el sysDescr y el SysObjectId.

...

Code Block
languagetext
'sysDescr' => 'Hardware: Intel64 Family 6 Model 15 Stepping 6 AT/AT COMPATIBLE - Software: Windows Version 6.1 (Build 7600 Multiprocessor Free)'
'sysObjectID' => '1.3.6.1.4.1.311.1.1.3.1.1'

2. Determinar el fabricante

Se debe hacer una comparación entre el sysObjectID obtenido y el listado de proveedor definidas en Enterprise.nmis, el OID 311 devolverá el valor "Enterprise", en este caso particular, es 'Microsoft'.

...

Code Block
languagetext
titleconf/Enterprise.nmis
'311' => {
 'OID' => '311',
 'Enterprise' => 'Microsoft'  
},

3. Modelo de autodescubrimiento

Para obtener el modelo a cargar, se debe realizar un proceso de coincidencia en el archivo Model.nmis. El nombre del proveedor obtenido del paso anterior se usa para encontrar la sección que coincide con su valor, una vez que tengamos la sección que se usará, se realizará una expresión regular para que coincida el valor de cada artículo en esa sección con el sysDescr, este proceso debe hacerse en orden ascendente numérico.
En este ejemplo, el nombre del proveedor coincidirá con la sección "Microsoft" en el archivo Model.nmis, luego, buscará una coincidencia en orden, a partir de 10, intentará identificar si el valor 'Windows Versión 5.2' esta incluido en el sysDescr. Seguirá buscando hasta que se encuentre una coincidencia. En este caso, 'Windows Versión 6.1' es una coincidencia, por lo que el modelo a cargar está configurado en: 'Windows2008'.

Code Block
languagetext
titlemodels/Model.nmis
'Microsoft' => {
  'order' => {
    '30' => {
      'Windows2000' => 'Windows 2000 Version 5.0'
    },
    '10' => {
      'Windows2003' => 'Windows Version 5.2'
    },
    '20' => {
      'Windows2008' => 'Windows Version 6.1'
    }
  }
},

4. Cargar el modelo

El modelo obtenido del archivo Model.nmis sera cargado, para ello se buscara el modelo correspondiente, el nombre de archivo del modelo debe comenzar con "Model-" seguido del nombre del modelo como se especifica en Model.nmis y con la extensión ".nmis". En nuestro ejemplo, el modelo a utilizar es 'Windows2008', por lo que el archivo debe llamarse: Model-Windows2008.nmis

...

Code Block
languagetext
titlemodels/Model-Windows2008.nmis
'system' => {
  --snip--
},
'systemHealth' => {
  --snip--
},
'interface' => {
  --snip--
},
'device' => {
  --snip--
},

5. Cargando los datos

Uses this model to collect device specific information from the device or to load the cached data from nmis8/var. If there is no file on the var directory for the device, NMIS will start collecting SNMP data from the device.
This process happens every time when dealing with the devices. When using the GUI, the model will be loaded with no SNMP enabled, however, when using NMIS.pl the model will be loaded with SNMP enabled.

Se utiliza este modelo para recopilar información específica del dispositivo desde el dispositivo o para cargar los datos en caché de nmis8/var. Si no hay ningún archivo en el directorio "var" para el dispositivo, NMIS comenzará a recopilar datos SNMP del dispositivo.
Este proceso ocurre cada vez que se trabaja con los dispositivos. Cuando se utiliza GUI, el modelo se cargará sin SNMP habilitado, sin embargo, cuando use NMIS.pl, el modelo se cargará con SNMP habilitado.

Estructura del modelo

Modelos Comunes

Modelado de un dispositivo

Objetivo del modelado

¿Cuál es el objetivo para el modelado?, ¿Solo se requiere soporte de tipo estándar, o la recopilación más avanzada de datos del dispositivo?, ¿Desea recopilar algunos datos de rendimiento sobre cómo funciona un protocolo, o verificar la cantidad de sesiones que ejecuta un firewall?

A veces se puede encontrar el MIB  del dispositivo en la documentación o en un documento técnico por parte del proveedor, pero a veces es muy difícil determinar dónde se almacenan los datos necesarios. Si es posible, pregunte a un experto en productos que esté familiarizado con ese producto específico.

Instrumentación de dispositivo

Otras veces, la gente quiere graficar la utilización del CPU y la Memoria, pero no todos los dispositivos admiten la recopilación de esta información, solo puede pedirle a NMIS que recopile algo para lo que el dispositivo tiene la instrumentación, las MIB del dispositivo deben mostrarnos si es posible.

Relevancia de la instrumentación

Para los enrutadores Cisco, es muy útil monitorear la carga del CPU, es una excelente métrica de cómo funciona el dispositivo, sin embargo, en algunos dispositivos Cisco más nuevos, el procesamiento se distribuye y se realiza en hardware, por lo que la carga del CPU sigue siendo útil, pero puede no estar proporcionando la información que necesita.

Verifique la operación de MIB

Ahora ya sabe lo que desea recopilar y monitorear, se debe verificar que la MIB funciona de manera correcta, tal como lo dice la documentación y verifique que funciona de la manera que usted cree que lo hace.

Qué necesitamos

Acceso al dispositivo

Puede modelar un dispositivo sin tener acceso a uno, pero es REALMENTE COMPLICADO, tener acceso de solo lectura SNMP al dispositivo es vital para realizar el modelado con éxito.

SNMP MIBS

Deberá tener todas las MIB estándar (IETF / IEEE) necesarias y las MIB específicas del proveedor para el dispositivo que se va a modelar.


SNMPWALK (SNMP Dump)

Una vez que tenga las MIB, la mejor manera de interpretar las MIB es completar un SNMPWALK del dispositivo, primero verifique que puede usar SNMP para acceder al dispositivo.

...

Code Block
languagetext
snmpwalk -m ALL -M ~/mibs -v 2c -c GOODCOMMUNITY > snmp_dump.txt
Ejemplo de MIB Decoding 

Tomemos este ejemplo, aquí snmpwalk no pudo encontrar el archivo MIB adecuado para traducir los datos SNMP devueltos desde el dispositivo. En este ejemplo, estamos interesados en los últimos tres elementos.

...

Code Block
languagetext
titleSNMPv2-SMI::enterprises.6302.2.1.2 → SNMPv2-SMI::enterprises.ees.global.powerMIB.system
system OBJECT IDENTIFIER ::= { powerMIB 2 }
systemVoltage OBJECT-TYPE
	SYNTAX Integer32
	MAX-ACCESS read-only
	STATUS current
	DESCRIPTION "
		System voltage, stored as mV, including positive or negative
		sign. The integer 2147483647 represents invalid value."
	::= { system 2 }

systemCurrent OBJECT-TYPE
	SYNTAX Integer32
	MAX-ACCESS read-only
	STATUS current
	DESCRIPTION "
		System current, stored as mA, including positive or negative
		sign. The integer 2147483647 represents invalid value."
	::= { system 3 }

systemUsedCapacity OBJECT-TYPE
	SYNTAX Integer32
	MAX-ACCESS read-only
	STATUS current
	DESCRIPTION "
		Used capacity, stored as % of the total capacity.
		The integer 2147483647 represents invalid value."
	::= { system 4 }
Árbol MIB para los tres componentes.

Aquí tenemos una representación gráfica de cómo se descomponen los componentes del MIB.

2- Implementación de un nuevo dispositivo (I)

Agregar Modelos propios a NMIS

Como parte de esta capacitación, vamos a implementar nuestro propio modelo juntos, paso a paso, para comprender mejor cómo se realiza el proceso. Ahora que sabemos cómo decodificar una MIB y obtener los datos que necesitamos incorporar al modelo usando snmpwalk, agreguemos un nuevo modelo de dispositivo a NMIS.

...

Tip: Muchos dispositivos ahora usan NET-SNMP como Agente, por ende, es una buena idea copiar un modelo existente y adaptarlo a nuestras necesidades en lugar de crear uno nuevo.

Agregar una nueva métrica al Node Health

Hasta ahora, hemos podido crear nuestro nuevo modelo, ahora es el momento de incorporar nuevas métricas. Es muy común y útil mostrar métricas en Node Health (estado del nodo). Digamos que tenemos un enrutador Cisco y es capaz de proporcionar la cantidad de rutas que ve el enrutador, para simplificar las cosas, vamos a editar un modelo existente para dispositivos Cisco. Como sabemos, se necesita un MIB dump; se puede obtener ejecutando SNMPWALK contra el dispositivo, ya que ahora solo nos interesa la cantidad de rutas, nos centraremos en estos 2 elementos:

...

Code Block
languagetext
titlemodels/Model-CiscoRouter.nmis
--snip--
  'system' => {
    'nodeModel' => 'CiscoRouter',
    'nodeType' => 'router',
    'nodegraph' => 'health,response,cpu,mem-router,ip,frag,buffer,modem,calls',
    'rrd' => {
      'nodehealth' => {
        'threshold' => 'cpu,mem-proc',
        'graphtype' => 'buffer,cpu,mem-io,mem-proc,mem-router’ ,
        'snmp' => {
          'avgBusy5' => {
            'oid' => 'avgBusy5'
          },
          --snip--
          'RouteNumber' => {
	         'snmpObject' => 'ipCidrRouteNumber'
             'oid' => '1.3.6.1.2.1.4.24.3'
	        }
        },
      },
--snip--

Introduction a las gráficas en NMIS

Las gráficas en NMIS son generadas por RRD (Round Robin Database). Los ficheros de definiciones de gráficos son parámetros que después se pasan como parámetros a RRD para la generación del grafico. En la operación collect en NMIS, se recolectan los datos que después RRD va a utilizar para mostrar los datos.

...

Utilizan notación NPR - Notación Polaca Inversa. 

Personalizar las gráficas y sus elementos

En esta etapa también agregamos el nombre del gráfico, hemos decidido que nuestro gráfico se llamará "routenumber", por lo que lo agregamos al tipo de gráfico ("system -> rrd -> nodehealth -> graphtype"), ahora el modelo conoce el nombre del gráfico a utilizar. De la misma manera, necesitamos decirle al modelo que se debe mostrar el gráfico, para eso; agregamos el nombre del gráfico a "nodegraph" ("system -> nodegraph"). Las métricas se mostrarán manteniendo el mismo orden especificado en el "nodegraph", en este caso el gráfico se mostrará en la parte inferior, ya que lo agregamos al final de la lista, podemos cambiar el orden según sea necesario.

...

Básicamente, el gráfico se define en función del sistema de gráficos de la herramienta RRD y puede encontrar información adicional y mayores opciones aquí: https://oss.oetiker.ch/rrdtool/doc/rrdgraph.en.html

3- Implementación de un nuevo dispositivo (II)

System Section

Hemos agregado una nueva métrica a la sección nodeHealth, pero a veces necesitamos agregar nuevos conceptos al modelo de dispositivo y crear sus propios archivos RRD.

...

Así es como se ve la versión estándar:

Sección "SystemHealth" (Indexes)

Often a section of data that is useful to have displayed in NMIS is presented in SNMP as a table. In order to model this NMIS modelling supports a "systemHealth" section that allows indexing to be used.

...

Aquí tenemos una construcción de tabla SNMP estándar. Para cada disco que tenemos, hay un índice asignado y cada disco tendrá "diskIOIndex, diskIODevice, diskIONRead, etc.".

Archivo del modelo

La sección "systemHealth" es una sección "top-level", lo que significa que no esta agregada a ninguna otra sección.

...

En este ejemplo se usa "diskIOTable" .

sección sys

En el fragmento de código anterior vemos la sección 'sys', aquí es donde se definen los datos que se almacenarán en el archivo Nodename-node.nmis. También se definen los datos necesarios para recopilar la sección RRD. Si desea ver el último valor reunido por NMIS para estos MIBS, se debe revisar Nodename-node.nmis para el nodo. Los valores definidos dentro de la sección snmp se hacen de la misma manera como se ha hecho en otras partes del modelo.

...

Code Block
languagetext
'index_regex' => '\.(\d+\.\d+\.\d+)$',


sección rrd

La sección RRD define qué datos se recogen y almacenan en los RRDs. Una vez más, los valores definidos dentro de la sección snmp son como en cualquier otra parte del modelo.

...

  1. 'control' => 'CVAR=diskIODevice;$CVAR =~ /sda|sr|disk|xvda|dm\-/', 
    Esto le dice a NMIS que el OID diskIODevice debe ser revisado y sólo capturar los valores en RRD si coinciden con la expresión regular determinada.
  2. indexed => 'true', 
    Tell NMIS this is an indexed table, it will then go and use the index specified in the sys section above to iterate.
    Le dice a NMIS que esta es una tabla indexada, para luego utilizar  el índice especificado en la sección "sys" anterior para iterar.

  3. graphtype => 'diskio-rw,diskio-rwbytes' 
    Lista los graph-types associados al los RRD's para ser graficados.

  4. snmp => 'diskio-rw,diskio-rwbytes' 
    Nombra los elementos que serán colectados.
    4.a oid  Puede ser un nombre de la lista de nmis_mibs.oid o un OID.
    4.b option  Indica si la data obtenida es del tipo "counter" o "indicador" y los limites superiores e inferiores.
           e.g: 'option' => 'counter,0:U' 
    4.c title  Titulo a mostrar.

Common-heading.nmis

Estos son los encabezados que verá cuando muestre el gráfico en varias pantallas en NMIS. Si no está definido, verá un mensaje como este: "heading not defined in Model".

Code Block
languagetext
'diskio-rw' => 'Disk IO Blocks',      
'diskio-rwbytes' => 'Disk Read Write Bytes'

Common-database.nmis

El nombre del rrd se especifica en este archivo. Se pude crear un nuevo set de archivos rrds para esta nueva sección, para hacerlo simplemente se debe agregar una nueva línea en el common-database.

...

Como puede ver, el nombre del archivo tiene $index en el nombre, por lo que NMIS creará un nuevo archivo para cada índice que esté recopilando utilizando esta variable.

Gráficas en la sección SystemHealth

Graph-diskio-rw.nmis y Graph-diskio-rwbytes.nmis 

Estos son los archivos utilizados para definir los gráficos. Definimos el "DEF" de RRD en función de lo que almacenó, definimos la LÍNEA o ÁREA a graficar, usamos algunos GPRINTS para la salida de texto y otra sintaxis de RRD para lograr el gráfico deseado.

...

Una vez realizado todo este procedimiento, las nuevas secciones aparecerán en el menú desplegable "System Health".


Personalizando las Gráficas

Estos son alguno de los valores disponibles en RRD para personalizar las gráficas;

Nombre

Formato

PRINT

vname:format[:strftime|:valstrftime|:valstrfduration]

GPRINT

vname:format

COMMENT

Text

LINE

[width]:value[#color][:[legend][:STACK][:skipscale][:dashes[=on_s[,off_s[,on_s,off_s]...]][:dash-offset=offset]]]

AREA

value[#color][:[legend][:STACK][:skipscale]]

TICK

vname#rrggbb[aa][:fraction[:legend]]

TEXTALIGN

:{left|right|justified|center}

SHIFT

vname:offset

4- Implementación de Umbrales y Alertas

Introduction al Thresholding

NMIS8 incluye potentes funciones para el rendimiento y umbral operativo, que mejoran en gran medida las facultades de gestión de la red. Estos umbrales o  thresholds dan como resultado alertas / eventos / notificaciones que NMIS puede enviar cuando ve cumpla sobrepase algún limite establecido. Los umbrales tienen controles muy granulares que, por defecto, se han configurado de manera bastante amplia.

Consideraciones e implementación de Umbrales

Consideraciones

El threshold se puede conseguir con los siguientes pasos:

...

  • ¿Qué tan factible seria el aplicar un threshold al elemento necesario?
  • ¿Se pueden reducir / traducir / combinar las métricas en un threshold significativo?
  • ¿Cuál debería ser el nombre del evento correspondiente para el threshold?
  • El nombre del evento debe incluir "Proactive" al principio para que NMIS lo procese correctamente. ejm: "Proactive Temp" or Proactive CPU Load".

Implementación

Para implementar el threshold, primero tenemos que agregar la propiedad del threshold a la sección del modelo, en este caso la llamamos "env_temp", en el siguiente paso usaremos este nombre para vincular el modelo con el Common-threshold.nmis y  Common-stats.nmis.

...

Para probarlo, ejecutamos "nmis.pl type=thresholds", y verificamos que los eventos se hayan creado. Después de eso, restablecemos el valor a su estado anterior, ejecutándose una vez más "nmis.pl type=thresholds", el evento debería cerrarse ahora.

Standard Thresholds (Comunes)

NMIS incluye un conjunto de thresholds estándar que se asocian comúnmente a algunos proveedores. Este es un resumen de estos thresholds.

...

Nombre del ThresholdEventoProveedor
availableProactive Interface AvailabilityCommon for all Vendors
calls_utilProactive Calls UtilisationCisco
ccpuProactive CPUCisco
cpuProactive CPUCisco (the most common for Cisco devices)
cpuUtilProactive CPUAlcatel, Zyxel
cpu_cpmProactive CPUCisco
env_tempProactive TempCisco, Zyxel
hrsmpcpuProactive CPUMicrosoft
jnx_bufferProactive Buffer UtilisationJuniper
jnx_cpuProactive CPUJuniper
jnx_heapProactive Heap UtilisationJuniper
jnx_tempProactive TempJuniper
mem-procProactive Memory FreeCisco
memUtilProactive Memory UtilisationAlcatel, Zyxel
modem_deadProactive Dead ModemCisco
modem_unavProactive Modem UtilisationCisco
pkt_discards_inProactive Interface Discards Input PacketsCommon for all Vendors
pkt_discards_outProactive Interface Discards Output PacketsCommon for all Vendors
pkt_errors_inProactive Interface Error Input PacketsCommon for all Vendors
pkt_errors_outProactive Interface Error Output PacketsCommon for all Vendors
reachableProactive ReachabilityCommon for all Vendors
responseProactive Response TimeCommon for all Vendors
ssCpuRawIdleProactive CPU IO Idlenet-snmp (Linux, Solaris, etc)
ssCpuRawSystemProactive CPU IO Systemnet-snmp (Linux, Solaris, etc)
ssCpuRawUserProactive CPU IO Usernet-snmp (Linux, Solaris, etc)
ssCpuRawWaitProactive CPU IO Waitnet-snmp (Linux, Solaris, etc)
util_inProactive Interface Input UtilisationCommon for all Vendors
util_outProactive Interface Output UtilisationCommon for all Vendors

Crear Thresholds (Detallado)

Archivos

Los archivos que deben de ser modificados son:

  • /usr/local/nmis8/models/Model-Some-switch.nmis
  • /usr/local/nmis8/models/Common-database.nmis
  • /usr/local/nmis8/models/Common-header.nmis
  • /usr/local/nmis8/models/Common-stats.nmis
  • /usr/local/mmis8/models/Common-threshold.nmis

Relación

Relación de los archivos entre sí, puede ser útil visualizar cómo interactúan.


Atributos Comunes

Hay varios atributos comunes que deben coincidir entre estos archivos para que el threshold funcione adecuadamente. En un intento por demostrar la relación entre estas variables, utilizaremos las siguientes etiquetas. 

...

### Model-Some-Switch.nmis

%hash = (

'systemHealth' => {

'rrd' => {

'<charlie>' => {

'graphtype' => '<bravo>',

'indexed' => 'true',

'threshold' => '<alpha>'

'snmp' => {

'<delta>' => {

'oid' => 'hrProcessorLoad',

'option' => 'gauge,0:U'

}

}

}

}

}

)

### Common-threshold.nmis

%hash = (

'threshold' => {

'name' => {

'<alpha>' => {

'item' => '<echo>',

'event' => 'Proactive CPU',

'select' => {

'default' => {

'value' => {

'fatal' => '90'

'critical' => '80',

'major' => '70',

'minor' => '60',

'warning' => '50'

}

}

}

}

}

}

)

### Common-database.nmis

'<charlie>' => '/nodes/$node/health/<charlie>-$index.rrd',

### Common-stats.nmis

%hash = (

'stats' => {

'type' => {

'<charlie>' => {

'DEF:<echo>=$database:<delta>:AVERAGE',

'PRINT:<echo>:AVERAGE:<echo>=%1.0f',

}

}

}

)

### Common-heading.nmis

'<bravo>' => 'Processor Load',

5. Implementación de umbrales de NMIS (II)

Thresholds Simples y Avanzados

Thresholds Simples

En NMIS, un threshold simple se define de la siguiente manera:

...

Code Block
languagetext
'cpu' => {
  'item' => 'avgBusy5min',
  'event' => 'Proactive CPU',
  'select' => {
    'default' => {
      'value' => {
        'critical' => '70',
        'fatal' => '80',
        'minor' => '50',
        'warning' => '40',
        'major' => '60'
      }
    }
  }
}, 

Set de limites para el  thresholds del "Core CPU"

Sin embargo, los Core Devices son más sensibles a la carga de la CPU. Por lo tanto, queremos usar un conjunto diferente de valores en el threshold. Algo como:

...

Pero, ¿cómo hacer que esto solo se aplique a los Core Devices?

Controles Avanzados en el Thresholding

Por ejemplo, diferentes thresholds para Core Devices. Revisar en Common-thresholds le dará algunas idea de como se aplican, pero se pueden agregar muchas "selecciones" y tener propiedades como:

...

Estos se ejecutan en el orden definido en la sección "select" y  si no existe una coincidencia en el control,  se utilizara el threshold por default.

Opciones de control avanzado

Las siguientes son las opciones de control disponibles:

...

  • $hrStorageDescr
  • $hrStorageType
  • $hrStorageUnits (disk block size)
  • $hrStorageSize (disk size in blocks)
  • $hrStorageUsed (disk used in blocks)
  • $hrDiskSize (disk size in bytes, hrStorageSize * hrStorageUnits)
  • $hrDiskUsed (disk used in bytes, hrStorageUsed * hrStorageUnits)
  • $hrDiskFree (disk free in bytes)

Ejemplos de Controles

Los controles son pequeñas piezas de código que se evaluarán cuando sea necesario, por lo que es posible que desee hacer alguno de los siguientes.

Resultado

Control

Usar este threshold si la velocidad de la interface se encuentra entre 1 y 5 megabits/segundo

$ifSpeed <= 50000 and $ifSpeed >= 10000

Usar este threshold si la velocidad de la interface es de 100 megabits

$ifSpeed == 100000000

Usar este threshold si la velocidad de la interface es de 10 megabits

$ifSpeed == 10000000

Usar este threshold si la velocidad de la interface es de 1 gigabits

$ifSpeed == 1000000000

Usar este threshold si el tamaño del disco es mayor a 100 gigaytes

$hrDiskSize >= 104857600000

Usar este threshold para todos los dispositivos con dirección IP 192.168

$host =~ /192\.168/

Usar este threshold para todos los dispositivos en el grupo "Sales"

$group eq "Sales"

Usar este threshold para todos los dispositivos Cisco IOS

$sysDescr =~ /Cisco IOS/


Alertas Básicas

Una alerta es un evento personalizado generado al testear el valor de una OID o de una variable personalizada y producir un resultado booleano (verdadero o falso). Si el test devuelve "verdadero", se genera un evento y se ejecutará a través del sistema de escalado, falso no generará una alerta. Más tarde, cuando el test que resulto en "verdadero",  devuelve ahora "falso", el evento se cerrara.

...

test => La operación booleana usando $r para determinar si la alerta debe ser generada.
event => Nombre que se le dará al evento cuando se genere.
level =>  Nivel de prioridad que se le dará al evento cuando se genere.

Test

Esta puede ser cualquier expresión en Perl, y su resultado de evaluación se interpretará tal como perl procesa booleanos (es decir, un string vacío, 0 y undef significa falso, cualquier otra cosa significa verdadero).

...

Una nota rápida sobre la comparación numérica versus la comparación textual: en modo numérico, las expresiones se convertirán en números (es decir, el texto "0003" se convierte en el número 3 para la comparación). En modo textual, los caracteres de las expresiones se comparan uno por uno. Si $r es "0003", $r == 3 es verdadero, pero $ r eq 3 es falso.

¿Dónde agregar la alerta?

La alerta se puede agregar a las variables actuales que se están poleando desde los dispositivos, o se puede agregar una nueva sección. Por ejemplo, se podría agregar una nueva sección en Model-> system-> sys que podría verse como en el siguiente ejemplo ("--snip--" indica que se ha eliminado parte del código del modelo irrelevante para el ejemplo para mayor claridad):

...

Al agregar la alerta también se agrega la información al panel "Device Details", para que se muestre el último valor obtenido todo el tiempo. Se debe tener en cuenta que cuando agrega una alerta así de básica, su variable se recopila independientemente de cualquier otra variable que pueda recopilar el modelo.

Ejemplo

The following is an example of the layout of an alert (in this example serialNum is taken from Model-CiscoRouter.nmis) and uses a string based (stringwise) comparison:

...

Code Block
languagetext
'cipSecGlobalActiveTunnels' => {
  'oid' => 'cipSecGlobalActiveTunnels',
  'title' => 'Global Active Tunnels',
  'alert' => {
    'test' => '$r == 0',
    'event' => 'No tunnels present',
    'level' => 'Critical'
  }
}

Alertas más avanzadas

Las alertas también se pueden crear en la sección 'alerts' del modelo. los permisos creados en esta sección tienen la ventaja de poder usar valores de una sección completa de datos para determinar si la alerta debe activarse o no; sin embargo, tales alertas NO pueden acceder a las variables colectadas/modeladas en la sección 'system' y, como tales, son principalmente útiles para el modelado de systemHealth.

...

  • 'value' => 'CVAR1=hrSWRunPerfMem;$CVAR1 * 1': Define como el valor que activa la alerta debe ser reportado y mostrado en la GUI.
  • 'unit' => 'KBytes': La unidad con la que se mostrará el valor anterior.
  • 'element' => 'hrSWRunName': El OID / valor que genera la alerta, un descriptor o identificador. En este caso, muestra el nombre del proceso que tiene un uso elevado de memoria.
  • 'event' => 'High Process Memory Usage': Establece el nombre del evento generado por la alerta.
  • 'level' => 'Warning': Nivel con el que se activará el evento. Cuando se usa thresholding, esto no se aplica ya que el propio threshold definen el nivel.

Variables personalizadas

Tenga en cuenta que en las versiones de NMIS anteriores a 8.6 solo se puede usar una variable personalizada en el test expression conocida como CVAR. Esta limitación se ha eliminado en NMIS 8.6, esta limitación nunca se aplicó a las expresiones de valor o control.

...

CVAR2=ifAlias; "$CVAR2" =~ /some description/ 

Depurando un Threshold

Veamos un ejemplo:

./nmis.pl type=threshold debug=1 node=thor

Code Block
22:51:26 init, info of node=thor loaded
22:51:26 init, no loading of cfg of node=thor
22:51:26 init, loading model Model-net-snmp for node thor
22:51:26 loadModel, INFO, model Model-net-snmp loaded (from cache)
22:51:26 doThreshold, Starting Thresholding node=thor
22:51:26 runThrHld, WORKING ON Threshold for thrname=response,reachable,available type=health item=
22:51:26 runThrHld, Found Configured Threshold for health, changing to "-4 hours"
22:51:26 getSummaryStats, Start type=health, index=, start=-4 hours, end=now
22:51:26 getFileName, filename of type=health is /data/database8/nodes/thor/health/reach.rrd
22:51:26 getDBName, returning database name=/data/database8/nodes/thor/health/reach.rrd for sect=health, index=, item=
22:51:26 runThrHld, processing threshold response
22:51:26 getThresholdLevel, Start threshold=response, index= item=
22:51:26 getThresholdLevel, found threshold=response entry=default
22:51:26 getThresholdLevel, threshold=response, item=response, value=0.01
22:51:26 getThresholdLevel, result threshold=response, level=Normal, value=0.01, thrvalue=150, reset=150
22:51:26 thresholdProcess, Proactive Response Time, Normal, , value=0.01 reset=150

Threshold y escalados

Las alertas y los umbrales generan eventos que tienen un estado: Este evento esta abierto hasta que la alerta o el umbral vuelve a un valor dentro de los limites. 

...

Las acciones se configuran en System > System Configuration > Escalations. Aqui es donde NMIS va a ver que debería de ocurrir cuando un evento se lanza y como se va a tratar en el tiempo. 

6. Conceptos Adicionales

Thresholding VS Alertas

Una alerta es un evento personalizado generado por un test que evalúa un OID o una variable y produce un resultado verdadero o falso.

Si el test devuelve verdadero, se genera un evento que recorrerá el sistema de escalado.

Después, cuando el test devuelva falso, el evento sera eliminado.

Un threshold es un umbral que compara los datos de rendimiento con una tabla de valores predeterminados. Estos, resultan en alertas, eventos y notificaciones.

Diferencias

Alertas

Evalúa un único valor como verdadero o falso. Cuando el test se evalúa cómo falso > Se dispara la alerta.

Son comparaciones simples, de un valor que se obtiene tras el collect.

Un simple valor, sin valores históricos, ni estadísticas, ni matemáticas.

Thresholds

Evalúan una tabla de valores con un valor previamente almacenado (Una media de valores recolectados).

Utilizan estadisticas, por defecto, los valores de los últimos 15 minutos (Pero se puede configurar).

Depuración de modelado de dispositivos

  1. Despues de cambiar el modelo, efectuar un update y un collect para el dispositivo en el que estas trabajando: 

...

  1. Utilizando la opción model=true visualizara una salida muy útil para asistir en lo que se esta recolectando y si hay algún error: 

Herramientas para trabajar con Modelado

Herramientas para trabajar con modelos: Tools for Working with NMIS Models

Trabajando con Multiples nodos y modelos

Tools for Working with NMIS Models

7- Modelado Avanzado (I)

Introducción al modelado avanzado

  1. Hay ocasiones en las que vamos a modelar un dispositivo o en alguna situación donde colectar una variable simple SNMP no es suficiente. 
  2. Por ejemplo, cuando las propiedades SNMP se necesitan combinar para proporcionar una medida significativa.
  3. A partir de la version de NMIS 8.4.8G, se soportan opciones de modelado avanzado, como puede ser el uso de variables avanzadas, o CVARs. 

Opciones de modelado avanzado

Control

El control nos permite incluir una condición booleana para definir si una variable si va a collectar. 

Calculate

Nos permite preprocesar un valor antes de guardarlo. 

Replace

El resultado de la colección se puede reemplazar por un valor dado de una tabla de búsqueda predefinida. En este caso, el valor 1 o 0 será reemplazado por la cadena "sí" o "no".

...

      '0' => 'no'

    }    

No graphs

Si no tenemos la necesidad de mostrar un gráfico como parte de una tabla de la sección systemHealth, la opción 'graphtype' debe reemplazarse por: 'no_graphs' => '1' 

No guardar en RRD (nosave)

If data is collect using snmp by the model to be displayed but there is no need to save it to RRD, the option "nosave" should be used.

...

Tenga en cuenta que la configuración de nosave desactiva las alertas para el objeto dado.

index_regex - Regex OID

Used in the "SystemHealth" section, allows multi-element indexing: normally SNMP tables are indexed by the last, single numeric OID component. When NMIS does an update on a indexed entity, it iterates through all the known values for this index component and records them. This iteration does not work if the index consists of more than one number, as it does on certain equipment. In such cases you can set index_regex to a value that captures the OID components that vary between table elements. For example,

...

asegura que los últimos tres números se usen para indexar.

Opciones adicionales

calculate

Formato: expresión

...

El resultado de la expresión evaluada reemplaza el valor recolectado originalmente.

Modelado avanzado: variables personalizadas

Ocasionalmente, se encontrará con un dispositivo o una situación en la que la recopilación de una sola variable SNMP no es suficiente, por ejemplo, cuando se deben combinar dos o más propiedades SNMP para proporcionar una medición significativa.

NMIS versión 8.4.8G y posteriores admiten el modelado de tales escenarios utilizando variables personalizadas o CVAR. Con este mecanismo, puede capturar temporalmente hasta 11 propiedades SNMP separadas como CVAR y definir una expresión compleja arbitraria (en perl) que transforma estos CVAR en la única medida que desea recopilar y / o mostrar.

Dónde y cómo usar CVAR

CVARs se puede usar:

  • en test expressions y valor en el subsistema de alerta y thresholds de NMIS,
  • para calcular expresiones en el subsistema de modelado en general,
  • y desde NMIS versión 8.6 en adelante, también en expresiones de control en cualquier lugar (en versiones anteriores solo se soportaba un CVAR único como control).

Un ejemplo

El MIB DS3 define una variedad de contadores de errores para circuitos DS3 como "dsx3CurrentLCVs" que se basan en un intervalo de observación de 15 minutos y se reinician automáticamente al final del intervalo. Como el intervalo de inicio y finalización es arbitrario y depende del dispositivo que se establezca, simplemente capturar los contadores de errores en sí mismos no es factible. Sin embargo, la MIB de DS3 también especifica la variable "dsx3TimeElapsed" que contiene los segundos transcurridos desde el inicio del intervalo de observación actual. Al dividir el contador de errores sin procesar por el número de segundos en el intervalo, se obtiene una tasa normalizada de errores por segundo que funciona bien para la recopilación y la visualización.

...

  • Las variables numéricas se pueden usar directamente sin comillas.
  • el acceso $CVARn se refiere al valor bruto de la propiedad nombrada, es decir. se evaluaron los datos antes de reemplazar o calcular expresiones para la propiedad nombrada.

Cómo mantener los datos temporales de CVAR fuera de las bases de datos RRD

As outlined above all the objects that you want to access via CVARs must be defined in the same section. If your test/calculate expression is within an rrd section, all the other objects will have to be within that rrd section, too, and thus they would be collected by NMIS and stored in RRD - quite wasteful if these other variables are just temporary and only there to for access using one CVAR expression.

...

En el ejemplo anterior, hrNumUsers se obtiene con SNMP, y se podrían definir otras variables en términos de CVAR3 = hrNumUsers, pero hrNumUsers no se guardará.

8- Modelado Avanzado (II)

Operación de Plugins en NMIS 8

Los plugins de NMIS8 se ejecutarán para cualquier nodo que esté activo, pero lógicamente un plugin necesita poder saber en qué tipo de nodo está operando. Los plugins generalmente incluirán al principio del código una declaración para buscar un tipo de modelo específico y si el modelo es de un tipo interesante para él, realizará sus tareas, de lo contrario se saltará (no devolverá nada).

...

Debido a que el dispositivo no proporciona datos, no sabemos cómo descubrir automáticamente cómo comunicarnos con el dispositivo, NMIS necesita un pequeño empujón. Puede ver un ejemplo de esto con los modelos y plugins CiscoMerakiCloud y CiscoViptelaCloud, que funcionan con Cisco Meraki y Cisco SDN WAN (Viptela) respectivamente.

Creación de Plugins Básicos

  1. Las funciones collect_plugin y update_plugin pueden ser llamadas de forma secuencia por cada nodo, independientemente (Y posiblemente en procesos separados), para ejecutarse al final de la operación de collect y update, respectivamente. 
  2. Todos los plugins existentes serán cargados, y todas las funciones disponibles que se hayan definido en update_plugin y collect_plugin se aplicaran a cada nodo, independientemente de si el plugin ha terminado de forma satisfactoria o no. 

...

  • (0 o undef, el resto se ignora): Significa que no se han realizado cambios, o que el plugin declino finalizar la ejecución. Por ejemplo, si el nodo no encontro un match para el modelo. 
  • (1, el resto se ignora): Significa que se hicieron cambios al objeto sys, para que nmis pueda saberlo y guardar la información del nodo (nodeinfo) y los componentes de la vista. 
  • (2, lista de mensajes de error): Significa que el plugin a fallado su trabajo, y NMIS debería de registrar los mensajes de error. No se guardara la información de nodeinfo o de la vista del nodo. 

Ejemplos

******* Use CMD8TEMP plugin as example ( https://support.opmantek.com/browse/SUPPORT-6061)

Configuracion de poleo de NMIS 8

Versiones NMIS hasta NMIS 8.6.7G inclusive

...

Polling Description

active

ping

collect

collect_snmp

collect_wmi

services

Regular node polling, the node will be ICMP polled and will have SNMP and WMI (if credentials configured) data collected

true

true

true

true

true

will be polled if configured

SNMP or WMI Only Node, the not will have SNMP collected but ICMP polling will not be performed.

true

false

true

true

true

will be polled if configured

Ping Only Node, the node will only be polled using ICMP.

true

true

false

false

false

will be polled if configured

Service Only Node, the node will only have services collected if they are configured.

true

false

false

false

false

will be polled if configured

API Only Node, the node will use plugins to collect data, no other polling will be done, except services if configured.

true

false

false

false

false

will be polled if configured

Node is NOT active and NMIS will mostly ignore the node.

false

N/A

N/A

N/A

N/A

N/A

Model Policy

NMIS 8.6 introduced a new mechanism for adjusting a model's behaviour for particular nodes: the Model Policy system. In version 8.6.0G it allows you to specify flexible rules for adding or removing systemHealth model sections for specific nodes (or groups of nodes).

The Model Policy Document

The installer will install a default model policy document in conf/Model-Policy.nmis. The original/default file will also remain available in the install directory, and contains helpful comments.

...

It should be noted that as Only the first matching rule is applied and therefor the default rule is not subsequently applied you should include all the relevant "false" sections from the default rules into your rule. For example if you wanted to turn on just one mpls system health section you would set that as true in your rule and you would also include all the other "false" lines which are relevant to your model in the rule.

Example Policy

Here is a partial example policy:

...