1
0
Fork 0
mirror of https://github.com/munin-monitoring/contrib.git synced 2025-07-21 18:41:03 +00:00
Munin-Contrib/plugins/docker/docker_volumesize
Marco Schmidt d058e63ad3 remove images with size 0
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.
2025-04-10 15:59:03 +02:00

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"