mirror of
https://github.com/munin-monitoring/contrib.git
synced 2018-11-08 00:59:34 +01:00
131 lines
3.7 KiB
Bash
Executable File
131 lines
3.7 KiB
Bash
Executable File
#!/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
|
||
packets. The default and minimum value is 44.
|
||
|
||
- env.big_packet_size: Specifies the number of data bytes to be sent in the big
|
||
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/>
|
||
Marco Bertola’s 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
|
||
echo 'graph_vlabel bps'
|
||
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
|
||
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 2>/dev/null; then
|
||
echo 'yes'
|
||
else
|
||
echo 'no (bing not installed)'
|
||
fi
|
||
exit 0
|
||
;;
|
||
esac
|
||
|
||
|
||
# Calculating the bandwidth
|
||
for host in $hosts; do
|
||
fieldname="host_$(clean_fieldname "$host")"
|
||
|
||
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); }')
|
||
else
|
||
RATE="U"
|
||
echo "Error: no data (timeout)" >&2
|
||
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
|