i found a perl script called check_rrd_data.pl, in this script it requires RRD::File, and i have no idea about RRD::File, there isn't many documents on-line about RRD::File. Is there any one can help me on this perl module.
many thanks!!
i have the code, you will understand better than i explain, i am bad at explaining.
#!/usr/bin/perl -wT
#check_rrd_data plugin for nagios
#
# usage:
# check_rrd machine_id perlexp_warn perlexp_crit perlexp_default [ds]
#
# Checks data from a RRD file. machine_id is normally an IP address, that has
# to be mapped to a RRD file, by means of the config file (by default
# /var/spool/nagios/rrd-files, a file with pairs of (machine_id,rrd_file),
# separated by whitespace). It can be a RRD file, too.
#
# The Perl expressions are expressions to be evaluated in the following cases:
#
# - perlexp_crit. The first one, to check if there is a critical situation. If
# it returns other than "", it will be a critical message.
# - perlexp_warn. The second one to be evaluated. If returns other than "", a
# warning will be issued to Nagios.
# - perlexp_default. If both of the above return "", it will be evaluated, and
# wathever returns this expression will be returned by the script. NOTE that
# this is different from the other two cases, to allow the user issue a
# warning or critical failure even if the other two don't return it.
#
# Use these hosts.cfg entries as examples
#
# command[check_ping]=$USER1$/check_rrd_data.pl $HOSTADDRESS$ \
# 'return "CHECK_CRICKET_PING: Warning\n" if ($value > 10);' 'return \
# "CHECK_CRICKET_PING: Critical\n" if ($value > 100);' 'printf \
# "PING OK - RTA = %.2fms\n", $value; return 0;' 1
# service[machine]=PING;0;24x7;3;5;1;router-admins;240;24x7;1;1;1;;check_ping
#
# initial version: 28 Nov 2000 by Esteban Manchado Velázquez
# current status: 0.1
#
# Copyright Notice: GPL
#
# Doesn't work! Why?
# BEGIN {
# my $runtimedir = substr($0,0,rindex($0,'/'));
# require "$runtimedir/utils.pm";
# }
require '/usr/local/nagios/libexec/utils.pm';
use RRD::File;
#use strict; # RRD:File and utils.pm don't like this
# Change if needed
my %hostfile; # For storing config
my $rrdfile; # RRD file to open
$ENV{'PATH'} = "/bin:/usr/bin";
$ENV{'ENV'} = "";
if (scalar @ARGV != 4 && scalar @ARGV != 5) {
print STDERR join "' '", @ARGV, "\n";
my $foo = 'check_rrd_data';
print STDERR $foo, " <file.rrd> <perl_exp_warn> <perl_exp_crit>
<perl_exp_default> [<ds>]\n\n";
print STDERR "<perl_exp_*> is an expression that gets evaluated with \$_ at the
current\n";
print STDERR "value of the data source. If it returns something other than \"\",
there\n";
print STDERR "will be a warning or a critical failure. Else, the expression\n";
print STDERR "<perl_exp_default> will be evaluated\n";
exit;
}
# Check configuration file
#open F, $configfilepath or do {
# print "Can't open config file $configfilepath\n";
# return $ERRORS{'UNKNOWN'};
#};
#while (<F>) {
# next unless /(.+)\s+(.+)/;
# $hostfile{$1} = $2;
#}
#close F;
# Default
my $ds = defined $ARGV[4]?$ARGV[4]:0;
# print "\$ds = " . $ds . ":";
# print "\$ARGV[4] = " . $ARGV[4] . ":";
$ds =~ s/\$//g; # Sometimes Nagios gives 1$ as the last parameter
# Guess which RRD file have to be opened
$rrdfile = $ARGV[0] if (-r $ARGV[0]); # First the parameter
$rrdfile = $hostfile{$ARGV[0]} unless $rrdfile; # Second, the config file
# print "$ARGV[0]:";
if (! $rrdfile) {
print "Can't open data file for $ARGV[0]\n"; # Aaaargh!
return $ERRORS{'UNKNOWN'}; # Unknown
}
print "test $rrdfile\n";
# print "Opening file $rrdfile:";
my $rrd = new RRD::File ( -file => $rrdfile );
$rrd->open();
print "one more test $rrd\n";
if (! $rrd->loadHeader()) {
print "Couldn't read header from $rrdfile\n";
exit $ERRORS{'UNKNOWN'}; # Unknown
}
my $value = $rrd->getDSCurrentValue($ds);
$rrd->close();
# Perl expressions to evaluate
my ($perl_exp_warn, $perl_exp_crit, $perl_exp_default) =
($ARGV[1], $ARGV[2], $ARGV[3]);
my $result; # Result of the expressions (will be printed)
my @data; # Special data reserved for the expressions, to pass data
# First check for critical errors
$perl_exp_crit =~ /(.*)/;
$perl_exp_crit = $1;
$result = eval $perl_exp_crit;
if ($result) {
print $result;
exit 2; # Critical
}
This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
By continuing to use this site, you are consenting to our use of cookies.