Versions Compared

Key

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

 

NMIS8 is a Network Management System which performs performance management.  NMIS8 collects SNMP data from routers, switches, firewalls, servers, and many more types of IT devices.  It stores the collected data in a performance database, which is an RRD file using RRDTool.  

...

Code Block
 'db' => {
   'hbeat' => '900',
   'poll' => '300',
   'size' => {
       'reachability' => {
       'step_year' => '288',
       'rows_month' => '2268',
       'rows_year' => '1890',
       'step_day' => '1',
       'step_month' => '24',
       'step_week' => '6',
       'rows_day' => '2304',
       'rows_week' => '1536'
     },
     'interface' => {
       'step_year' => '288',
       'rows_month' => '2268',
       'rows_year' => '1890',
       'step_day' => '1',
       'step_month' => '24',
       'step_week' => '6',
       'rows_day' => '2304',
       'rows_week' => '1536'
     },
     'default' => {
       'step_year' => '288',
       'rows_month' => '2268',
       'rows_year' => '1890',
       'step_day' => '1',
       'step_month' => '24',
       'step_week' => '6',
       'rows_day' => '2304',
       'rows_week' => '1536'
     },
     'metrics' => {
       'step_year' => '288',
       'rows_month' => '2268',
       'rows_year' => '1890',
       'step_day' => '1',
       'step_month' => '24',
       'step_week' => '6',
       'rows_day' => '2304',
       'rows_week' => '1536'
     }
   }
 },
 

This will need to be changed to suit your new scheme, you might like to only keep more interface data, or to change all of them to keep more data.

How would I configure NMIS8 to keep 32 days of raw data?

To configure NMIS8 to keep 32 days of raw data (5 minute) and 96 days of 30 minutes of interface data you would make the following change to the interface section.

Keep (days)Summarise (minutes)Model EntryDefault ValueNew Value
32 days5 minutesrows_day23049216
96 days30 minutesrows_week15364608

The entry for the Common-database.nmis model would look like this after the change:

Code Block
themeEmacs
 'interface' => {
   'step_year' => '288',
   'rows_month' => '2268',
   'rows_year' => '1890',
   'step_day' => '1',
   'step_month' => '24',
   'step_week' => '6',
   'rows_day' => '9216',
   'rows_week' => '4608'
 },

This change could be made to all the entries in the Common-database.nmis file if required.

NMIS8 will now create new RRD files with the new scheme defined in the model file.  The resulting file sizes from the change above are:

RRD TypeOld File SizeNew File Size% Increase
Interface (ifInOctets and ifOutOcts)581112 bytes1391364 bytes42%
Packet data1933120 bytes4264508 bytes45%

Can I migrate existing NMIS8 RRD files to the new scheme

Yes, you can take existing NMIS8 RRD files and resize them using RRDTool Resize, the documentation for RRDTool resize is available on the RRDTool website http://oss.oetiker.ch/rrdtool/doc/rrdresize.en.html, in summary it would work like this.

If I wanted to change the amount of data being kept in an existing file, I would first determine the RRA Number for the entry to update, so I would run RRDTool Info on the file the output looks like this:

Code Block
[root@nmisdev64 wanedge1]# /usr/local/rrdtool/bin/rrdtool info wanedge1-fastethernet0-1.rrd
filename = "wanedge1-fastethernet0-1.rrd"
rrd_version = "0003"
step = 300
last_update = 1355967616
header_size = 5256
ds[ifInOctets].index = 0
ds[ifInOctets].type = "COUNTER"
ds[ifInOctets].minimal_heartbeat = 900
ds[ifInOctets].min = 0.0000000000e+00
ds[ifInOctets].max = 1.0240000000e+06
ds[ifInOctets].last_ds = "9695172"
ds[ifInOctets].value = 1.2818317168e+02
ds[ifInOctets].unknown_sec = 0
ds[ifOperStatus].index = 1
ds[ifOperStatus].type = "GAUGE"
ds[ifOperStatus].minimal_heartbeat = 900
ds[ifOperStatus].min = 0.0000000000e+00
ds[ifOperStatus].max = 1.0000000000e+02
ds[ifOperStatus].last_ds = "100"
ds[ifOperStatus].value = 1.6507604000e+03
ds[ifOperStatus].unknown_sec = 0
ds[ifOutOctets].index = 2
ds[ifOutOctets].type = "COUNTER"
ds[ifOutOctets].minimal_heartbeat = 900
ds[ifOutOctets].min = 0.0000000000e+00
ds[ifOutOctets].max = 1.0240000000e+06
ds[ifOutOctets].last_ds = "17185853"
ds[ifOutOctets].value = 2.2330066758e+02
ds[ifOutOctets].unknown_sec = 0
rra[0].cf = "AVERAGE"
rra[0].rows = 2304
rra[0].cur_row = 537
rra[0].pdp_per_row = 1
rra[0].xff = 5.0000000000e-01
rra[0].cdp_prep[0].value = NaN
rra[0].cdp_prep[0].unknown_datapoints = 0
rra[0].cdp_prep[1].value = NaN
rra[0].cdp_prep[1].unknown_datapoints = 0
rra[0].cdp_prep[2].value = NaN
rra[0].cdp_prep[2].unknown_datapoints = 0
rra[1].cf = "AVERAGE"
rra[1].rows = 1536
rra[1].cur_row = 1325
rra[1].pdp_per_row = 6
rra[1].xff = 5.0000000000e-01
rra[1].cdp_prep[0].value = 1.5618120721e+01
rra[1].cdp_prep[0].unknown_datapoints = 0
rra[1].cdp_prep[1].value = 2.0000000000e+02
rra[1].cdp_prep[1].unknown_datapoints = 0
rra[1].cdp_prep[2].value = 2.7509214203e+01
rra[1].cdp_prep[2].unknown_datapoints = 0
rra[2].cf = "AVERAGE"
rra[2].rows = 2268
rra[2].cur_row = 1977
rra[2].pdp_per_row = 24
rra[2].xff = 5.0000000000e-01
rra[2].cdp_prep[0].value = 1.5614431658e+02
rra[2].cdp_prep[0].unknown_datapoints = 0
rra[2].cdp_prep[1].value = 2.0000000000e+03
rra[2].cdp_prep[1].unknown_datapoints = 0
rra[2].cdp_prep[2].value = 2.7504466927e+02
rra[2].cdp_prep[2].unknown_datapoints = 0
rra[3].cf = "AVERAGE"
rra[3].rows = 1890
rra[3].cur_row = 1585
rra[3].pdp_per_row = 288
rra[3].xff = 5.0000000000e-01
rra[3].cdp_prep[0].value = 1.5614431658e+02
rra[3].cdp_prep[0].unknown_datapoints = 0
rra[3].cdp_prep[1].value = 2.0000000000e+03
rra[3].cdp_prep[1].unknown_datapoints = 0
rra[3].cdp_prep[2].value = 2.7504466927e+02
rra[3].cdp_prep[2].unknown_datapoints = 0
rra[4].cf = "MAX"
rra[4].rows = 2304
rra[4].cur_row = 611
rra[4].pdp_per_row = 1
rra[4].xff = 5.0000000000e-01
rra[4].cdp_prep[0].value = NaN
rra[4].cdp_prep[0].unknown_datapoints = 0
rra[4].cdp_prep[1].value = NaN
rra[4].cdp_prep[1].unknown_datapoints = 0
rra[4].cdp_prep[2].value = NaN
rra[4].cdp_prep[2].unknown_datapoints = 0
rra[5].cf = "MAX"
rra[5].rows = 1536
rra[5].cur_row = 1239
rra[5].pdp_per_row = 6
rra[5].xff = 5.0000000000e-01
rra[5].cdp_prep[0].value = 7.8502714737e+00
rra[5].cdp_prep[0].unknown_datapoints = 0
rra[5].cdp_prep[1].value = 1.0000000000e+02
rra[5].cdp_prep[1].unknown_datapoints = 0
rra[5].cdp_prep[2].value = 1.3968230743e+01
rra[5].cdp_prep[2].unknown_datapoints = 0
rra[6].cf = "MAX"
rra[6].rows = 2268
rra[6].cur_row = 251
rra[6].pdp_per_row = 24
rra[6].xff = 5.0000000000e-01
rra[6].cdp_prep[0].value = 7.9934094489e+00
rra[6].cdp_prep[0].unknown_datapoints = 0
rra[6].cdp_prep[1].value = 1.0000000000e+02
rra[6].cdp_prep[1].unknown_datapoints = 0
rra[6].cdp_prep[2].value = 1.4389061029e+01
rra[6].cdp_prep[2].unknown_datapoints = 0
rra[7].cf = "MAX"
rra[7].rows = 1890
rra[7].cur_row = 1714
rra[7].pdp_per_row = 288
rra[7].xff = 5.0000000000e-01
rra[7].cdp_prep[0].value = 7.9934094489e+00
rra[7].cdp_prep[0].unknown_datapoints = 0
rra[7].cdp_prep[1].value = 1.0000000000e+02
rra[7].cdp_prep[1].unknown_datapoints = 0
rra[7].cdp_prep[2].value = 1.4389061029e+01
rra[7].cdp_prep[2].unknown_datapoints = 0
rra[8].cf = "MIN"
rra[8].rows = 2304
rra[8].cur_row = 955
rra[8].pdp_per_row = 1
rra[8].xff = 5.0000000000e-01
rra[8].cdp_prep[0].value = NaN
rra[8].cdp_prep[0].unknown_datapoints = 0
rra[8].cdp_prep[1].value = NaN
rra[8].cdp_prep[1].unknown_datapoints = 0
rra[8].cdp_prep[2].value = NaN
rra[8].cdp_prep[2].unknown_datapoints = 0
rra[9].cf = "MIN"
rra[9].rows = 1536
rra[9].cur_row = 927
rra[9].pdp_per_row = 6
rra[9].xff = 5.0000000000e-01
rra[9].cdp_prep[0].value = 7.7678492474e+00
rra[9].cdp_prep[0].unknown_datapoints = 0
rra[9].cdp_prep[1].value = 1.0000000000e+02
rra[9].cdp_prep[1].unknown_datapoints = 0
rra[9].cdp_prep[2].value = 1.3540983460e+01
rra[9].cdp_prep[2].unknown_datapoints = 0
rra[10].cf = "MIN"
rra[10].rows = 2268
rra[10].cur_row = 720
rra[10].pdp_per_row = 24
rra[10].xff = 5.0000000000e-01
rra[10].cdp_prep[0].value = 7.6268952036e+00
rra[10].cdp_prep[0].unknown_datapoints = 0
rra[10].cdp_prep[1].value = 1.0000000000e+02
rra[10].cdp_prep[1].unknown_datapoints = 0
rra[10].cdp_prep[2].value = 1.2730238700e+01
rra[10].cdp_prep[2].unknown_datapoints = 0
rra[11].cf = "MIN"
rra[11].rows = 1890
rra[11].cur_row = 1641
rra[11].pdp_per_row = 288
rra[11].xff = 5.0000000000e-01
rra[11].cdp_prep[0].value = 7.6268952036e+00
rra[11].cdp_prep[0].unknown_datapoints = 0
rra[11].cdp_prep[1].value = 1.0000000000e+02
rra[11].cdp_prep[1].unknown_datapoints = 0
rra[11].cdp_prep[2].value = 1.2730238700e+01
rra[11].cdp_prep[2].unknown_datapoints = 0

From all of this data I am interested in the following six lines:

Code Block
rra[0].rows = 2304
rra[1].rows = 1536
rra[4].rows = 2304
rra[5].rows = 1536
rra[8].rows = 2304
rra[9].rows = 1536

These entries define the storage of the day and week summaries for RRA entries AVERAGE, MIN and MAX.

The RRDTool resize command can only resize one RRA at a time, and works on adding rows, so we need to add 6912 rows to the daily value (9216 - 2304) and add 3072 rows to the weekly value (4608 - 1536).  The following are the commands required to resize this RRD.

Code Block
cp wanedge1-fastethernet0-1.rrd wanedge1-fastethernet0-1.rrd.bak
/usr/local/rrdtool/bin/rrdtool resize wanedge1-fastethernet0-1.rrd 0 GROW 6912
mv resize.rrd wanedge1-fastethernet0-1.rrd
/usr/local/rrdtool/bin/rrdtool resize wanedge1-fastethernet0-1.rrd 4 GROW 6912
mv resize.rrd wanedge1-fastethernet0-1.rrd
/usr/local/rrdtool/bin/rrdtool resize wanedge1-fastethernet0-1.rrd 8 GROW 6912
mv resize.rrd wanedge1-fastethernet0-1.rrd
/usr/local/rrdtool/bin/rrdtool resize wanedge1-fastethernet0-1.rrd 1 GROW 3072
mv resize.rrd wanedge1-fastethernet0-1.rrd
/usr/local/rrdtool/bin/rrdtool resize wanedge1-fastethernet0-1.rrd 5 GROW 3072
mv resize.rrd wanedge1-fastethernet0-1.rrd
/usr/local/rrdtool/bin/rrdtool resize wanedge1-fastethernet0-1.rrd 9 GROW 3072
mv resize.rrd wanedge1-fastethernet0-1.rrd

This takes a second or two to complete.  This process can be scripted easily enough, and there is a template for this in the NMIS8 distribution in /path/to/nmis8/admin/rrd_file_update.pl, the script would need to determine the RRA numbers by running rrdtool info first and then execute the above rrdtool resize commands for each RRD file.

Conclusion

NMIS8 is a powerful network management system which can keep as much data as you have disk space to store, the defaults make sense for most organisations and provide a good balance between statistical granularity and disk space.