If you ever want to graph interface errors with MRTG you'll find a few posts on mrtg related mailing lists,
however none of them seemed to work with our installation of MRTG. There is no native support in MRTG but you can
specify a template for interfaces via the experimental --if-template flag. The following code is based on an example
by Tobias Oetiker, I have merely added support for multiple OIDs via a for loop. The code is ugly, but it works.
There is one kink to be aware of though: Since there is not always an evenly matched set of ifIN/ifOUT OIDs I've decided
to graph all OIDs on their own. This is achieved by setting
for each OID and by that making sure that MRTG doesn't render 'outgoing' data.
To configure the template you have to fill the 3 arrays special_oid_name, special_oid and special_oid_desc according to your needs, I have included some example OIDs below.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33 | # Author: Tobias Oetiker <tobi@oetiker.ch>
# Date: 2006-09-06
# Purpose: Add an Error graph for each Traffic Graph
# 02/07/2015: add juniper interface errors / Hannes Rist
# i am soooo sorry for this
# see http://www.oidview.com/mibs/2636/JUNIPER-IF-MIB.html
my @special_oid_name = ('ifJnxInFrameErrors', 'ifJnxInQDrops','ifJnxInRunts');
my @special_oid = ('1.3.6.1.4.1.2636.3.3.1.1.10','1.3.6.1.4.1.2636.3.3.1.1.11','1.3.6.1.4.1.2636.3.3.1.1.12');
my @special_oid_desc = ('Framing Errors: The number of input packets which were misaligned.','Drops: The number of packets dropped by the input queue ofthe I/O Manager ASIC.','Runts: Frames received that are smaller than the runt threshold.');
#$target_lines = $default_target_lines."\n";
for (my $i = 0; $i < @special_oid_name; $i++) {
my $el = $default_target_lines;
$el =~ s/^(Target\S+:\s+).+/${1}$special_oid[$i]$if_ref&$special_oid[$i]$if_ref:$router_connect/m; # Error Target
$el =~ s/^([^\s\]]+)/${1}.$special_oid_name[$i]/gm; # Filename for error log and graphs
$el =~ s|</h1>| - $special_oid_name[$i]</h1><span style="color: white; background-color: black;">$special_oid_desc[$i]</span><br />|i;
$el =~ s|^(Title\[.+)|$1 - $special_oid_name[$i]|mi;
$el =~ s/Traffic/$special_oid_name[$i]/;
$el =~ s/^(MaxBytes)(\S+)\s+\d+/$1$2 10000/m; # more than 10'000 errors a second are BIG trouble anyway
$el .= <<LEGEND;
YLegend$2 $special_oid_name[$i] per Minute
ShortLegend$2 e/min
Legend1$2 $special_oid_name[$i] per Minute
Legend3$2 Maximal 5 Minute $special_oid_name[$i]
LegendI$2 $special_oid_name[$i]:
Options$2 perminute,noo
LEGEND
if (oid_pick($router_connect,$v3opt,"$special_oid[$i].$if_index")){
$target_lines .= $el;
}
$target_lines =~ s{<tr>\s+<td>(.+?)</td>\s+<td>(.+?)</td>\s*</tr>}{<tr><td>$1</td>\t<td>$2</td></tr>}g;
}
|
If you want to use it the template has to be passed as an argument to cfgmaker like so (Line 13):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 | /usr/bin/cfgmaker \
--global 'workdir: /var/www/mrtg-rrd' \
--global 'Forks: 5' \
--global 'LogFormat: rrdtool' \
--global 'Options[_]: bits' \
--global 'WithPeak[_]: ymw' \
--no-down \
--show-op-down \
--ifref=name \
--ifdesc=alias \
--enable-ipv6 \
--if-filter="$default && !($if_type ~~ [1, 53, 131])" \
--if-template=if_errors.tmpl \
public@$device:::::2 \
>> $device_err.cfg
|
After that running MRTG with $device_err.cfg will create graphs like this one:
I hope this article is of some help and spares you of many hours searching the web.
Eine Vorstellung.
Wir bloggen jetzt bei Selfnet, ab und an, eventuell tolle Dinge.
Dies ist der erste Schritt um das Wirrwarr auf unserer Seite zu entkäfern.
In Zukunft sollen Projektberichte und Ähnliches hier veröffentlicht werden, die Netzseite soll nur noch für
statische beziehungsweise quasi-statische Inhalte genutzt werden.
In diesem Sinne fröhliches surfen!