mirror of
https://github.com/munin-monitoring/contrib.git
synced 2025-07-21 18:41:03 +00:00
127 lines
3.2 KiB
Bash
Executable file
127 lines
3.2 KiB
Bash
Executable file
#!/bin/bash
|
|
#%# family=auto
|
|
|
|
: << EOF
|
|
=head1 NAME
|
|
zfs_list - Plugin to monitor ZFS Filesystems
|
|
|
|
This is an extension of the zfs_fs plugin
|
|
modified as a multigraph to graph all zfs
|
|
filesystems it can find
|
|
|
|
=head1 CONFIGURATION
|
|
plugin config:
|
|
[zfs_list]
|
|
env.ignore_datasets_pattern <Datasets to ignore; String for grep>
|
|
|
|
|
|
=head1 AUTHOR
|
|
=over 4
|
|
=item * Adam Michel (elfurbe@furbism.com)
|
|
=back
|
|
|
|
|
|
=head1 MAGIC MARKERS
|
|
=begin comment
|
|
These magic markers are used by munin-node-configure when installing
|
|
munin-node.
|
|
=end comment
|
|
#%# family=auto
|
|
=cut
|
|
|
|
EOF
|
|
|
|
|
|
. "$MUNIN_LIBDIR/plugins/plugin.sh"
|
|
|
|
need_multigraph()
|
|
|
|
if [ "$1" = "autoconf" ]; then
|
|
# Makes little sense to autoconf if you can't suggest
|
|
echo no
|
|
exit 0
|
|
fi
|
|
|
|
if [ "$1" = "suggest" ]; then
|
|
exit 0
|
|
fi
|
|
|
|
# set standard value
|
|
ignore_datasets_pattern=${ignore_datasets_pattern:-}
|
|
|
|
# set search term, based on if the searh pattern is set
|
|
if [ -n "$ignore_datasets_pattern" ]; then
|
|
search_term=$(zfs list -Hp -t filesystem,volume | grep -v "$ignore_datasets_pattern" | awk '{print $1}')
|
|
else
|
|
search_term=$(zfs list -Hp -t filesystem,volume | awk '{print $1}')
|
|
fi
|
|
|
|
|
|
|
|
if [ "$1" = "config" ]; then
|
|
for i in $search_term; do
|
|
values=( $(zfs get -p usedbydataset,usedbychildren,usedbysnapshots,usedbyrefreservation,available,quota $i | awk 'BEGIN {total=0;} { if( NR==1 ) next; } !/quota/ {total=total+$3;} {print $3} END{print total;}') )
|
|
fsname=$(clean_fieldname $(echo "$i" | sed 's/\//__/g'))
|
|
|
|
echo <<EOF "multigraph zfs_list_$fsname
|
|
graph_title $fsname usage
|
|
graph_order usedbydataset usedbychildren usedbysnapshots usedbyrefreservation available total quota
|
|
graph_args --base 1024 -r -l 0 --vertical-label Bytes --upper-limit ${values[6]}
|
|
graph_info This graph shows how a zfs filesystem is used.
|
|
graph_category fs
|
|
graph_period second
|
|
usedbydataset.label UsedByDataset
|
|
usedbydataset.draw AREA
|
|
usedbydataset.info Used space by Dataset
|
|
usedbydataset.colour FF0000
|
|
usedbychildren.label UsedByChildren
|
|
usedbychildren.draw STACK
|
|
usedbychildren.info Used space by children
|
|
usedbychildren.colour FFCC33
|
|
usedbysnapshots.label UsedBySnapshots
|
|
usedbysnapshots.draw STACK
|
|
usedbysnapshots.info Used space by snapshot
|
|
usedbysnapshots.colour 0000FF
|
|
usedbyrefreservation.label Usedbyrefreservation
|
|
usedbyrefreservation.draw STACK
|
|
usedbyrefreservation.info Used space by Ref Reservation
|
|
usedbyrefreservation.colour 33CCFF
|
|
available.label Available
|
|
available.draw STACK
|
|
available.info Free space
|
|
available.colour 00FF00
|
|
total.label Total
|
|
total.draw LINE1
|
|
total.info Total
|
|
total.colour 000000
|
|
quota.label Quota
|
|
quota.draw LINE1
|
|
quota.info Quota
|
|
quota.colour 555555"
|
|
EOF
|
|
done
|
|
exit 0
|
|
fi
|
|
|
|
for i in $search_term; do
|
|
values=( $(zfs get -p usedbydataset,usedbychildren,usedbysnapshots,usedbyrefreservation,available,quota $i | awk 'BEGIN {total=0;} { if( NR==1 ) next; } !/quota/ {total=total+$3;} {print $3} END{print total;}') )
|
|
fsname=$(clean_fieldname $(echo "$i" | sed 's/\//__/g'))
|
|
|
|
if [ ${values[5]} = "-" ]; then
|
|
quota=0
|
|
else
|
|
quota=${values[5]}
|
|
fi
|
|
|
|
echo <<EOF "multigraph zfs_list_$fsname
|
|
usedbydataset.value ${values[0]}
|
|
usedbysnapshots.value ${values[2]}
|
|
usedbychildren.value ${values[1]}
|
|
usedbyrefreservation.value ${values[3]}
|
|
available.value ${values[4]}
|
|
total.value ${values[6]}
|
|
quota.value $quota"
|
|
EOF
|
|
done
|
|
|
|
exit 0
|