feature: extended graphing for sla - icmp-jitter #4341

* - Added more graphs for rtt_type: icmpjitter

* - use $fields as that is the standard throughout the code.
This commit is contained in:
Aaron Daniels
2016-09-07 02:19:10 +10:00
committed by Neil Lathwood
parent 4001f8c60a
commit 948d4f67a1
8 changed files with 295 additions and 6 deletions

View File

@@ -0,0 +1,36 @@
<?php
/*
* LibreNMS module to Graph Cisco IPSLA ICMP Jitter metrics
*
* Copyright (c) 2016 Aaron Daniels <aaron@daniels.id.au>
*
* This program is free software: you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
* Free Software Foundation, either version 3 of the License, or (at your
* option) any later version. Please see LICENSE.txt at the top level of
* the source code distribution for details.
*/
$sla = dbFetchRow('SELECT `sla_nr` FROM `slas` WHERE `sla_id` = ?', array($vars['id']));
require 'includes/graphs/common.inc.php';
$rrd_options .= ' -l 0 -E ';
$rrd_filename = rrd_name($device['hostname'], array('sla', $sla['sla_nr'], 'icmpjitter'));
if (file_exists($rrd_filename)) {
$rrd_options .= " COMMENT:' Cur Min Max Avg\\n'";
$rrd_options .= " DEF:SD=" . $rrd_filename . ":JitterIAJOut:AVERAGE ";
$rrd_options .= " LINE1.25:SD#0000ee:'Responder (ms) ' ";
$rrd_options .= " GPRINT:SD:LAST:'%5.2lf' ";
$rrd_options .= " GPRINT:SD:MIN:'%5.2lf' ";
$rrd_options .= " GPRINT:SD:MAX:'%5.2lf' ";
$rrd_options .= " GPRINT:SD:AVERAGE:'%5.2lf'\\\l ";
$rrd_options .= " DEF:DS=" . $rrd_filename . ":JitterIAJIn:AVERAGE ";
$rrd_options .= " LINE1.25:DS#008C00:'Source (ms) ' ";
$rrd_options .= " GPRINT:DS:LAST:'%5.2lf' ";
$rrd_options .= " GPRINT:DS:MIN:'%5.2lf' ";
$rrd_options .= " GPRINT:DS:MAX:'%5.2lf' ";
$rrd_options .= " GPRINT:DS:AVERAGE:'%5.2lf'\\\l ";
}

View File

@@ -0,0 +1,36 @@
<?php
/*
* LibreNMS module to Graph Cisco IPSLA ICMP Jitter metrics
*
* Copyright (c) 2016 Aaron Daniels <aaron@daniels.id.au>
*
* This program is free software: you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
* Free Software Foundation, either version 3 of the License, or (at your
* option) any later version. Please see LICENSE.txt at the top level of
* the source code distribution for details.
*/
$sla = dbFetchRow('SELECT `sla_nr` FROM `slas` WHERE `sla_id` = ?', array($vars['id']));
require 'includes/graphs/common.inc.php';
$rrd_options .= ' -l 0 -E ';
$rrd_filename = rrd_name($device['hostname'], array('sla', $sla['sla_nr'], 'icmpjitter'));
if (file_exists($rrd_filename)) {
$rrd_options .= " COMMENT:' Cur Min Max Avg\\n'";
$rrd_options .= " DEF:SD=" . $rrd_filename . ":JitterAvgSD:AVERAGE ";
$rrd_options .= " LINE1.25:SD#0000ee:'Src to Dst (ms) ' ";
$rrd_options .= " GPRINT:SD:LAST:'%5.2lf' ";
$rrd_options .= " GPRINT:SD:MIN:'%5.2lf' ";
$rrd_options .= " GPRINT:SD:MAX:'%5.2lf' ";
$rrd_options .= " GPRINT:SD:AVERAGE:'%5.2lf'\\\l ";
$rrd_options .= " DEF:DS=" . $rrd_filename . ":JitterAvgDS:AVERAGE ";
$rrd_options .= " LINE1.25:DS#008C00:'Dst to Src (ms) ' ";
$rrd_options .= " GPRINT:DS:LAST:'%5.2lf' ";
$rrd_options .= " GPRINT:DS:MIN:'%5.2lf' ";
$rrd_options .= " GPRINT:DS:MAX:'%5.2lf' ";
$rrd_options .= " GPRINT:DS:AVERAGE:'%5.2lf'\\\l ";
}

View File

@@ -0,0 +1,36 @@
<?php
/*
* LibreNMS module to Graph Cisco IPSLA ICMP Jitter metrics
*
* Copyright (c) 2016 Aaron Daniels <aaron@daniels.id.au>
*
* This program is free software: you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
* Free Software Foundation, either version 3 of the License, or (at your
* option) any later version. Please see LICENSE.txt at the top level of
* the source code distribution for details.
*/
$sla = dbFetchRow('SELECT `sla_nr` FROM `slas` WHERE `sla_id` = ?', array($vars['id']));
require 'includes/graphs/common.inc.php';
$rrd_options .= ' -l 0 -E ';
$rrd_filename = rrd_name($device['hostname'], array('sla', $sla['sla_nr'], 'icmpjitter'));
if (file_exists($rrd_filename)) {
$rrd_options .= " COMMENT:' Cur Min Max Avg\\n'";
$rrd_options .= " DEF:SD=" . $rrd_filename . ":LatencyOWAvgSD:AVERAGE ";
$rrd_options .= " LINE1.25:SD#0000ee:'Src to Dst (ms) ' ";
$rrd_options .= " GPRINT:SD:LAST:'%5.2lf' ";
$rrd_options .= " GPRINT:SD:MIN:'%5.2lf' ";
$rrd_options .= " GPRINT:SD:MAX:'%5.2lf' ";
$rrd_options .= " GPRINT:SD:AVERAGE:'%5.2lf'\\\l ";
$rrd_options .= " DEF:DS=" . $rrd_filename . ":LatencyOWAvgDS:AVERAGE ";
$rrd_options .= " LINE1.25:DS#008C00:'Dst to Src (ms) ' ";
$rrd_options .= " GPRINT:DS:LAST:'%5.2lf' ";
$rrd_options .= " GPRINT:DS:MIN:'%5.2lf' ";
$rrd_options .= " GPRINT:DS:MAX:'%5.2lf' ";
$rrd_options .= " GPRINT:DS:AVERAGE:'%5.2lf'\\\l ";
}

View File

@@ -0,0 +1,36 @@
<?php
/*
* LibreNMS module to Graph Cisco IPSLA ICMP Jitter metrics
*
* Copyright (c) 2016 Aaron Daniels <aaron@daniels.id.au>
*
* This program is free software: you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
* Free Software Foundation, either version 3 of the License, or (at your
* option) any later version. Please see LICENSE.txt at the top level of
* the source code distribution for details.
*/
$sla = dbFetchRow('SELECT `sla_nr` FROM `slas` WHERE `sla_id` = ?', array($vars['id']));
require 'includes/graphs/common.inc.php';
$rrd_options .= ' -l 0 -E ';
$rrd_filename = rrd_name($device['hostname'], array('sla', $sla['sla_nr'], 'icmpjitter'));
if (file_exists($rrd_filename)) {
$rrd_options .= " COMMENT:' Cur Min Max Avg\\n'";
$rrd_options .= " DEF:PL=" . $rrd_filename . ":PacketLoss:AVERAGE ";
$rrd_options .= " LINE1.25:PL#008C00:'Packets Lost ' ";
$rrd_options .= " GPRINT:PL:LAST:%3.0lf ";
$rrd_options .= " GPRINT:PL:MIN:%3.0lf ";
$rrd_options .= " GPRINT:PL:MAX:%3.0lf ";
$rrd_options .= " GPRINT:PL:AVERAGE:'%3.0lf'\\\l ";
$rrd_options .= " DEF:PLA=" . $rrd_filename . ":PacketLateArrival:AVERAGE ";
$rrd_options .= " LINE1.25:PLA#CC0000:'Late Arrival ' ";
$rrd_options .= " GPRINT:PLA:LAST:%3.0lf ";
$rrd_options .= " GPRINT:PLA:MIN:%3.0lf ";
$rrd_options .= " GPRINT:PLA:MAX:%3.0lf ";
$rrd_options .= " GPRINT:PLA:AVERAGE:'%3.0lf'\\\l ";
}

View File

@@ -0,0 +1,36 @@
<?php
/*
* LibreNMS module to Graph Cisco IPSLA ICMP Jitter metrics
*
* Copyright (c) 2016 Aaron Daniels <aaron@daniels.id.au>
*
* This program is free software: you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
* Free Software Foundation, either version 3 of the License, or (at your
* option) any later version. Please see LICENSE.txt at the top level of
* the source code distribution for details.
*/
$sla = dbFetchRow('SELECT `sla_nr` FROM `slas` WHERE `sla_id` = ?', array($vars['id']));
require 'includes/graphs/common.inc.php';
$rrd_options .= ' -l 0 -E ';
$rrd_filename = rrd_name($device['hostname'], array('sla', $sla['sla_nr'], 'icmpjitter'));
if (file_exists($rrd_filename)) {
$rrd_options .= " COMMENT:' Cur Min Max Avg\\n'";
$rrd_options .= " DEF:SD=" . $rrd_filename . ":PacketOosSD:AVERAGE ";
$rrd_options .= " LINE1.25:SD#0000ee:'Src to Dst (ms) ' ";
$rrd_options .= " GPRINT:SD:LAST:'%5.2lf' ";
$rrd_options .= " GPRINT:SD:MIN:'%5.2lf' ";
$rrd_options .= " GPRINT:SD:MAX:'%5.2lf' ";
$rrd_options .= " GPRINT:SD:AVERAGE:'%5.2lf'\\\l ";
$rrd_options .= " DEF:DS=" . $rrd_filename . ":PacketOosDS:AVERAGE ";
$rrd_options .= " LINE1.25:DS#008C00:'Dst to Src (ms) ' ";
$rrd_options .= " GPRINT:DS:LAST:'%5.2lf' ";
$rrd_options .= " GPRINT:DS:MIN:'%5.2lf' ";
$rrd_options .= " GPRINT:DS:MAX:'%5.2lf' ";
$rrd_options .= " GPRINT:DS:AVERAGE:'%5.2lf'\\\l ";
}

View File

@@ -0,0 +1,79 @@
<div class="panel-heading">
<h3 class="panel-title">Average Latency One Way</h3>
</div>
<div class="panel-body">
<?php
$graph_array = array();
$graph_array['device'] = $device['device_id'];
$graph_array['height'] = '100';
$graph_array['width'] = '215';
$graph_array['to'] = $config['time']['now'];
$graph_array['type'] = 'device_sla_icmpjitter_latency';
$graph_array['id'] = $vars['id'];
require 'includes/print-graphrow.inc.php';
?>
</div>
<div class="panel-heading">
<h3 class="panel-title">Average Jitter</h3>
</div>
<div class="panel-body">
<?php
$graph_array = array();
$graph_array['device'] = $device['device_id'];
$graph_array['height'] = '100';
$graph_array['width'] = '215';
$graph_array['to'] = $config['time']['now'];
$graph_array['type'] = 'device_sla_icmpjitter_jitter';
$graph_array['id'] = $vars['id'];
require 'includes/print-graphrow.inc.php';
?>
</div>
<div class="panel-heading">
<h3 class="panel-title">Packet Out of Sequence</h3>
</div>
<div class="panel-body">
<?php
$graph_array = array();
$graph_array['device'] = $device['device_id'];
$graph_array['height'] = '100';
$graph_array['width'] = '215';
$graph_array['to'] = $config['time']['now'];
$graph_array['type'] = 'device_sla_icmpjitter_oos';
$graph_array['id'] = $vars['id'];
require 'includes/print-graphrow.inc.php';
?>
</div>
<div class="panel-heading">
<h3 class="panel-title">Lost Packets (Loss, Skipped, Late Arrival)</h3>
</div>
<div class="panel-body">
<?php
$graph_array = array();
$graph_array['device'] = $device['device_id'];
$graph_array['height'] = '100';
$graph_array['width'] = '215';
$graph_array['to'] = $config['time']['now'];
$graph_array['type'] = 'device_sla_icmpjitter_lost';
$graph_array['id'] = $vars['id'];
require 'includes/print-graphrow.inc.php';
?>
</div>
<div class="panel-heading">
<h3 class="panel-title">Inter-Arrival Jitter (RFC 1889)</h3>
</div>
<div class="panel-body">
<?php
$graph_array = array();
$graph_array['device'] = $device['device_id'];
$graph_array['height'] = '100';
$graph_array['width'] = '215';
$graph_array['to'] = $config['time']['now'];
$graph_array['type'] = 'device_sla_icmpjitter_iajitter';
$graph_array['id'] = $vars['id'];
require 'includes/print-graphrow.inc.php';
?>
</div>

View File

@@ -96,8 +96,8 @@ foreach ($slas as $sla) {
$name .= ' (Owner: '.$sla['owner'].')';
}
// Jitter has more graphs. Display a sub-page
if ($sla['rtt_type'] == 'jitter') {
// These Types have more graphs. Display a sub-page
if (($sla['rtt_type'] == 'jitter') || ($sla['rtt_type'] == 'icmpjitter')) {
$name = '<a href="'.generate_url($vars, array('tab' => "sla", 'id' => $sla['sla_id'])).'">'.$name.'</a>';
} else {
$name = htmlentities($name);

View File

@@ -48,7 +48,7 @@ if (count($slas > 0)) {
$tags = compact('sla_nr', 'rrd_name', 'rrd_def');
data_update($device, 'sla', $tags, $fields);
// Let's gather some per-type metrics.
// Let's gather some per-type fields.
switch ($rtt_type) {
case 'jitter':
$jitter = array(
@@ -80,12 +80,42 @@ if (count($slas > 0)) {
);
$tags = compact('rrd_name', 'rrd_def', 'sla_nr', 'rtt_type');
data_update($device, 'sla', $tags, $jitter);
$metrics = array_merge($metrics, $jitter);
$fields = array_merge($fields, $jitter);
break;
case 'icmpjitter':
$icmpjitter = array(
'PacketLoss' => $rttMonLatestOper['1.3.6.1.4.1.9.9.42.1.5.4.1.26'][$sla_nr],
'PacketOosSD' => $rttMonLatestOper['1.3.6.1.4.1.9.9.42.1.5.4.1.28'][$sla_nr],
'PacketOosDS' => $rttMonLatestOper['1.3.6.1.4.1.9.9.42.1.5.4.1.29'][$sla_nr],
'PacketLateArrival' => $rttMonLatestOper['1.3.6.1.4.1.9.9.42.1.5.4.1.32'][$sla_nr],
'JitterAvgSD' => $rttMonLatestOper['1.3.6.1.4.1.9.9.42.1.5.4.1.45'][$sla_nr],
'JitterAvgDS' => $rttMonLatestOper['1.3.6.1.4.1.9.9.42.1.5.4.1.46'][$sla_nr],
'LatencyOWAvgSD' => $rttMonLatestOper['1.3.6.1.4.1.9.9.42.1.5.4.1.47'][$sla_nr],
'LatencyOWAvgDS' => $rttMonLatestOper['1.3.6.1.4.1.9.9.42.1.5.4.1.48'][$sla_nr],
'JitterIAJOut' => $rttMonLatestOper['1.3.6.1.4.1.9.9.42.1.5.4.1.49'][$sla_nr],
'JitterIAJIn' => $rttMonLatestOper['1.3.6.1.4.1.9.9.42.1.5.4.1.50'][$sla_nr],
);
$rrd_name = array('sla', $sla_nr, $rtt_type);
$rrd_def = array(
'DS:PacketLoss:GAUGE:600:0:U',
'DS:PacketOosSD:GAUGE:600:0:U',
'DS:PacketOosDS:GAUGE:600:0:U',
'DS:PacketLateArrival:GAUGE:600:0:U',
'DS:JitterAvgSD:GAUGE:600:0:U',
'DS:JitterAvgDS:GAUGE:600:0:U',
'DS:LatencyOWAvgSD:GAUGE:600:0:U',
'DS:LatencyOWAvgDS:GAUGE:600:0:U',
'DS:JitterIAJOut:GAUGE:600:0:U',
'DS:JitterIAJIn:GAUGE:600:0:U',
);
$tags = compact('rrd_name', 'rrd_def', 'sla_nr', 'rtt_type');
data_update($device, 'sla', $tags, $icmpjitter);
$fields = array_merge($fields, $icmpjitter);
break;
}
d_echo("The following metrics were collected for #".$sla['sla_nr'].":\n");
d_echo($metrics);
d_echo("The following datasources were collected for #".$sla['sla_nr'].":\n");
d_echo($fields);
// Update the DB if necessary
if (count($update) > 0) {