diff options
author | Ethan Galstad <egalstad@users.sourceforge.net> | 2002-02-28 06:42:51 +0000 |
---|---|---|
committer | Ethan Galstad <egalstad@users.sourceforge.net> | 2002-02-28 06:42:51 +0000 |
commit | 44a321cb8a42d6c0ea2d96a1086a17f2134c89cc (patch) | |
tree | a1a4d9f7b92412a17ab08f34f04eec45433048b7 /contrib/check_rrd_data.pl | |
parent | 54fd5d7022ff2d6a59bc52b8869182f3fc77a058 (diff) | |
download | monitoring-plugins-44a321cb8a42d6c0ea2d96a1086a17f2134c89cc.tar.gz |
Initial revision
git-svn-id: https://nagiosplug.svn.sourceforge.net/svnroot/nagiosplug/nagiosplug/trunk@2 f882894a-f735-0410-b71e-b25c423dba1c
Diffstat (limited to 'contrib/check_rrd_data.pl')
-rw-r--r-- | contrib/check_rrd_data.pl | 129 |
1 files changed, 129 insertions, 0 deletions
diff --git a/contrib/check_rrd_data.pl b/contrib/check_rrd_data.pl new file mode 100644 index 00000000..0ff8750b --- /dev/null +++ b/contrib/check_rrd_data.pl | |||
@@ -0,0 +1,129 @@ | |||
1 | #!/usr/bin/perl -wT | ||
2 | |||
3 | # check_rrd_data plugin for nagios | ||
4 | # | ||
5 | # usage: | ||
6 | # check_rrd machine_id perlexp_warn perlexp_crit perlexp_default [ds] | ||
7 | # | ||
8 | # Checks data from a RRD file. machine_id is normally an IP address, that has | ||
9 | # to be mapped to a RRD file, by means of the config file (by default | ||
10 | # /var/spool/nagios/rrd-files, a file with pairs of (machine_id,rrd_file), | ||
11 | # separated by whitespace). It can be a RRD file, too. | ||
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 | # Use these hosts.cfg entries as examples | ||
25 | # | ||
26 | # command[check_ping]=$USER1$/check_rrd_data.pl $HOSTADDRESS$ \ | ||
27 | # 'return "CHECK_CRICKET_PING: Warning\n" if ($value > 10);' 'return \ | ||
28 | # "CHECK_CRICKET_PING: Critical\n" if ($value > 100);' 'printf \ | ||
29 | # "PING OK - RTA = %.2fms\n", $value; return 0;' 1 | ||
30 | # service[machine]=PING;0;24x7;3;5;1;router-admins;240;24x7;1;1;1;;check_ping | ||
31 | # | ||
32 | # initial version: 28 Nov 2000 by Esteban Manchado Velázquez | ||
33 | # current status: 0.1 | ||
34 | # | ||
35 | # Copyright Notice: GPL | ||
36 | # | ||
37 | |||
38 | # Doesn't work! Why? | ||
39 | # BEGIN { | ||
40 | # my $runtimedir = substr($0,0,rindex($0,'/')); | ||
41 | # require "$runtimedir/utils.pm"; | ||
42 | # } | ||
43 | |||
44 | require '/usr/libexec/nagios/plugins/utils.pm'; | ||
45 | use RRD::File; | ||
46 | # use strict; # RRD:File and utils.pm don't like this | ||
47 | |||
48 | my $configfilepath = "/var/spool/nagios/rrd-files"; # Change if needed | ||
49 | my %hostfile; # For storing config | ||
50 | my $rrdfile; # RRD file to open | ||
51 | |||
52 | $ENV{'PATH'} = "/bin:/usr/bin"; | ||
53 | $ENV{'ENV'} = ""; | ||
54 | |||
55 | if (scalar @ARGV != 4 && scalar @ARGV != 5) { | ||
56 | print STDERR join "' '", @ARGV, "\n"; | ||
57 | my $foo = 'check_rrd_data'; | ||
58 | print STDERR $foo, " <file.rrd> <perl_exp_warn> <perl_exp_crit> <perl_exp_default> [<ds>]\n\n"; | ||
59 | print STDERR "<perl_exp_*> is an expression that gets evaluated with \$_ at the current\n"; | ||
60 | print STDERR "value of the data source. If it returns something other than \"\", there\n"; | ||
61 | print STDERR "will be a warning or a critical failure. Else, the expression\n"; | ||
62 | print STDERR "<perl_exp_default> will be evaluated\n"; | ||
63 | exit; | ||
64 | } | ||
65 | |||
66 | # Check configuration file | ||
67 | open F, $configfilepath or do { | ||
68 | print "Can't open config file $configfilepath\n"; | ||
69 | return $ERRORS{'UNKNOWN'}; | ||
70 | }; | ||
71 | while (<F>) { | ||
72 | next unless /(.+)\s+(.+)/; | ||
73 | $hostfile{$1} = $2; | ||
74 | } | ||
75 | close F; | ||
76 | |||
77 | # Default | ||
78 | my $ds = defined $ARGV[4]?$ARGV[4]:0; | ||
79 | # print "\$ds = " . $ds . ":"; | ||
80 | # print "\$ARGV[4] = " . $ARGV[4] . ":"; | ||
81 | $ds =~ s/\$//g; # Sometimes Nagios gives 1$ as the last parameter | ||
82 | |||
83 | # Guess which RRD file have to be opened | ||
84 | $rrdfile = $ARGV[0] if (-r $ARGV[0]); # First the parameter | ||
85 | $rrdfile = $hostfile{$ARGV[0]} unless $rrdfile; # Second, the config file | ||
86 | # print "$ARGV[0]:"; | ||
87 | |||
88 | if (! $rrdfile) { | ||
89 | print "Can't open data file for $ARGV[0]\n"; # Aaaargh! | ||
90 | return $ERRORS{'UNKNOWN'}; # Unknown | ||
91 | } | ||
92 | |||
93 | # print "Opening file $rrdfile:"; | ||
94 | my $rrd = new RRD::File ( -file => $rrdfile ); | ||
95 | $rrd->open(); | ||
96 | if (! $rrd->loadHeader()) { | ||
97 | print "Couldn't read header from $rrdfile\n"; | ||
98 | exit $ERRORS{'UNKNOWN'}; # Unknown | ||
99 | } | ||
100 | my $value = $rrd->getDSCurrentValue($ds); | ||
101 | $rrd->close(); | ||
102 | |||
103 | # Perl expressions to evaluate | ||
104 | my ($perl_exp_warn, $perl_exp_crit, $perl_exp_default) = | ||
105 | ($ARGV[1], $ARGV[2], $ARGV[3]); | ||
106 | my $result; # Result of the expressions (will be printed) | ||
107 | my @data; # Special data reserved for the expressions, to pass data | ||
108 | |||
109 | # First check for critical errors | ||
110 | $perl_exp_crit =~ /(.*)/; | ||
111 | $perl_exp_crit = $1; | ||
112 | $result = eval $perl_exp_crit; | ||
113 | if ($result) { | ||
114 | print $result; | ||
115 | exit 2; # Critical | ||
116 | } | ||
117 | |||
118 | # Check for warnings | ||
119 | $perl_exp_warn =~ /(.*)/; | ||
120 | $perl_exp_warn = $1; | ||
121 | $result = eval $perl_exp_warn; | ||
122 | if ($result) { | ||
123 | print $result; | ||
124 | exit 1; # Warning | ||
125 | } | ||
126 | |||
127 | $perl_exp_default =~ /(.*)/; | ||
128 | $perl_exp_default = $1; | ||
129 | eval $perl_exp_default; # Normally returns 0 (OK) | ||