2
0
mirror of https://github.com/munin-monitoring/contrib.git synced 2018-11-08 00:59:34 +01:00
contrib-munin/plugins/network/multibandwidth

131 lines
3.8 KiB
Plaintext
Raw Normal View History

#!/bin/sh
. "$MUNIN_LIBDIR/plugins/plugin.sh"
: <<=cut
=head1 NAME
multibandwidth - Plugin to monitor the bandwidth between localhost and serveral hosts.
=head1 APPLICABLE SYSTEMS
All systems with “bash”, and “munin”
=head1 REQUIREMENTS
bing installed.
You can install bing by using (Ubuntu/Debian): apt-get install bing
=head1 CONFIGURATION
The following example configuration shows all settings. Only "hosts" is required for
minimal configuration.
[multibandwidth]
user root
env.hosts example.org example2.org example3.org
env.samples 15
env.small_packet_size 44
env.big_packet_size 108
env.max_valid_bps 15728640
- env.hosts: space separated list of hostnames or IPs of the hosts to calculate the bandwidth.
This setting is required.
- env.samples: Reset stats after sending this number of ECHO_REQUEST packets.
Defaults to 15 samples.
- env.small_packet_size: Specifies the number of data bytes to be sent in the small
2017-03-22 15:53:53 +01:00
packets. The default and minimum value is 44.
- env.big_packet_size: Specifies the number of data bytes to be sent in the big
2017-03-22 15:53:53 +01:00
packets. The default is 108. The size should be chosen so that big packet roundtrip times
are long enough to be accurately measured.
- env.max_valid_bps: bing have some random spikes. This variable is used to indicate
the maximum value of mbps that can be recorded (in bps).
Defaults to the empty string (no validity check).
=head1 MAGIC MARKERS
#%# capabilities=autoconf
=head1 VERSION
1.1.17
=head1 AUTHOR
Jose Manuel Febrer Cortés <https://www.linkedin.com/in/jfebrer/>
2017-03-22 15:53:53 +01:00
Marco Bertolas help <https://www.linkedin.com/in/bertolamarco/>
=head1 LICENSE
GPLv2
=cut
hosts=${hosts:-}
samples=${samples:-15}
small_packet_size=${small_packet_size:-44}
big_packet_size=${big_packet_size:-108}
max_valid_bps=${max_valid_bps:-15728640}
case $1 in
config)
echo graph_title MultiBandwidth
2017-03-23 11:15:32 +01:00
echo 'graph_vlabel bps'
2017-03-22 15:53:53 +01:00
echo 'graph_args --base 1024 -l 0'
echo 'graph_scale yes'
echo 'graph_category network'
echo 'graph_info This graph shows the bandwidth between localhost and serveral hosts'
for host in $hosts; do
2017-03-23 11:15:32 +01:00
fieldname="host_$(clean_fieldname "$host")"
echo "$fieldname.label $host"
echo "$fieldname.draw LINE2"
echo "$fieldname.info Bandwidth statistics for $host"
done
exit 0;;
autoconf)
if command -v bing >/dev/null 2>&1; then
echo 'yes'
exit 0;
else
echo 'no (bing not installed)'
exit 0;
fi
esac
#Calculating the bandwidth
for host in $hosts; do
2017-03-23 11:15:32 +01:00
fieldname="host_$(clean_fieldname "$host")"
2017-03-22 15:53:53 +01:00
SPEED=$(timeout 6 bing localhost "$host" -n -c 1 -e "$samples" -s "$small_packet_size" -S "$big_packet_size" 2>/dev/null \
|grep "estimated link" -A 2 \
| grep bps \
| awk '{print $2}' \
| cut -d "b" -f1)
if echo "$SPEED" | grep -q "M"; then
RATE=$(echo "$SPEED" | awk '{ print int($1 * 1024 * 1024); }')
elif echo "$SPEED" | grep -q "K"; then
RATE=$(echo "$SPEED" | awk '{ print int($1 * 1024); }')
elif echo "$SPEED" | grep -q "G"; then
RATE=$(echo "$SPEED" | awk '{ print int($1 * 1024 * 1024 * 1024); }')
2017-03-22 15:53:53 +01:00
else
RATE="U"
2017-03-23 11:15:32 +01:00
echo "Error: no data (timeout)" >&2
2017-03-22 15:53:53 +01:00
fi
if [ -n "$max_valid_bps" ] && [ "$RATE" -gt "$max_valid_bps" ]; then
# the value is outside of the allowed range; discard it
RATE="U"
fi
echo "${fieldname}.value $RATE"
done