#!/usr/bin/perl # -*- perl -*- =head1 NAME lustre_df - Plugin to monitor Lustre 1.8.x (cluster FS) storage objects MDT,OST's usage in percents =head1 CONFIGURATION Path to lfs binary. Configuration is done through $lfs_bin variable, for example by default $lfs_bin = "/usr/bin/lfs", see below. =head1 NOTES Monitoring node - lustre client with mounted lustre =head1 AUTHOR Ropchan Sergey =head1 LICENSE GPLv2 =cut use Munin::Plugin; my $lfs_bin = "/usr/bin/lfs"; if ($ARGV[0] and $ARGV[0] eq "autoconf") { if (-r $lfs_bin) { print "yes\n"; exit 0; } else { print "no ($lfs_bin found)\n"; exit 0; } } my @output = `$lfs_bin df -h`; &print_values; if ($ARGV[0] and $ARGV[0] eq "config") { print "graph_title Lustre cluster storage objects usage in percent\n"; print "graph_args --base 1000\n"; print "graph_vlabel % usage\n"; print "graph_scale no\n"; print "graph_category lustre\n"; &print_labels; exit 0; } sub print_labels { for $_ (@output) { #storage objects if (/^\S+\s+\S+\s+\S+\s+\S+\s+(\d+)\%\s+\S+\[(.*)\:(\d+)\]/i) { my $name = $2.$3; print $name.".label ", $name, "\n"; print $name.".min 0\n"; print_thresholds($name,undef,undef,99,100); } } print "summary.label summary", "\n"; print "summary.min 0\n"; print_thresholds("summary",undef,undef,95,98); } sub print_values { for $_ (@output) { #storage objects if (/^\S+\s+\S+\s+\S+\s+\S+\s+(\d+)\%\s+\S+\[(.*)\:(\d+)\]/i) { my $name = $2.$3; print $name.".value ", $1, "\n"; } #summanary info if (/^filesystem summary\:\s+\S+\s+\S+\s+\S+\s+(\d+)\%\s+\S+\s/i) { print "summary.value ", $1, "\n"; } } }