summaryrefslogtreecommitdiffstats
path: root/web/attachments/62197-check_rrd.pl
diff options
context:
space:
mode:
Diffstat (limited to 'web/attachments/62197-check_rrd.pl')
-rw-r--r--web/attachments/62197-check_rrd.pl157
1 files changed, 157 insertions, 0 deletions
diff --git a/web/attachments/62197-check_rrd.pl b/web/attachments/62197-check_rrd.pl
new file mode 100644
index 0000000..578277c
--- /dev/null
+++ b/web/attachments/62197-check_rrd.pl
@@ -0,0 +1,157 @@
1#!/usr/bin/perl -w
2#-wT
3#
4# check_rrd plugin for nagios (or rather check_rrd but using the current rrd rather than cricket libraries)
5#
6# usage:
7# check_rrd rrdfile perlexp_warn perlexp_crit perlexp_default [ds]
8#
9# Checks data from an RRD file.
10#
11# Based off the check_rrd_data.pl and the example code in the rrdtool dist.
12#
13# The Perl expressions are expressions to be evaluated in the following cases:
14#
15# - perlexp_crit. The first one, to check if there is a critical situation. If
16# it returns other than "", it will be a critical message.
17# - perlexp_warn. The second one to be evaluated. If returns other than "", a
18# warning will be issued to Nagios.
19# - perlexp_default. If both of the above return "", it will be evaluated, and
20# wathever returns this expression will be returned by the script. NOTE that
21# this is different from the other two cases, to allow the user issue a
22# warning or critical failure even if the other two don't return it.
23#
24# initial version: 28 Nov 2000 by Esteban Manchado Velázquez
25# current status: 1.0
26#
27# History
28# 19-Sep-2003 1.0 steveh@brendata.co.uk
29# Amended to utilise the RRDs supplied with rrdtool rather than the cricket code
30#
31# Required RRDs from rrdtool distribution be installed (install perl shared when building rrdtool).
32#
33# Copyright Notice: GPL
34#
35
36use strict;
37use lib '/usr/local/nagios/libexec/' ;
38use utils qw(%ERRORS &print_revision);
39use RRDs;
40use Getopt::Long;
41&Getopt::Long::config('auto_abbrev');
42
43my $PROGNAME="check_rrd.pl";
44
45sub usage {
46 print_revision($PROGNAME,'$Revision: 1.0 $ ');
47 print "Nagios Plugin - Check rrd datafile\n";
48 print "=" x 75,"\nERROR: Missing or wrong arguments!\n","=" x 75,"\n";
49 print "check_rrd.pl --file=<file.rrd> --warning=<perl_exp_warn> --critical=<perl_exp_crit> --default=<perl_exp_default> [--dataset=<ds>] [--cf=<cf>] [--expire=<minutes>]\n\n";
50 print "<perl_exp_*> is an expression that gets evaluated with \$_ at the current\n";
51 print "value of the data source. If it returns something other than \"\", there\n";
52 print "will be a warning or a critical failure. Else, the expression\n";
53 print "<perl_exp_default> will be evaluated\n";
54 print "<ds> is the number of the dataset that you wish to use\n";
55 print "<cf> is one of MIN, MAX, AVERAGE or LAST\n";
56 print "<minutes> the maximum time since last rrd update, otherwise WARNING. (5 mins assumed if not specified)\n";
57 exit $ERRORS{'UNKNOWN'}; # Unknown
58}
59
60my $rrdfile; # RRD file to open
61my $cf; #Function to apply
62my $ds; # Dataset to use
63my @data; # Special data reserved for the expressions, to pass data
64# Perl expressions to evaluate
65my $perl_exp_warn;
66my $perl_exp_crit;
67my $perl_exp_default;
68my $expire;
69my $debug;
70
71# Evaluate Command Line Parameters
72my $status = GetOptions(
73 "file=s",\$rrdfile,
74 "critical=s",\$perl_exp_crit,
75 "warning=s",\$perl_exp_warn,
76 "default=s",\$perl_exp_default,
77 "dataset=i",\$ds,
78 "expire=i",\$expire,
79 "cf=s",\$cf,
80 "debug",\$debug
81 );
82
83$ds =~ s/\$$//g if ($ds); # Sometimes Nagios gives 1$ as the last parameter
84$cf =~ s/\$$//g if($cf); # Sometimes Nagios gives 1$ as the last parameter
85$rrdfile =~ s/\$$//g if($rrdfile); # Sometimes Nagios gives 1$ as the last parameter
86
87$perl_exp_crit =~ s/\$$//g if($perl_exp_crit); # Sometimes Nagios gives 1$ as the last parameter
88$perl_exp_warn =~ s/\$$//g if($perl_exp_warn); # Sometimes Nagios gives 1$ as the last parameter
89$perl_exp_default =~ s/\$$//g if($perl_exp_default); # Sometimes Nagios gives 1$ as the last parameter
90
91usage() if ($status == 0 || ! ($rrdfile && $perl_exp_warn && $perl_exp_crit)); # && $perl_exp_default));
92
93
94 print $perl_exp_crit,"\n" if($debug);
95 print $perl_exp_warn,"\n" if($debug);
96 print $perl_exp_default,"\n" if($debug);
97# Defaults
98$ds=0 if(!($ds));
99$cf="MAX" if(!($cf));
100$expire=5*60 if(!($expire));
101
102if (! $rrdfile) {
103 print "Can't open data file for $rrdfile\n"; # Aaaargh!
104 return $ERRORS{'UNKNOWN'}; # Unknown
105}
106
107if($expire!=0)
108 {
109 my ($last) = RRDs::last($rrdfile);
110 printf("Now: %d Last: %d\n",time(),$last) if ($debug);
111 my $now=time();
112 if($now - $last > $expire*60)
113 {
114 printf("RRD data has not been updated within expiry interval. %d minutes since last update\n",($now-$last)/60);
115 exit $ERRORS{'WARNING'};
116 }
117
118 }
119my ($start,$step,$names,$data) = RRDs::fetch ($rrdfile,$cf);
120my $ERR=RRDs::error;
121if($ERR) {
122 print "ERROR while fetching $rrdfile: $ERR\n"; # Ooops.....
123 exit $ERRORS{'UNKNOWN'}; # Unknown
124}
125
126 my $line = @$data[$#data -1];
127 my $value = @$line[$ds];
128
129my $result; # Result of the expressions (will be printed)
130
131# First check for critical errors
132$perl_exp_crit =~ /(.*)/;
133$perl_exp_crit = $1;
134 print $perl_exp_crit,"\n" if($debug);
135$result = eval $perl_exp_crit;
136if ($result) {
137 print $result;
138 print $perl_exp_crit,"\n" if($debug);
139 exit 2; # Critical
140}
141
142# Check for warnings
143$perl_exp_warn =~ /(.*)/;
144$perl_exp_warn = $1;
145 print $perl_exp_warn,"\n" if($debug);
146$result = eval $perl_exp_warn;
147if ($result) {
148 print $result;
149 print $perl_exp_warn,"\n" if($debug);
150 exit 1; # Warning
151}
152
153$perl_exp_default =~ /(.*)/;
154$perl_exp_default = $1;
155 print $perl_exp_default,"\n" if($debug);
156eval $perl_exp_default; # Normally returns 0 (OK)
157