Documentation:
NINO general infoNINO 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 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 Processes | Description | Name | Controlled by |
Monitoring | Collect monitoring data | monitor.pl | services.pl |
Status | Status check, Ping or Uptime | status.pl | services.pl |
SNMP Trap listener | Receive and forward SNMP traps | trapd.pl | services.pl |
Event actions | Execute event actions, such as e-mail notification or send escalation alerts | eventaction.pl | services.pl |
NINO Services | Control NINO services | services.pl | /etc/init.d/nino or WinNT AppToService |
Auto Report | Auto Report genearation | report.pl | schedule.pl atd |
Network Scan | Scan network, IP range or seed file | scan.pl | atd |
GUI | Web interface | nino.pl admin.pl | httpd, Apache mod_perl |
Server services | Description | Name | Controlled by |
HTTP | Apache Web Server | httpd | /etc/init.d/httpd or WinNT service |
Scheduler | Schedule jobs, such as reports | schedule.pl | atd or WinNT service |
Database | MySQL Database | mysqld | /etc/init.d/mysqld or WinNT service |
NINO Services | Control NINO services | services.pl | /etc/init.d/nino or WinNT AppToService |
SNMP Agent | SNMP Agent | snmpd | /etc/init.d/snmpd or WinNT service |
The NINO directory and file structure:
Description | Directory |
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 |
Description | File |
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.
The NINO perl modules are located in de $httpdir/$cgidir/lib directory:
Description | File |
NINO initialize | NINOINIT.pm |
NINO CGI / html functions | NINOCGI.pm |
NINO SQL functions | NINOSQL.pm |
NINO Network functions | NINONET.pm |
NINO Monitoring functions | NINOMON.pm |
NINO generic main module | NINOMOD.pm |
NINO SNMP functions | NINOSNMP.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:
Description | File | Remarks |
NINO SNMP functions for UCD / NetSNMP API | NINOSNMP-ucd.pm | Should be used if NetSNMP > 5.0 is installed |
NINO SNMP functions for D.Town Net::SNMP API | NINOSNMP-dtown.pm | Should be used if NetSNMP is not available |
Disable WMI functions (Linux only) | NINOWMI-dummy.pm | WMI does not work on Unix/Linux |
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:
Key | Description | Remarks |
oid_$OID_name | SNMP OID's | comma seperated |
descr_$OID_name | SNMP OID's or function to display description, such as interface name, disk drive etc. | comma seperated |
ipport_$OID_name | TCP or UDP port | Default 161 |
version_$OID_name | SNMP version, 1 or 2c | Default 1 |
hosts_$OID_name | hosts | optional |
formula_$OID_name | formula to calculate values | optional |
factor_$OID_name | value description, such as Bit/s or ms | string |
scalecalc_$OID_name | Display graph Kilo Mega Giga etc, 22 kBit/s or 22000 Bit/s | true or false |
graph_$OID_name | Graph type | line, filled or sum |
queue_$OID_name | The queue that collects data of this preset | fast,default,slow,internet or user defined |
command_$OID_name | SNMP, WMI, HTTP, TCP or script | snmp,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.
Function | Description | Remarks |
counter32() | new value - old value | 32 bit |
counter64() | new value - old value | 64 bit |
nzero | Prevents divide by zero | |
duration | duration between new and old value | seconds |
+-/*() | standard operators |
Example preset IfOctets:
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