Prerrequisitos

Para agregar un nuevo umbral a NMIS, es importante entender qué es lo que involucra.

Para esto, recomendamos consultar la siguiente información:

Tutorial: NMIS8, agregar un nuevo umbral

Procedimiento para configurar thresholds en NMIS

Basic and Advanced Thresholds in NMIS8


Introducción

Actualmente NMIS tiene la capacidad de recopilar datos de CBQoS de equipos Cisco, por lo que esta integración ha representado una gran mejora al sistema de monitoreo.

Vista previa de la recopilación de datos CBQoS en NMIS:


Cómo configurar un umbral personalizado para métricas de CBQoS

Actualmente NMIS cuenta con 2 umbrales definidos por defecto que involucran las siguientes métricas de CBQoS: DropPkt y NoBufDropPkt.

Para agregar un nuevo umbral para alguna otra métrica de CBQoS, deben seguirse los siguientes pasos:

  • Identificar el elemento (métrica) al que se le aplicará el umbral: las métricas de CBQoS trabajan con archivos "Common-*", por lo tanto, se visualizarán los siguientes archivos para realizar la identificación:

Common-cbqos-in.nmis

Common-cbqos-in.nmis
%hash = (
  'cbqos-in' => {
    'rrd' => {
      'cbqos-in' => {
        'indexed' => 'true',
        'graphtype' => 'cbqos-in',
        'threshold' => 'qos_pkt_drop,qos_pkt_drop_no_buf',
        'snmp' => {
          'DropPkt' => {
            'oid' => 'cbQosCMDropPkt64',
            'option' => 'counter,U:U'
          },
          'NoBufDropPkt' => {
            'oid' => 'cbQosCMNoBufDropPkt64',
            'option' => 'counter,U:U'
          },
          'PrePolicyPkt' => {
            'oid' => 'cbQosCMPrePolicyPkt64',
            'option' => 'counter,U:U'
          },
          'DropByte' => {
            'oid' => 'cbQosCMDropByte64',
            'option' => 'counter,U:U'
          },
          'PrePolicyByte' => {
            'oid' => 'cbQosCMPrePolicyByte64',
            'option' => 'counter,U:U'
          },
          'PostPolicyByte' => {
            'oid' => 'cbQosCMPostPolicyByte64',
            'option' => 'counter,U:U'
          }
        },
      }
    }
  }
);

Common-cbqos-out.nmis

Common-cbqos-out.nmis
%hash = (
  'cbqos-out' => {
    'rrd' => {
      'cbqos-out' => {
        'indexed' => 'true',
        'graphtype' => 'cbqos-out',
        'threshold' => 'qos_pkt_drop,qos_pkt_drop_no_buf',
        'snmp' => {
          'DropPkt' => { 
            'oid' => 'cbQosCMDropPkt64',
            'option' => 'counter,U:U'
          },
          'NoBufDropPkt' => {
            'oid' => 'cbQosCMNoBufDropPkt64',
            'option' => 'counter,U:U'
          },
          'PrePolicyPkt' => { 
            'oid' => 'cbQosCMPrePolicyPkt64',
            'option' => 'counter,U:U'
          },
          'DropByte' => { 
            'oid' => 'cbQosCMDropByte64',
            'option' => 'counter,U:U'
          },
          'PrePolicyByte' => { 
            'oid' => 'cbQosCMPrePolicyByte64',
            'option' => 'counter,U:U'
          },
          'PostPolicyByte' => {
            'oid' => 'cbQosCMPostPolicyByte64',
            'option' => 'counter,U:U'
          }
        },
      }
    }
  }
);

Para fines prácticos, se trabajará sobre la métrica DropByte, que corresponde a la OID "cbQosCMDropByte64" (1.3.6.1.4.1.9.9.166.1.15.1.1.17).


  • En ambos archivos (Common-cbqos-in.nmis y Common-cbqos-out.nmis), agregaremos el elemento de la siguiente manera:
        'threshold' => 'qos_pkt_drop,qos_pkt_drop_no_buf,qos_cmdrop_Byte64',


En este caso particular, hemos denominado el umbral "qos_cmdrop_Byte64" tomando como referencia la OID; este nombre es personalizado y se recomienda sea relacionado a la métrica, sin embargo, esto no es una regla.

Al finalizar la edición procedemos a guardar los cambios.


  • Agregamos los valores de umbral al archivo /usr/local/nmis8/models/Common-threshold.nmis, utilizando el nombre especificado anteriormente. El nombre del evento debe incluir "Proactive" al principio, una vez que se termine de integrar el umbral, procedemos a guardar los cambios.
/nmis8/models/Common-threshold.nmis
      'qos_cmdrop_Byte64' => { #latam
        'event' => 'Proactive QoS Drop Byte',
        'title' => "Proactive QoS Drop Byte",
        'unit' => 'packets',
        'item' => 'DropByte',
        'control_regex' => 'class.+|.*rpvm.*|ce',
        'select' => {
          'default' => {
            'value' => {
              'fatal' => '240',
              'critical' => '80',
              'major' => '40',
              'minor' => '0.00',
              'warning' => '0.000'
            }
          }
        }
      },

Nota: Hay que recordar que NMIS ya cuenta con 2 umbrales definidos por defecto. En la siguiente parte del código se especifica que estos umbrales emplean un 'control_regex', que se aplica solamente a los strings con los que coincida. Este regex debe ser ajustado dependiendo los nombres de QoS de cada dispositivo.

/nmis8/models/Common-threshold.nmis
      'qos_pkt_drop' => { 
        'event' => 'Proactive QoS Packet Drops', 
		'title' => "QoS Packet Drops",
		'unit' => 'packets',
        'item' => 'DropPkt',
        'control_regex' => 'Critical|Voice|Video|.*rpvm.*|class.+|ce',
        'control_regex_comment' => 'Use the control regex field to limit which CBQoS Classes will match.',
        'control_regex_example' => 'class-default$|Voice$',
        'select_comment' => 'the values below are number of packets',
        'select' => {
          'default' => {
            'value' => {
              'fatal' => '240',
              'critical' => '80',
              'major' => '40',
              'minor' => '0.00',
              'warning' => '0.000'
            }
          }
        }
      },
      'qos_pkt_drop_no_buf' => {
        'event' => 'Proactive QoS no buffer Packet Drops',
		'title' => "QoS no buffer Packet Drops",
		'unit' => 'packets',
        'item' => 'NoBufDropPkt',
        'control_regex' => 'Critical|Voice|Video|.*rpvm.*|class.+|ce',
        'select' => {
          'default' => {
            'value' => {
              'fatal' => '240',
              'critical' => '80',
              'major' => '40',
              'minor' => '0.00',
              'warning' => '0.000'
            }
          }
        }
      },


  • A continuación vamos a proceder a agregar la extracción de las estadísticas al archivo /usr/local/nmis8/models/Common-stats.nmis, dentro de la sección "type". Recordar que ya se tiene definidos dos métricas, solo resta integrar la métrica "DropByte" que se está manejando, siempre respetando la estructura por defecto del archivo. Al finalizar, guardamos los cambios.
/nmis8/models/Common-stats.nmis
      'cbqos-in' => [
        'DEF:DropPkt=$database:DropPkt:MAX',
        'DEF:NoBufDropPkt=$database:NoBufDropPkt:MAX',
        'DEF:DropByte=$database:DropByte:MAX',
        'PRINT:DropPkt:MAX:DropPkt=%1.2lf',
        'PRINT:NoBufDropPkt:MAX:NoBufDropPkt=%1.2lf',
        'PRINT:DropByte:MAX:DropByte=%1.2lf'
      ],
      'cbqos-out' => [
      	'DEF:DropPkt=$database:DropPkt:MAX',
      	'DEF:NoBufDropPkt=$database:NoBufDropPkt:MAX',
      	'DEF:DropByte=$database:DropByte:MAX',
      	'PRINT:DropPkt:MAX:DropPkt=%1.2lf',
      	'PRINT:NoBufDropPkt:MAX:NoBufDropPkt=%1.2lf',
      	'PRINT:DropByte:MAX:DropByte=%1.2lf'
      ],


  • Para que funcionen el evento y el umbral definido anteriormente, requerimos integrar los detalles del evento en el archivo /usr/local/nmis8/conf/Event.nmis, quedando de la siguiente manera:
/nmis8/conf/Events.nmis
  'Proactive QoS Drop Byte' => {
    'CancelingEvent' => 'Proactive QoS Drop Byte Closed',
    'Description' => 'The QoS system has had to drop packets Byte due to congestion.',
    'Event' => 'Proactive QoS Drop Byte',
    'Log' => 'true',
    'Notify' => 'true',
    'Stateful' => 'true',
    'Status' => 'true'
  },


  • Una vez que hemos creado el umbral, es hora de realizar algunas pruebas. La mejor manera es ejecutando un type=threshold al equipo deseado, usando un debug=1.
/usr/local/nmis8/bin/nmis.pl type=threshold debug=1 force=true node=nombre_nodo


Como podemos ver, la ejecución muestra que el umbral se ha aplicado:

14:31:27 thresholdProcess,Proactive QoS Packet Drops, Minor, GigabitEthernet0/0.6: mark.ce.mt, value=0.00 reset=0
14:31:27 thresholdProcess,Proactive QoS no buffer Packet Drops, Minor, GigabitEthernet0/0.6: mark.ce.mt, value=0.00 reset=0
14:31:27 thresholdProcess,Proactive QoS Drop Byte, Minor, GigabitEthernet0/0.6: mark.ce.mt, value=0.00 reset=0
14:31:27 thresholdProcess,Proactive QoS Packet Drops, Minor, GigabitEthernet0/0.6: mark.ce.rt, value=0.00 reset=0
14:31:27 thresholdProcess,Proactive QoS no buffer Packet Drops, Minor, GigabitEthernet0/0.6: mark.ce.rt, value=0.00 reset=0
14:31:27 thresholdProcess,Proactive QoS Drop Byte, Minor, GigabitEthernet0/0.6: mark.ce.rt, value=0.00 reset=0
14:29:17 runThrHld, processing threshold qos_cmdrop_Byte64
14:29:17 runThrHld, MATCHED threshold qos_cmdrop_Byte64 control_regex MATCHED class-default--rpvm.ce.pb22.out--ce.mt
14:29:17 getThresholdLevel, Start threshold=qos_cmdrop_Byte64, index=45 item=class-default--rpvm.ce.pb22.out--ce.mt
14:29:17 getThresholdLevel, found threshold=qos_cmdrop_Byte64 entry=default
14:29:17 getThresholdLevel, threshold=qos_cmdrop_Byte64, item=DropByte, value=0.00
14:29:17 getThresholdLevel, result threshold=qos_cmdrop_Byte64, level=Minor, value=0.00, thrvalue=0.00, reset=0
14:29:17 runThrHld#9581->Sys::parseString#1561->
         parseString:: string to parse 'Proactive QoS Drop Byte'
14:29:17 runThrHld#9581->Sys::parseString#1683->
         node=grupo_omk_cdmx_latam_ide_rt01_node_03_03, nodeModel=CiscoRouter, nodeType=router, nodeVendor=Cisco Systems, sysObjectName=cisco2951
         ifDescr=gigabitethernet0-2-1992, ifType=l2vlan, ifSpeed=10000000, ifMaxOctets=1250000, index=45, item=
14:29:17 runThrHld#9581->Sys::parseString#1742->
         parseString:: result is str=Proactive QoS Drop Byte
14:29:17 thresholdProcess, Proactive QoS Drop Byte, Minor, GigabitEthernet0/2.1992: class-default--rpvm.ce.pb22.out--ce.mt, value=0.00 reset=0
14:29:17 notify, Start of Notify
14:29:17 thresholdProcess#9786->NMIS::notify#4322->NMIS::eventAdd#4064->NMIS::eventUpdate#3565->func::setFileProt#906->func::setFileProtDiag#856->
         setting owner of /usr/local/nmis8/var/events/grupo_omk_cdmx_latam_ide_rt01_node_03_03/current/proactive_qos_drop_byte-gigabitethernet0_2.1992__class-default--rpvm.ce.pb22.out--ce.mt.json to nmis:nmis
14:29:17 thresholdProcess#9786->NMIS::notify#4322->NMIS::eventAdd#4064->NMIS::eventUpdate#3565->func::setFileProt#906->func::setFileProtDiag#886->
         setting permissions of /usr/local/nmis8/var/events/grupo_omk_cdmx_latam_ide_rt01_node_03_03/current/proactive_qos_drop_byte-gigabitethernet0_2.1992__class-default--rpvm.ce.pb22.out--ce.mt.json to 0660
14:29:17 eventAdd, event added, node=GRUPO_OMK_CDMX_LATAM_IDE_RT01_NODE_03_03, event=Proactive QoS Drop Byte, level=Minor, element=GigabitEthernet0/2.1992: class-default--rpvm.ce.pb22.out--ce.mt, details=Value=0.00 Threshold=0.00
14:29:17 notify, Finished

Nota: Se utilizó un valor bajo en las pruebas del umbral para poder forzar el evento y observar el funcionamiento. Si necesita forzar su umbral para que se active, use un valor más bajo (por ejemplo: 0.01 o 0.000).


  • Estos datos se verán reflejados en los archivos .json propios de cada uno de los nodos a los que se les aplique el umbral, dentro del directorio /usr/local/nmis8/var.
      'qos_cmdrop_Byte64--45--H14830785' => {
        'element' => 'GigabitEthernet0/2.9999: class-default--rpvm.ce.pb22.out--ce.cd',
        'event' => 'Proactive QoS Drop Byte',
        'index' => '45',
        'level' => 'Minor',
        'level_select' => 'default',
        'method' => 'Threshold',
        'property' => 'qos_cmdrop_Byte64',
        'status' => 'error',
        'type' => 'cbqos-out',
        'updated' => 1652815808,
        'value' => '0.00'
      },
      'qos_cmdrop_Byte64--45--H14834881' => {
        'element' => 'GigabitEthernet0/2.9999: class-default--rpvm.ce.pb22.out--ce.rt',
        'event' => 'Proactive QoS Drop Byte',
        'index' => '45',
        'level' => 'Minor',
        'level_select' => 'default',
        'method' => 'Threshold',
        'property' => 'qos_cmdrop_Byte64',
        'status' => 'error',
        'type' => 'cbqos-out',
        'updated' => 1652815808,
        'value' => '0.00'
      },


  • Para finalizar, así se observarían los eventos generados en NMIS:

  • No labels