2013-05-09 17:04:18 +02:00
|
|
|
#!/usr/bin/perl -w
|
|
|
|
# -*- perl -*-
|
|
|
|
# vim: ft=perl
|
|
|
|
|
|
|
|
=head1 NAME
|
|
|
|
|
|
|
|
|
|
|
|
=head1 APPLICABLE SYSTEMS
|
|
|
|
|
|
|
|
|
|
|
|
=head1 CONFIGURATION
|
|
|
|
|
|
|
|
You have to setup ssh with public key authentication for this plugin
|
|
|
|
SNMP is only used for getting the hostname
|
|
|
|
|
|
|
|
[snmp_$host_netapp_diskbusy]
|
|
|
|
env.ssh /usr/bin/ssh (default)
|
|
|
|
env.sshuser munin (default)
|
|
|
|
env.sshopts -i /home/munin/.ssh/id_rsa -o UserKnownHostsFile=/home/munin/.ssh/known_hosts (no default)
|
|
|
|
env.spares 2 (no default)
|
|
|
|
|
|
|
|
Number of spares is only used for total diskusage.
|
|
|
|
|
|
|
|
=head1 INTERPRETATION
|
|
|
|
|
|
|
|
This plugin only prints the disk busy status at check time. There is no
|
|
|
|
average calculated, but it still gives a goood overview if all disk are
|
|
|
|
used equally or you have got a single hot disk.
|
|
|
|
|
|
|
|
=head1 AUTHOR
|
|
|
|
|
|
|
|
2013, Claudius Herder
|
|
|
|
|
|
|
|
=head1 LICENSE
|
|
|
|
|
|
|
|
GPLv2.
|
|
|
|
|
|
|
|
=cut
|
|
|
|
|
|
|
|
use strict;
|
|
|
|
use Munin::Plugin;
|
|
|
|
use Munin::Plugin::SNMP;
|
|
|
|
need_multigraph();
|
|
|
|
|
|
|
|
my %disks;
|
|
|
|
|
|
|
|
sub do_collect
|
|
|
|
{
|
|
|
|
my $input;
|
|
|
|
my @tmp;
|
|
|
|
my $ssh = $ENV{'ssh'} || '/usr/bin/ssh';
|
|
|
|
my $sshuser = $ENV{'sshuser'} || $ENV{'USER'};
|
|
|
|
my $sshopts = $ENV{'sshopts'} || "";
|
|
|
|
my ($host, undef, undef, undef) = Munin::Plugin::SNMP->config_session();
|
|
|
|
|
|
|
|
$input=`$ssh $sshopts $sshuser\@$host stats show disk:*:disk_busy`;
|
|
|
|
foreach my $line (split(/\n/, $input))
|
|
|
|
{
|
|
|
|
@tmp = split(/:/, $line);
|
|
|
|
($disks{$tmp[2]} = $tmp[12]) =~ s/%//;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
sub do_config_root
|
|
|
|
{
|
2014-09-07 14:20:12 +02:00
|
|
|
# graph_category netapp # To show plugin in Gallery also in this category
|
|
|
|
|
2013-05-09 17:04:18 +02:00
|
|
|
my ($host) = @_;
|
|
|
|
|
|
|
|
print "multigraph diskbusy\n";
|
|
|
|
print "graph_title $host Aggregate busy status\n";
|
|
|
|
print "graph_args --base 1000 --lower-limit 0 --rigid\n";
|
|
|
|
print "graph_vlabel aggr busy status\n";
|
|
|
|
print "graph_category disk\n";
|
|
|
|
print "graph_info This graph shows the aggr busy status in percent for $host without spares\n";
|
|
|
|
print "diskbusy.label DiskBusy\n";
|
|
|
|
print "diskbusy.min 0\n";
|
|
|
|
print "diskbusy.draw AREASTACK\n";
|
|
|
|
print "diskbusy.type GAUGE\n";
|
|
|
|
}
|
|
|
|
|
|
|
|
sub do_config_disk
|
|
|
|
{
|
|
|
|
my ($host,$disk) = @_;
|
|
|
|
my $extrainfo = '';
|
|
|
|
|
|
|
|
print "multigraph diskbusy.$disk\n";
|
|
|
|
print "graph_title disk busy status for disk $disk\n";
|
|
|
|
print "graph_args --base 1000 --lower-limit 0 --rigid\n";
|
|
|
|
print "graph_vlabel disk busy status\n";
|
|
|
|
print "graph_category disk\n";
|
|
|
|
print "graph_info This graph shows disk busy status in percent for the $disk disk.$extrainfo\n";
|
|
|
|
print "diskbusy.info This is the disk busy status in percent of $disk\n";
|
|
|
|
print "diskbusy.type GAUGE\n";
|
|
|
|
print "diskbusy.label DiskBusy\n";
|
|
|
|
print "diskbusy.min 0\n";
|
|
|
|
print "diskbusy.draw AREASTACK\n";
|
|
|
|
}
|
|
|
|
|
|
|
|
sub do_fetch_root
|
|
|
|
{
|
|
|
|
my $spares=$ENV{'spares'} || 0;
|
|
|
|
my $busy =0;
|
|
|
|
my $numberofdisk=0;
|
|
|
|
my $diskbusy=0;
|
|
|
|
$numberofdisk =(keys %disks);
|
|
|
|
foreach my $disk (keys %disks)
|
|
|
|
{
|
|
|
|
$busy += $disks{$disk};
|
|
|
|
}
|
|
|
|
$diskbusy=$busy/($numberofdisk-$spares);
|
|
|
|
print "multigraph diskbusy\n";
|
|
|
|
printf("diskbusy.value %.3f \n",$diskbusy);
|
|
|
|
}
|
|
|
|
|
|
|
|
sub do_fetch_disk
|
|
|
|
{
|
|
|
|
my($disk) = @_;
|
|
|
|
my $busy;
|
|
|
|
$busy = $disks{$disk};
|
|
|
|
print "multigraph diskbusy.$disk\n";
|
|
|
|
print "diskbusy.value $busy\n";
|
|
|
|
}
|
|
|
|
|
|
|
|
sub do_config
|
|
|
|
{
|
|
|
|
my ($host, undef, undef, undef) = Munin::Plugin::SNMP->config_session();
|
|
|
|
print "host_name $host\n" unless $host eq 'localhost';
|
|
|
|
foreach my $disk (sort keys %disks)
|
|
|
|
{
|
|
|
|
do_config_disk($host,$disk);
|
|
|
|
}
|
|
|
|
do_config_root($host);
|
|
|
|
}
|
|
|
|
|
|
|
|
sub do_fetch
|
|
|
|
{
|
|
|
|
foreach my $disk (sort keys %disks)
|
|
|
|
{
|
|
|
|
do_fetch_disk($disk);
|
|
|
|
}
|
|
|
|
do_fetch_root();
|
|
|
|
}
|
|
|
|
|
|
|
|
do_collect();
|
|
|
|
|
|
|
|
if ($ARGV[0] and $ARGV[0] eq "config")
|
|
|
|
{
|
|
|
|
do_config();
|
|
|
|
exit 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
do_fetch();
|
|
|
|
|
|
|
|
exit 0;
|
|
|
|
|
|
|
|
__END__
|