mirror of
https://github.com/munin-monitoring/contrib.git
synced 2025-07-21 18:41:03 +00:00
To narrow the list of volumes to be shown in munin, all the small volumes with size "0B" are not shown. As size 0B is not relevant as volumesize, this these volumes add no additional information.
84 lines
2.4 KiB
Bash
84 lines
2.4 KiB
Bash
#!/bin/bash
|
|
#%# family=auto
|
|
|
|
: << EOF
|
|
=head1 NAME
|
|
docker_volumesize - Plugin to monitor the sizes of docker volumes.
|
|
|
|
=head1 AUTHOR
|
|
|
|
Michael Grote (michael.grote@posteo.de)
|
|
|
|
=head1 MAGIC MARKERS
|
|
|
|
#%# family=auto
|
|
#%# capabilities=autoconf
|
|
|
|
=head1 LICENSE
|
|
|
|
GPLv3 or later
|
|
|
|
SPDX-License-Identifier: GPL-3.0-or-later
|
|
|
|
=cut
|
|
|
|
EOF
|
|
|
|
|
|
if [ "$1" = "autoconf" ]; then
|
|
if ! command -v jq &> /dev/null; then
|
|
echo "no (jq could not be found)"
|
|
elif ! command -v docker &> /dev/null; then
|
|
echo "no (docker could not be found)"
|
|
elif ! command -v bc &> /dev/null; then
|
|
echo "no (bc could not be found)"
|
|
else
|
|
echo "yes"
|
|
fi
|
|
exit 0
|
|
fi
|
|
|
|
volume_info=$(docker system df -v --format '{{json .Volumes}}' | jq -r '.[] | select(.Size != "0B" ) | "\(.Name):\(.Size):\(.Labels)"')
|
|
|
|
|
|
|
|
if [ "$1" = "config" ]; then
|
|
echo "multigraph volumesize"
|
|
echo "graph_title Docker volume size"
|
|
echo "graph_vlabel Bytes"
|
|
echo "graph_category virtualization"
|
|
echo "graph_args -l 0 --base 1024"
|
|
echo "graph_info This graph shows the size per volume."
|
|
while IFS= read -r line; do
|
|
# ignore empty lines
|
|
[ -n "$line" ] || continue
|
|
echo "$line" | awk 'BEGIN { FS = ":" } { label = substr($1, 1, 30); print $1 ".label " label }'
|
|
# display info only when labels are set
|
|
if [ -n "$(echo "$line" | awk 'BEGIN { FS = ":" } { print $3 }')" ]; then
|
|
echo "$line" | awk 'BEGIN { FS = ":" } { print $1".info "$3 }'
|
|
fi
|
|
echo "$line" | awk 'BEGIN { FS = ":" } { print $1".draw AREASTACK" }'
|
|
done <<< "$volume_info"
|
|
exit 0
|
|
fi
|
|
|
|
echo "multigraph volumesize"
|
|
while IFS= read -r line; do
|
|
# ignore empty lines
|
|
[ -n "$line" ] || continue
|
|
name=$(echo "$line" | awk 'BEGIN { FS = ":" } { print $1 }')
|
|
value=$(echo "$line" | awk 'BEGIN { FS = ":" } { print $2 }')
|
|
|
|
if [[ $value =~ ([0-9.]+)TB$ ]]; then
|
|
bytes=$(echo "$(echo $value | sed 's/[^0-9.]//g') * 1024 * 1024 * 1024 * 1024" | bc)
|
|
elif [[ $value =~ ([0-9.]+)GB$ ]]; then
|
|
bytes=$(echo "$(echo $value | sed 's/[^0-9.]//g') * 1024 * 1024 * 1024" | bc)
|
|
elif [[ $value =~ ([0-9.]+)MB$ ]]; then
|
|
bytes=$(echo "$(echo $value | sed 's/[^0-9.]//g') * 1024 * 1024" | bc)
|
|
elif [[ $value =~ ([0-9.]+)kB$ ]]; then
|
|
bytes=$(echo "$(echo $value | sed 's/[^0-9.]//g') * 1024" | bc)
|
|
elif [[ $value =~ ([0-9.]+)B$ ]]; then
|
|
bytes=$(echo "$(echo $value | sed 's/[^0-9.]//g')")
|
|
fi
|
|
echo "$name.value" "$bytes"
|
|
done <<< "$volume_info"
|