2
0
mirror of https://github.com/munin-monitoring/contrib.git synced 2018-11-08 00:59:34 +01:00
contrib-munin/plugins/snmp/snmp__netapp_diskbusy

156 lines
3.5 KiB
Perl
Executable File

#!/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
{
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__