fsstat_act_ - Munin wildcard plugin to monitor Solaris file system statistics
This plugin monitors full activity of file system like fsstat -f .
See man fsstat for more details.
Tested with Solaris 10 and 11. And should work with Solaris 10 11/06 or above.
Note:
In Solaris 11, fsstat command can get stats for each non-global zones in
global zone. (see man fsstat)
In global zone, this plugin gets stats of only global zone.
In non-global zones, this plugin reports stats of the non-global zones.
Configuration
This plugin monitors statistics per file system type. Available file system
can be shown by fsstat command.
Make symlink:
cd /path/to/munin/etc/plugins
ln -s /path/to/munin/lib/plugins/fsstat_act_ fsstat_act_zfs
ln -s /path/to/munin/lib/plugins/fsstat_act_ fsstat_act_nfs3
ln -s /path/to/munin/lib/plugins/fsstat_act_ fsstat_act_nfs4
...
#!/bin/bash
: << =cut
=head1 NAME
fsstat_act_ - Munin wildcard plugin to monitor Solaris file system statistics
This plugin monitors full activity of file system like fsstat -f .
See man fsstat for more details.
Tested with Solaris 10 and 11. And should work with Solaris 10 11/06 or above.
Note:
In Solaris 11, fsstat command can get stats for each non-global zones in
global zone. (see man fsstat)
In global zone, this plugin gets stats of only global zone.
In non-global zones, this plugin reports stats of the non-global zones.
=head1 CONFIGURATION
This plugin monitors statistics per file system type. Available file system
can be shown by fsstat command.
Make symlink:
cd /path/to/munin/etc/plugins
ln -s /path/to/munin/lib/plugins/fsstat_act_ fsstat_act_zfs
ln -s /path/to/munin/lib/plugins/fsstat_act_ fsstat_act_nfs3
ln -s /path/to/munin/lib/plugins/fsstat_act_ fsstat_act_nfs4
...
=head1 ENVIRONMENT VARIABLES
None
=head1 AUTHOR
K.Cima https://github.com/shakemid
=head1 LICENSE
GPLv2
=head1 Magic markers
#%# family=contrib#%# capabilities=autoconf suggest=cut
# Include plugin.sh
. "${MUNIN_LIBDIR:-}/plugins/plugin.sh"# Shell options
set -o nounset # Like perl use strict;# Set environment variables
plugin_name=${0##*/}
fs_type=${plugin_name##*_}
name_regexp='/^vopstats_(?![0-9a-f]{7})[a-z]/'# data source of fsstat
stat_regexp='/^(?!(class|crtime|snaptime|.*_bytes))/'# Graph settings
global_attr="
graph_title File system statistics - Activities of $( echo "$fs_type" | tr '[:lower:]''[:upper:]') graph_category disk
graph_args --base 1000
graph_vlabel Counts per second
graph_info File system statistics - Activities of $( echo "$fs_type" | tr '[:lower:]''[:upper:]')"# Functions
get_zone_id(){
local osver zonename zoneid
# Note: Solaris 11 fsstat supports statistics per zone. Solaris 10 does not.
zoneid=0
osver=$( uname -r | cut -d. -f2 )if["$osver" -ge 11]; then
zonename=$( zonename )
zoneid=$( /usr/sbin/zoneadm list -p | awk -F: '$2 == "'"$zonename"'" { print $1 }')fi
echo "$zoneid"}
autoconf(){if which kstat >/dev/null ; then
echo yes
else
echo "no (failed to find executable 'kstat')"fi}
suggest(){# Print file systems which look active
kstat -p "unix:${zone_id}:${name_regexp}:/^(read_bytes|write_bytes)\$/"\
| sed -e 's/vopstats_//' -e 's/:/ /g'\
| awk '{
sum[ $3 ] += $5
}
END {
for ( i in sum ) {
if ( sum[i] != 0 ) {
print i
}
}
}' | sort
}
config(){
local stat
# Print global attributes
echo "$global_attr" | sed -e 's/^ *//' -e '/^$/d'# Get stat names by kstat
kstat -p "unix:${zone_id}:vopstats_${fs_type}:${stat_regexp}"\
| sed -e 's/vopstats_//' -e 's/:/ /g' | awk '{ print $4 }' | sort \
| while read -r stat
do# Print data attributes
echo "${stat}.label ${stat#n}"
echo "${stat}.graph line"
echo "${stat}.type DERIVE"
echo "${stat}.min 0"done}
fetch(){
local stat value
# Get fs names, stat names and values by kstat# kstat output example:# $ kstat -p 'unix::/^vopstats_[a-z]/:nread'# unix:0:vopstats_autofs:nread 2# unix:0:vopstats_hsfs:nread 407790# ...
kstat -p "unix:${zone_id}:vopstats_${fs_type}:${stat_regexp}"\
| sed -e 's/vopstats_//' -e 's/:/ /g' | awk '{ print $4,$5 }'\
| while read -r stat value
do
echo "${stat}.value ${value}"done}# Main
zone_id=$( get_zone_id )case${1:-} in
autoconf)
autoconf
;;
suggest)
suggest
;;
config)
config
if["${MUNIN_CAP_DIRTYCONFIG:-0}"="1"]; then fetch; fi
;;
*)
fetch
;;
esac
exit 0