- Repository
- Munin (2.0)
- Last change
- 2018-08-17
- Family
- contrib
- Capabilities
- Keywords
- Language
- Perl
- License
- GPL-2.0-only
iostat.vp_only
Name
iostat.vp_only - Plugin for watching io-bound traffic (in KiloBytes) on disks
Notes
Description
Similar to the iostat script, but will only report usage on vpaths.
Restrictions
Same as the iostat script, see its RESTRICTIONS.
This gathers information on virtual paths ONLY, typical if you have fiber cards installed and are attached to an ESS (Shark) or large disk array.
This will combine the I/O for all hdisks associated with a vpath so you get global statistics for a vpath. This is to avoid having a list of hdisks that spans multiple pages.
Author
Unknown author
License
GPLv2
Magic Markers
#%# family=contrib
#%# capabilities=autoconf
#!@@PERL@@ -w
# -*- perl -*-
=head1 NAME
iostat.vp_only - Plugin for watching io-bound traffic (in KiloBytes) on disks
=head1 NOTES
=head2 DESCRIPTION
Similar to the iostat script, but will only report usage on vpaths.
=head2 RESTRICTIONS
Same as the iostat script, see its RESTRICTIONS.
This gathers information on virtual paths ONLY, typical if you have
fiber cards installed and are attached to an ESS (Shark) or large disk
array.
This will combine the I/O for all hdisks associated with a vpath so
you get global statistics for a vpath. This is to avoid having a list
of hdisks that spans multiple pages.
=head1 AUTHOR
Unknown author
=head1 LICENSE
GPLv2
=head1 MAGIC MARKERS
#%# family=contrib
#%# capabilities=autoconf
=cut
use strict;
use POSIX;
my($arg) = shift;
if($arg && $arg eq "autoconf") {
if ( (-e "/usr/bin/iostat" && -X "/usr/bin/iostat") &&
(-e '/usr/sbin/lspv' && -X '/usr/sbin/lspv')) {
print "yes\n";
exit 0;
} else {
print "no (need /usr/bin/iostat and /usr/sbin/lspv executables)\n";
exit 0;
}
}
if($arg && $arg eq "config")
{
print "graph_title IOstat (VPaths Only)\n";
print "graph_args --base 1024 --logarithmic\n";
print "graph_vlabel KB / \${graph_period}\n";
my(@info) = getDiskIO("disk only");
my($line);
foreach $line (@info)
{
print "$line.label $line\n";
print "$line.type COUNTER\n";
print "$line.max 100000\n";
}
exit 0;
}
my($line);
my @info = processVPaths();
foreach $line (@info)
{print "$line";}
sub getDiskIO
{
my($diskOnly) = @_;
my($line,@lineArray,@diskArray,$writes,$reads,$diskLine);
if($diskOnly && $diskOnly eq 'disk only')
{
open DISKLIST, "/usr/sbin/lspv|grep vpath|grep -v none|";
while($line = <DISKLIST>)
{
@lineArray = split(/ +/,$line);
push(@diskArray,"$lineArray[0]_read","$lineArray[0]_write");
}
}
return @diskArray
}
sub processVPaths
{
open DISKLIST, "/usr/sbin/lspv|grep vpath|";
my($line,$hdiskLine,@diskArray,$reads,$writes);
while($line = <DISKLIST>)
{
my(@vpathArr) = split(/ +/,$line);
my($vpathNum) = substr($vpathArr[0],index($vpathArr[0],"h")+1);
open VPATHINFO, "/usr/bin/datapath query device $vpathNum|grep hdisk|";
$reads = 0;
$writes = 0;
while($hdiskLine = <VPATHINFO>)
{
my(@hdiskInfo) = split(/ +/,$hdiskLine);
my($hdisk) = substr($hdiskInfo[2],index($hdiskInfo[2],"/")+1);
my($diskLine) = `/usr/bin/iostat|grep $hdisk`;
my(@lineArray) = split(/ +/,$diskLine);
$reads += $lineArray[4];
$writes += $lineArray[5];
}
push(@diskArray,$vpathArr[0]."_read.value $reads\n",$vpathArr[0]."_write.value $writes\n");
}
return @diskArray;
}
sub printArray
{
my($array,$spacer,$useNums,@labels) = @_;
my($item,);
my($count) = 0;
foreach $item (@{$array})
{
if($useNums == 1)
{print $count.substr($spacer,0,length($spacer)-length($count)).$item."\n";}
else
{print $labels[$count].substr($spacer,0,length($spacer)-length($labels[$count])).$item."\n";}
$count++;
}
}