Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:infrastructure
monitoring-plugins-logrotate
check_logrotate
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File check_logrotate of Package monitoring-plugins-logrotate
#!/usr/bin/perl -w use strict; use warnings; use Getopt::Long; my $skip_systemd = ""; my $statusdir = "/var/lib/misc"; my @logdirs = (); my $maxage = "1"; my $help = ""; GetOptions( "n|skip-systemd" => \$skip_systemd, "t|statusdir=s" => \$statusdir, "d|logdir=s" => \@logdirs, "m|maxage=s" => \$maxage, "h|help" => \$help, ); push @logdirs, "/var/log" unless @logdirs; my $output = ""; my @output_long = (); my $line = ""; my %status_bits = ( 'OK' => 0, 'WARNING' => 1, 'CRITICAL' => 2, 'UNKNOWN' => 4 ); my %status = ( 'OK' => 0, 'WARNING' => 1, 'CRITICAL' => 2, 'UNKNOWN' => 3 ); my $exit_status = 0; usage() if $help; usage() if ( ! @logdirs || !$statusdir || ! -d $logdirs[0] || ! -d $statusdir ); if (! $skip_systemd) { my $status = ""; open(SYSTEMCTL, "systemctl status logrotate.service|"); while (<SYSTEMCTL>) { next unless (/^\s*Process: .*\(.*, status=([^,=\)]*)/); $status = $1; if ($status =~ /\/FAILURE/) { $exit_status ||= $status_bits{CRITICAL}; push @output_long, "last service run failed"; } } close (SYSTEMCTL); open(SYSTEMCTL, "systemctl status logrotate.timer|"); while (<SYSTEMCTL>) { next unless (/^\s*Active: ([a-z]*)/); $status = $1; if ($status =~ /inactive/) { $exit_status ||= $status_bits{CRITICAL}; push @output_long, "timer is inactive"; } } close (SYSTEMCTL); } if (-e "$statusdir/logrotate.status") { my @s = stat "$statusdir/logrotate.status"; my $mtime = 0; $mtime = $s[9] if @s && $s[9]; my $age = time - $mtime; if ($age > 86400 * ($maxage + 1)) { $exit_status ||= $status_bits{CRITICAL}; push @output_long, "status file is outdated"; } elsif ($age > 86400 * $maxage) { $exit_status ||= $status_bits{WARNING}; push @output_long, "status file is outdated"; } } else { $exit_status ||= $status_bits{CRITICAL}; push @output_long, "status file is missing"; } my @sfiles; my @lt = localtime(time); my $todaystring = sprintf "%04d%02d%02d", $lt[5]+1900,$lt[4]+1,$lt[3]; for my $logdir (@logdirs) { opendir(LOGDIR,"$logdir"); while(readdir(LOGDIR)) { chomp(); next unless /-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]$/; # skip if today, might be still compressing next if /-$todaystring$/; $exit_status ||= $status_bits{WARNING}; push @sfiles,$_; } closedir(LOGDIR); } if (@sfiles) { push @output_long, "found suspicious file ".join(",",@sfiles); } # FINALS my $out = "OK"; for (qw(CRITICAL WARNING UNKNOWN)) { if ($exit_status & $status_bits{$_}) { $out = $_; last; } } print join("; ", $out, @output_long)."\n"; $exit_status = $status{$out}; exit( $exit_status ); sub usage { print <<EOU; Usage: $0 [-h] [-n] [-d logdir] [-t statusdir] [-m maxage] -h print this help -n --no-systemd Skip checking systemd service -d, --logdir STRING Directory to check for logfiles (default /var/log) May be passed multiple times. -t --statusdir STRING Directory for logrotate.status file (default /var/lib/misc) -m --maxage number Max allowed age for status file in days (default 1) EOU exit $status{UNKNOWN}; }
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor