NINO - TechDoc

Technical documentation:

NINO Overview
NINO Services
NINO Directory structure
NINO module structure
Monitoring presets

Documentation:

NINO general info
NINO Frequently Asked Questions
SNMP traps and events
NINO Security document




NINO Overview

NINO is a web based network management solution. It uses SNMP (Simple Network Management Protocol), WMI and HTTP/TCP service response to monitor hosts and network devices. NINO is running on a web server and NINO can be accessed by any computer with a web browser.

The main functions of NINO are:

NINO originated from the Unix world. Using Perl and Java NINO is platform independant. NINO is a package containing Perl modules on the server and Java Applets to display graphs and the NodeMap. NINO uses a webserver to take care of the user interface. The NINO services are background processes to take care of monitoring and event handling. More information about processes can be found in NINO Services.

The NINO services are used to receive SNMP traps and collect monitoring data. Threshold and status monitoring is used to send alerts to the trapd process if a threshold is exceeded or a device is down. All traps are stored as events in the database. All events can also be processed using eventaction. The eventaction process can send e-mail notification, send escalation alerts or execute scripts. All monitoring data is stored on the filesystem and can be used to create reports, graphs or status views.





NINO Services

NINO uses a web server to serve web pages. NINO uses a database to store events and the NINO services to collect monitoring data.

All NINO processes are controlled by the services process.

Processes:

By default NINO has several monitoring queues to handle monitoring. Each queue can be configured with a cycle duration in seconds. The services process will control all monitoring queues, such as manual stop or start, automatic restart if the queue is down or hanging. It is possible to create new monitoring queues and alter cycle times. Also test queues can be defined to test new monitoring presets or realtime troubleshooting with a cycle refresh of 10 seconds.

Detailed description table of NINO processes:


NINO ProcessesDescriptionNameControlled by
MonitoringCollect monitoring datamonitor.plservices.pl
StatusStatus check, Ping or Uptimestatus.plservices.pl
SNMP Trap listenerReceive and forward SNMP trapstrapd.plservices.pl
Event actionsExecute event actions, such as e-mail notification or send escalation alertseventaction.plservices.pl
NINO ServicesControl NINO servicesservices.pl/etc/init.d/nino or WinNT AppToService
Auto ReportAuto Report genearationreport.plschedule.pl atd
Network ScanScan network, IP range or seed file scan.platd
GUIWeb interfacenino.pl admin.plhttpd, Apache mod_perl

Detailed description table of server processes:

Server servicesDescriptionNameControlled by
HTTPApache Web Serverhttpd/etc/init.d/httpd or WinNT service
SchedulerSchedule jobs, such as reportsschedule.platd or WinNT service
DatabaseMySQL Databasemysqld/etc/init.d/mysqld or WinNT service
NINO ServicesControl NINO servicesservices.pl/etc/init.d/nino or WinNT AppToService
SNMP AgentSNMP Agentsnmpd/etc/init.d/snmpd or WinNT service



NINO Directory structure

The NINO directory and file structure:

DescriptionDirectory
NINO base directory Unix: ($httpdir)/var/nino
NINO base directory WinNT/2000/2003: ($httpdir)C:\var\nino
Configuration directory:$httpdir/conf
Scripts directory:$httpdir/scripts
HTML document directory:$httpdir/htdocs/nino
Stylesheet directory:$httpdir/htdocs/nino/css
Images directory:$httpdir/htdocs/nino/images
MIBs directory:$httpdir/htdocs/nino/mibs
Upload directory:$httpdir/htdocs/nino/upload
Report directory:$httpdir/htdocs/nino/reports
Report template directory:$httpdir/htdocs/nino/reports/template
NINO scripts in cgi-bin directory: ($cgidir)$httpdir/cgi-bin
NINO scripts in mod_perl directory: ($cgidir)$httpdir/mod_perl
NINO modules directory: ($libdir) $httpdir/$cgidir/lib
Monitoring data collect statistics directory:$httpdir/$cgidir/statistics
Report statistics directory:$httpdir/htdocs/nino/reports/statistics

DescriptionFile
NINO configuration file in conf directory:$httpdir/conf/snmp.ini
Nodes map file (pre-processed):$httpdir/$cgidir/statistics/nodes.txt
Nodes map file (post-processed):$httpdir/htdocs/nino/nodes

For other web servers a similar directory structure could be used, but it is possible to change this settings by editing the snmp.ini configuration file.

NINO module structure

The NINO perl modules are located in de $httpdir/$cgidir/lib directory:

DescriptionFile
NINO initializeNINOINIT.pm
NINO CGI / html functionsNINOCGI.pm
NINO SQL functionsNINOSQL.pm
NINO Network functionsNINONET.pm
NINO Monitoring functionsNINOMON.pm
NINO generic main moduleNINOMOD.pm
NINO SNMP functionsNINOSNMP.pm
NINO WMI functions (Windows only)NINOWMI.pm

NINO is able to use the UCD / NetSNMP API or the Net::SNMP API from D. Town. The NetSNMP API is preferred, because it is faster and takes less CPU resources. However, the NetSNMP package is not always available on older systems, so the native Perl Net::SNMP API is can also be used. WMI is only available for Windows systems, so a dummy WMI module must be installed on Unix/Linux systems. If compatibility modules are required, please copy them from the $httpdir/$cgidir/libcompat directory to the $httpdir/$cgidir/lib directory and rename the file (remove -dummy, -dtown, -ucd). The NINO compatibility modules are located in de $httpdir/$cgidir/libcompat directory:

DescriptionFileRemarks
NINO SNMP functions for UCD / NetSNMP APININOSNMP-ucd.pmShould be used if NetSNMP > 5.0 is installed
NINO SNMP functions for D.Town Net::SNMP APININOSNMP-dtown.pmShould be used if NetSNMP is not available
Disable WMI functions (Linux only)NINOWMI-dummy.pmWMI does not work on Unix/Linux

NINO monitoring presets

NINO uses monitoring presets to collect monitoring data. The monitoring preset properties are stored in the snmp.ini configuration file. The monitoring preset contains the following data:

KeyDescriptionRemarks
oid_$OID_nameSNMP OID'scomma seperated
descr_$OID_nameSNMP OID's or function to display description, such as interface name, disk drive etc.comma seperated
ipport_$OID_nameTCP or UDP portDefault 161
version_$OID_nameSNMP version, 1 or 2cDefault 1
hosts_$OID_namehostsoptional
formula_$OID_nameformula to calculate valuesoptional
factor_$OID_namevalue description, such as Bit/s or msstring
scalecalc_$OID_nameDisplay graph Kilo Mega Giga etc, 22 kBit/s or 22000 Bit/s true or false
graph_$OID_nameGraph typeline, filled or sum
queue_$OID_nameThe queue that collects data of this presetfast,default,slow,internet or user defined
command_$OID_nameSNMP, WMI, HTTP, TCP or scriptsnmp,http,tcp,script

The formula uses monitoring data as input. All OID, hosts and ports must match. This must be defined using this format:

   host:port:OID

The host and port are empty by default, but can be used to create one monitoring preset for multiple hosts. Multiple hosts setup could be in clustered environments, e.g. user serssions on multiple application servers. There are also functions available to take care of counter data.

FunctionDescriptionRemarks
counter32()new value - old value32 bit
counter64()new value - old value64 bit
nzeroPrevents divide by zero
durationduration between new and old valueseconds
+-/*()standard operators

Example preset IfOctets:

Monitoring Preset
SNMP preset name:
SNMP udp port:
OID:
OID In:
OID Out:
OID Description - none:
Command:snmp
SNMP version:
Formula:
Hosts:
Thresholds:new
Value description:
Rescaling (k,M):
Graph type:
Monitoring queue: Edit
Run snmpwalk:.1.3.6.1.2.1.2.2.1.10 , .1.3.6.1.2.1.2.2.1.16
Apply:

Example preset definitions (Export):


IfOctets:

oid_IfOctets = .1.3.6.1.2.1.2.2.1.10, .1.3.6.1.2.1.2.2.1.16
hosts_IfOctets = 
descr_IfOctets = &smart_ifdescr
formula_IfOctets = 8 * (counter32(::.1.3.6.1.2.1.2.2.1.10) + counter32(::.1.3.6.1.2.1.2.2.1.16)) / duration
ipport_IfOctets = 
factor_IfOctets = Bit/s
scalecalc_IfOctets = true
version_IfOctets = 1
queue_IfOctets = default
command_IfOctets = snmp
script_IfOctets = 
graph_IfOctets = line

Disks:

oid_Disks = .1.3.6.1.2.1.25.2.3.1.6,.1.3.6.1.2.1.25.2.3.1.5
in_Disks = 
out_Disks = 
hosts_Disks = 
descr_Disks = .1.3.6.1.2.1.25.2.3.1.3
formula_Disks = 100 * ::.1.3.6.1.2.1.25.2.3.1.6 / nzero( ::.1.3.6.1.2.1.25.2.3.1.5)
ipport_Disks = 161
factor_Disks = %
scalecalc_Disks = false
version_Disks = 1
queue_Disks = slow
command_Disks = snmp
script_Disks = 
graph_Disks = line

ATG Dynamo requests using 4 instances running or 2 servers, showing just one (!) graph:

oid_ATG_WEB1drpTotalReqsServed = .1.3.6.1.4.1.2725.1.4.3,.1.3.6.1.4.1.2725.1.4.3,.1.3.6.1.4.1.2725.1.4.3,.1.3.6.1.4.1.2725.1.4.3
in_ATG_WEB1drpTotalReqsServed = 
out_ATG_WEB1drpTotalReqsServed = 
hosts_ATG_WEB1drpTotalReqsServed = atg01,atg01,atg02,atg02
descr_ATG_WEB1drpTotalReqsServed = 
formula_ATG_WEB1drpTotalReqsServed = counter32(atg01:8871:.1.3.6.1.4.1.2725.1.4.3)/duration , counter32(atg01:8872:.1.3.6.1.4.1.2725.1.4.3)/duration,counter32(atg02:8871:.1.3.6.1.4.1.2725.1.4.3)/duration,counter32(atg02:8872:.1.3.6.1.4.1.2725.1.4.3)/duration
ipport_ATG_WEB1drpTotalReqsServed = 8871,8872,8871,8872
factor_ATG_WEB1drpTotalReqsServed = request/s
scalecalc_ATG_WEB1drpTotalReqsServed = true
version_ATG_WEB1drpTotalReqsServed = 2c
queue_ATG_WEB1drpTotalReqsServed = dynamo
command_ATG_WEB1drpTotalReqsServed = snmp
script_ATG_WEB1drpTotalReqsServed = 
graph_ATG_WEB1drpTotalReqsServed = sum

HTTP examples:

HttpGet:

oid_HttpGet = 
in_HttpGet = 
out_HttpGet = 
hosts_HttpGet = 
descr_HttpGet = 
formula_HttpGet = 
ipport_HttpGet = 80
factor_HttpGet = ms
scalecalc_HttpGet = false
version_HttpGet = 
queue_HttpGet = internet
command_HttpGet = http
script_HttpGet = 
graph_HttpGet = sum

Apache server-status:

oid_apacheStatus = Accesses;Bytes
in_apacheStatus = 
out_apacheStatus = 
hosts_apacheStatus = http://$ipaddr/server-status?auto
descr_apacheStatus = requests/s;kBytes/s
formula_apacheStatus = counter32(::apacheStatus) / duration
ipport_apacheStatus = 
factor_apacheStatus = 
scalecalc_apacheStatus = true
version_apacheStatus = 
queue_apacheStatus = internet
command_apacheStatus = http
script_apacheStatus = 
graph_apacheStatus = line


Execute script:
 
oid_HostProcs = 
in_HostProcs = 
out_HostProcs = 
hosts_HostProcs = 
descr_HostProcs = 
formula_HostProcs = 
ipport_HostProcs = 
factor_HostProcs = none
scalecalc_HostProcs = 
version_HostProcs = 
queue_HostProcs = slow
command_HostProcs = script
script_HostProcs = $inivar{perl} $inivar{httpcgidir}$inivar{slash}hostprocs.pl
graph_HostProcs = line