System information

Introduction
NMIS stands for Network Management Information System. It is a Network Management System which
performs multiple functions from the OSI Network Management Functional Areas, those being,
Performance, Configuration, Fault. A primary function of NMIS is to make information about your
network available quickly and instantly. Some of this network is provided "raw" other information is
provided in a related manner.
It started as a SNMP polling and statistics viewer front-end to Tobi Oetiker's RRDTool. RRDTool
replaces MRTG but doesn't include a front end and backend to handle SNMP polling and display
resulting web pages etc. The original NMIS evolved quite rapidly to meet demands of production
environments.
The backend, polling engine, uses SNMP to collect interface and health statistics for Cisco Routers,
certain Cisco Catalyst Switches and Generic SNMP devices every 5 minutes. The collected statistics
are stored in RRD's (Round Robin Databases) and ensures that devices are up, issues alerts, etc. The
front end accesses the information stored in the RRD's and displays statistics the resulting graphs,
reports, etc.
Both the front and back ends are highly extensible and features are easy to add as the structure is
learnt. For example the backend was just collecting interface statistics every poll cycle, it was easy to
add collection of health (cpu, memory, buffer, etc) and response time, availability.
NMIS uses a backend to collect data and maintain the information about the data. It relies on RRD for
databases, additional tables are text based configuration information. The frontend is independant, it
just reads information from the RRD's and text tables and displays the information. Simple.
It is intended that NMIS be low maintenance once it is running, it should just go and go. More work
needs to be done on this but I think it going well so far.
Concepts
The basic concept is that NMIS collects interface, CPU, Memory, buffer and packet statistics from Cisco
Routers and Switches, it is also capable of supporting generic SNMP MIB 2 collection. Getting slightly
deeper, NMIS pings a device every poll cycle verifies that it is "up", this is called "reachability", it holds
this in memory.
If no system information is available for the device it must be a new device so perform a capabilities
discovery on the device, this is the subroutine getNodeInfo. Otherwise load the cached system
information with the loadSystemFile then run the updateUptime subroutine which gets sysObjectID,
sysUpTime and ifNumber, NMIS compares this with the cached information to see if the same number
of interfaces are present, that the uptime has increased and that the sysObjectID is the same.
If the number of interfaces has changed run the createInterfaceFile subroutine to update this
information. (This should send an configuration change event.)
If the sysObjectID has changed run the getNodeInfo subroutine. (This should send an configuration
change event.)
If the sysUptime is less then the cached information sysObjectID has changed run the getNodeInfo
subroutine. (This should send an node reload event.)
The runHealth subroutine is run, this collects CPU, Memory, buffers, etc, whatever is deemed
necessary for that device type and stick it all in an RRD.
Then the runInterfaces subroutine is run, it loads the cached interface information, if none exists it
creates it with createInterfaceFile. Then for each interface it collects ifDescr, ifOperStatus, ifInOctets
and ifOutOctets. If the ifDescr is different, the cached interface information must be out of date (this is
how shifting ifIndex is handled) create it again with createInterfaceFile. If the ifOperStatus shows down
NMIS - Network Management Information System http://www.sins.com.au/nmis/
21 of 43 15/04/2002 3:59 PM