# cat /usr/local/nagios/libexec/check_io.pl
#!/usr/bin/perl
# author: alex harvey
# email: [EMAIL PROTECTED]
# definitions
use constant OK => 0;
use constant WARNING => 1;
use constant CRITICAL => 2;
# read in config file
require "/usr/local/nagios/etc/check_io.cfg";
# main
open IOSTAT, "$IOSTAT $INTERVAL 3 | $TAIL -${LINES} |";
while ( <IOSTAT> ) {
@col = split ' ';
foreach $disk (keys %DISKS) {
if ( $disk eq $col[0] ) {
if ( $col[0] eq $disk ) {
$DISKS{$disk}[0] = $col[1];
$DISKS{$disk}[1] = $col[2];
$DISKS{$disk}[2] = $col[7];
$DISKS{$disk}[3] = $col[9];
}
}
}
}
close IOSTAT;
$exit_state = OK;
foreach $disk (sort (keys %DISKS)) {
if ( $DISKS{$disk}[2] >= $SVC_T_WTHRESHOLD && $DISKS{$disk}[3] >= $PC_B_WTHRESHOLD )
{
if ( $DISKS{$disk}[2] < $SVC_T_CTHRESHOLD && $DISKS{$disk}[3] < $PC_B_WTHRESHOLD )
{
$exit_state = ($exit_state < CRITICAL) ? WARNING : $exit_state;
} else {
$exit_state = CRITICAL;
}
}
$exit_message = $exit_message.
" ".$disk.
":: [ r/s: ".$DISKS{$disk}[0].
", w/s: ".$DISKS{$disk}[1].
", svc_t: ".$DISKS{$disk}[2].
", and %b: ".$DISKS{$disk}[3].
" ],";
}
if ( $exit_state == OK ) {
$exit_message = "OK -$exit_message";
} elsif ( $exit_state == WARNING ) {
$exit_message = "WARNING -$exit_message";
} else {
$exit_message = "CRITICAL -$exit_message";
}
$exit_message =~ s/,$/\n/;
print $exit_message;
exit $exit_state
And the configuration file:
# cat /usr/local/nagios/etc/check_io.cfg
# check_io.cfg
# constants
$DISKS = 3; # number of physical disk partitions
# diskid => [ r/s, w/s, service_time, %busy ]
%DISKS = (
sd0 => [ 0, 0, 0, 0 ],
sd1 => [ 0, 0, 0, 0 ],
sd6 => [ 0, 0, 0, 0 ]
);
$IOSTAT = '/usr/bin/iostat -x';
$TAIL = '/usr/bin/tail';
$LINES = 7; # number of lines in iostat -x
$INTERVAL = 5; # second interval for iostat
$SVC_T_WTHRESHOLD = 30;
$PC_B_WTHRESHOLD = 5;
$SVC_T_CTHRESHOLD = 40;
$PC_B_CTHRESHOLD = 10;
This is for a Solaris box whose iostat output looks like this:
# iostat -x
extended device statistics
device r/s w/s kr/s kw/s wait actv svc_t %w %b
sd0 0.0 1.4 0.3 9.4 0.0 0.0 31.6 0 1
sd1 0.0 0.0 0.0 0.0 0.0 0.0 3.4 0 0
sd6 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0
st12 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0
nfs1 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0
Regards,
Alex
On 10/17/06, Andreas Ericsson <[EMAIL PROTECTED]> wrote:
Alexander Harvey wrote:
> That doesn't look like a Solaris script to me but as far as your coding is
> concerned, my thoughts are
>
[ excellent and non-disputed points removed ]
> (iv) for security you ought to use full paths to all of your binaries:
> i.e.
> /usr/bin/echo
> instead of
> echo
>
"echo" is a built-in feature of pretty much all shells, so just using
plain 'echo' is a perfectly viable and more performance friendly option.
A better solution, for security's sake, is to force the $PATH to a safe
value at the beginning of the script and not bother with full paths.
As a last note, "echo" is required to exist on the root partition, which
places it in /bin on all systems I've ever come across.
--
Andreas Ericsson [EMAIL PROTECTED]
OP5 AB www.op5.se
Tel: +46 8-230225 Fax: +46 8-230231
------------------------------------------------------------------------- Using Tomcat but need to do more? Need to support web services, security? Get stuff done quickly with pre-integrated technology to make your job easier Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
_______________________________________________ Nagios-users mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/nagios-users ::: Please include Nagios version, plugin version (-v) and OS when reporting any issue. ::: Messages without supporting info will risk being sent to /dev/null
