Versions Compared

Key

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

...

NMIS (Network Management Information System) was developed as an Open Source Network Management System to provide information to IT professionals to support decision making, both operational and longer term.  The goal was to provide a dashboard of the all the nodes being managed in a single view so that it is possible to rapidly identify where problems are with "traffic lights".  Over the years we have learnt that people see information differently, and while some people see colours and arrows other see data textually, so for some people the details are lost in the colours.  

In NMIS 8.5.6G we have returned to this goal and wanted to help people to view the data in different ways.  We have done this by providing a new way to see the status of all nodes, this was done by introducing a trinary statestatus, instead of just a node being UP or DOWN, nodes are now reachable, degraded or unreachable.

This page will describe some details on this new feature as well as the concept of the NMIS modes of classes, coarse and fine-grained for viewing status.

...

That gives us two dashboard modes, and we have a third optional mode, which is fine-grained.  The fine-grained more is about nodes with "Reachable, Degraded and Unreachable" statesstatus, so you will see how many nodes are "down" being unreachable and how many nodes are degraded which means they are "up" but have some performance issue.

...

The configuration which relates to these modes are as follows and can be set in Config.nmis or Config.json


classic
mode
coarse
mode

...

fine-grained
mode
node_status_uses_status_summary

...

...

false

...

...

false

...

coarse mode

...

true
display_status_summary

...

falsefalsetrue
overall_node_status_coarse

...

falsetruefalse

e.g. fine-grained mode

'node_status_uses_status_summary' => 'true',
'display_status_summary' => 'true',
'overall_node_status_coarse' => 'false',

Reachable, Degraded and Unreachable

The new optional trinary state status provides an additional level of detail, this means:

Status
colourGreen
titleReachable
   Reachable   - Node is ping-able and has no detected proactive or alert events

Status
colourYellow
titleDegraded
   Degraded    - Node is ping-able but SNMP is not responding or one or more proactive or alert events have been detected.

Status
colourRed
titleUnreachable
Unreachable - Node is NOT responding to ICMP or SNMP packets.

So the new state status is Degraded, this is there to reflect the KPI's for a node and show you that the node is up and working, but has some other performance condition active.  Please read:

Calculating and affecting Node degraded status

The Gory Details of Classic Mode


Level Status - Normal, Warning, Minor, Major, Critical

The level status is intended to provide some prioritisation to the customer, for example if a Node which has the role Core is down, its status would be Critical, while an access node would be Major.  The actual policy is configurable and defined in the NMIS Model file, /usr/local/nmis8/models/Common-event.nmis and for node down looks like this:


Code Block
      'node down' => {
        'core' => {
          'logging' => 'true',
          'level' => 'Critical'
        },
        'access' => {
          'logging' => 'true',
          'level' => 'Major'
        },
        'distribution' => {
          'logging' => 'true',
          'level' => 'Major'
        }
      },

How these get calculated?  % NodeUp (NodeDn) + role weight (access vs core)?

Overall Node Status for all nodes or for a group is calculated in the subroutine overallNodeStatus in /usr/local/nmis8/lib/NMIS.pm
First the status for each node in the group or in the entire network is calculated and summarised, so we end up with a count of how many nodes are Normal, Minor, Major, Critical, based on the Common-event.nmis policy described above.
Now we add those together weighted as follows:


Code Block
$status_number = 100 * $statusHash{Normal};
$status_number = $status_number + ( 90 * $statusHash{Warning} );
$status_number = $status_number + ( 75 * $statusHash{Minor} );
$status_number = $status_number + ( 60 * $statusHash{Major} );
$status_number = $status_number + ( 50 * $statusHash{Critical} );
$status_number = $status_number + ( 40 * $statusHash{Fatal} );
if ( $status_number != 0 and $statusHash{count} != 0 ) {
	$status_number = $status_number / $statusHash{count};
}


Then if there is more than one node, we map an overall status to that weighting.

...


Code Block
if ( $status_number == 100 ) { $overall_status = "Normal"; }
elsif ( $status_number >= 95 ) { $overall_status = "Warning"; }
elsif ( $status_number >= 90 ) { $overall_status = "Minor"; }
elsif ( $status_number >= 70 ) { $overall_status = "Major"; }
elsif ( $status_number >= 50 ) { $overall_status = "Critical"; }
elsif ( $status_number <= 40 ) { $overall_status = "Fatal"; }
elsif ( $status_number >= 30 ) { $overall_status = "Disaster"; }
elsif ( $status_number < 30 ) { $overall_status = "Catastrophic"; }