/[pdpsoft]/trunk/nl.nikhef.ndpf.tools/nagios-ndpf-sensors/scripts/check_tivoli
ViewVC logotype

Annotation of /trunk/nl.nikhef.ndpf.tools/nagios-ndpf-sensors/scripts/check_tivoli

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2728 - (hide annotations) (download)
Mon Aug 25 10:18:32 2014 UTC (7 years, 8 months ago) by dennisvd
File size: 3385 byte(s)
rewrite check_tivoli to scan the logfile backwards, which is much faster especially on huge logs that do not get rotated frequently.

1 dennisvd 2699 #!/usr/bin/perl -w
2     #
3 dennisvd 2728 # Copyright 2014 Stichting Fundamenteel Onderzoek der Materie (FOM-Nikhef)
4 dennisvd 2699 #
5     # Licensed under the Apache License, Version 2.0 (the "License");
6     # you may not use this file except in compliance with the License.
7     # You may obtain a copy of the License at
8     #
9     # http://www.apache.org/licenses/LICENSE-2.0
10     #
11     # Unless required by applicable law or agreed to in writing, software
12     # distributed under the License is distributed on an "AS IS" BASIS,
13     # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14     # See the License for the specific language governing permissions and
15     # limitations under the License.
16    
17     # This Nagios check finds out if IBM Tivoli Storage Manager backups
18     # are alive and active, by perusing the logfile for recent successful
19     # backups. If the latest successful run is more than a day old, a warning
20     # is issued. More than three days is critical.
21    
22     use strict;
23     use Getopt::Long;
24     use Time::Local;
25     use POSIX qw{strftime};
26    
27 dennisvd 2728 use File::ReadBackwards;
28    
29 dennisvd 2699 my $verbose=0;
30     my $debug;
31     # the logfile to parse
32     my $log = "/var/log/dsmsched.log";
33    
34     my $TIMEOUT = 10;
35    
36     GetOptions("log:s" => \$log,
37     "debug" => \$debug,
38     "verbose" => \$verbose );
39    
40    
41     my %ERRORS=(OK=>0,
42     WARNING=>1,
43     CRITICAL=>2,
44     UNKNOWN=>3,
45     DEPENDENT=>4);
46    
47     my $message = "unk";
48     my $result = $ERRORS{"UNKNOWN"};
49    
50     # Just in case of problems, let's not hang Nagios
51     $SIG{'ALRM'} = sub {
52     print ("ERROR: No timely response (alarm timeout)\n");
53     exit $ERRORS{"UNKNOWN"};
54     };
55    
56     alarm($TIMEOUT);
57    
58    
59     # we're looking for "04/16/14 21:57:03 Scheduled event 'DAILY_NIKHEF' completed successfully."
60     # timestamp in the file is local time.
61    
62     # find the last such entry in /var/log/dsmsched.log
63     my $loghandle;
64 dennisvd 2728 $loghandle = File::ReadBackwards->new($log);
65     if (!defined($loghandle)) {
66 dennisvd 2699 $message = "ERROR: cannot open $log";
67     $result = $ERRORS{"CRITICAL"};
68     print "$message\n";
69     exit $result;
70     }
71    
72     my $lastentry;
73 dennisvd 2728 my $logline = "";
74     while (defined($logline = $loghandle->readline ) ) {
75     next unless $logline =~ m{(\d\d)/(\d\d)/(\d\d) (\d\d):(\d\d):(\d\d) Scheduled event .* completed successfully\.};
76 dennisvd 2699 # just like localtime(), months range 0..11
77     my ($month, $day, $year, $hours, $minutes, $seconds) = ($1-1, $2, $3, $4, $5, $6);
78     $lastentry = timelocal($seconds, $minutes, $hours, $day, $month, $year);
79 dennisvd 2728 last;
80 dennisvd 2699 }
81    
82 dennisvd 2728 $loghandle->close;
83 dennisvd 2699
84     if (!defined $lastentry) {
85     $message = "ERROR: no successful events in $log";
86     $result = $ERRORS{"CRITICAL"};
87     print "$message\n";
88     exit $result;
89     }
90    
91     # compare timestamps; if last entry is too long in the past, raise a
92     # warning or an error
93    
94     my $currenttime = time;
95     print "$lastentry\n" if $debug;
96     print "$currenttime\n" if $debug;
97     # strftime is funky; years are counted from 1900, day of month from 1 and
98     # everything else from 0.
99     my $lasttime = strftime("%F %T", $lastentry, 0, 0, 1, 0, 70);
100    
101     if ($currenttime - $lastentry > 24 * 60 * 60) {
102     $message = "WARNING: last successful event is more than a day old [$lasttime]";
103     $result = $ERRORS{"WARNING"};
104     } else {
105     $message = "OK [$lasttime]";
106     $result = $ERRORS{"OK"};
107     }
108    
109     # more than three days is really critical
110     if ($currenttime - $lastentry > 3 * 24 * 60 * 60) {
111     $message = "ERROR: last successful event is more than three days old [$lasttime]";
112     $result = $ERRORS{"CRITICAL"};
113     }
114    
115     alarm(0);
116    
117     print "$message\n";
118     exit $result;

grid.support@nikhef.nl
ViewVC Help
Powered by ViewVC 1.1.28