Mercurial > repos > other > Puppet
changeset 347:73d7b3ec6263
Ignore log entries from Cron tasks running in user mode
author | IBBoard <dev@ibboard.co.uk> |
---|---|
date | Mon, 20 Jul 2020 11:19:52 +0100 |
parents | 61be075c5a68 |
children | 11d940c9014e |
files | common/logwatch/systemd manifests/templates.pp |
diffstat | 2 files changed, 207 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/logwatch/systemd Mon Jul 20 11:19:52 2020 +0100 @@ -0,0 +1,204 @@ +######################################################## +## Copyright (c) 2016 Orion Poplawski +## Covered under the included MIT/X-Consortium License: +## http://www.opensource.org/licenses/mit-license.php +## All modifications and contributions by other persons to +## this script are assumed to have been donated to the +## Logwatch project and thus assume the above copyright +## and licensing terms. If you want to make contributions +## under your own copyright or a different license this +## must be explicitly stated in the contribution an the +## Logwatch project reserves the right to not accept such +## contributions. If you have made significant +## contributions to this script and want to claim +## copyright please contact logwatch-devel@lists.sourceforge.net. +######################################################### + +use strict; +my $Detail = $ENV{'LOGWATCH_DETAIL_LEVEL'} || 0; +my %Activated; +my %Failed; +my $Reexecuted = 0; +my %Reloaded; +my %Slice; +my %Started; +my %Target; +my $TimeChanged = 0; +my $LastTarget; +my %UserSession; +my %OtherList; + +# Failue will generate multiple messages like: +# Feb 5 16:37:50 hostname systemd: ansible-pull.service: main process exited, code=exited, status=2/INVALIDARGUMENT +# Feb 5 16:37:50 hostname systemd: Failed to start Run ansible-pull on boot. +# Feb 5 16:37:50 hostname systemd: Unit ansible-pull.service entered failed state. +# Feb 5 16:37:50 hostname systemd: ansible-pull.service failed. + +while (defined(my $ThisLine = <STDIN>)) { + chomp($ThisLine); + if ($ThisLine =~ /^(Activating|Deactivating|Mounting|Unmounting|Starting|Stopping) / or + # These events will be caught with the Unit X entered failed state message + $ThisLine =~ /^Failed to start / or + $ThisLine =~ / failed\.$/ or + $ThisLine =~ /: (control|main) process exited, code=(exited|killed),? status=/ or + # Informational + $ThisLine =~ /^Closed .* socket\.$/ or + $ThisLine =~ /^Closed udev / or + $ThisLine =~ /^Detected (architecture|virtualization) / or + $ThisLine =~ /^Found device / or + $ThisLine =~ /^Got automount request for \/proc\// or + $ThisLine =~ /^Inserted module / or + $ThisLine =~ /^Listening on / or + $ThisLine =~ /^Mounted / or + $ThisLine =~ /^Relabelled / or + $ThisLine =~ /^Reloading\.$/ or # Happens on each boot at switch root + $ThisLine =~ /^Running in initial RAM disk\.$/ or + $ThisLine =~ /^Set hostname to / or + $ThisLine =~ /^Shutting down\.$/ or + $ThisLine =~ /^Startup finished in / or + $ThisLine =~ /^Stopped / or + $ThisLine =~ /^Switching root\.$/ or + $ThisLine =~ /^Successfully loaded SELinux policy in / or + $ThisLine =~ /: Supervising process .* which is not our child\. We'll most likely not notice when it exits\.$/ or + $ThisLine =~ /^systemd (\d+) running in system mode/ or + $ThisLine =~ /^Unit .* is bound to inactive unit .*\. Stopping, too\./ or + $ThisLine =~ /^Unit .* is not needed anymore\. Stopping\./ or + $ThisLine =~ /^Unmounted / or + # Units can depend on files that do not exist + $ThisLine =~ /^Cannot add dependency job for unit .*, ignoring: Unit .* failed to load: No such file or directory\.$/ or + # https://bugs.freedesktop.org/show_bug.cgi?id=90386 + $ThisLine =~ /^Device .* appeared twice with different sysfs paths .* and / or + # Inactive units are sometimes reloaded + $ThisLine =~ /^Unit .* cannot be reloaded because it is inactive\.$/ or + # https://bugzilla.redhat.com/show_bug.cgi?id=1293941 + $ThisLine =~ /^Configuration file \/usr\/lib\/systemd\/system\/auditd\.service is marked world-inaccessible/ or + # https://bugzilla.redhat.com/show_bug.cgi?id=1301182 + $ThisLine =~ /^Configuration file \/usr\/lib\/systemd\/system\/wpa_supplicant\.service is marked executable/ or + # https://bugzilla.redhat.com/show_bug.cgi?id=1306452 + $ThisLine =~ /^tmp\.mount: Directory \/tmp to mount over is not empty, mounting anyway\.$/ or + $ThisLine =~ /^Received SIGRTMIN\+2[01] from PID \d+ \(plymouthd\)\.$/ or + # https://bugzilla.redhat.com/show_bug.cgi?id=1072368 + $ThisLine =~ /^Received SIGRTMIN\+24 from PID \d+ \(kill\)\.$/ or + $ThisLine =~ /^Removed slice / or + $ThisLine =~ /^user-runtime-dir@[0-9]+\.service: Unit not needed anymore. Stopping.$/ or + $ThisLine =~ /^user@[0-9]+\.service: Killing process [0-9]+ \(systemctl\) with signal SIGKILL\.$/ or + $ThisLine =~ /^Closed D-Bus User Message Bus Socket.$/ or + $ThisLine =~ /^pam_unix\(systemd-user:session\): session (?:opened|closed) for user/ + ) { + # Ignore these + } elsif (my ($service) = ($ThisLine =~ /^Unit (.*) entered failed state\.$/)) { + $Failed{$service}++; + } elsif (my ($target) = ($ThisLine =~ /^Reached target (.*)\.$/)) { + $Target{$target}++; + $LastTarget = $target; + } elsif (my ($session, $user) = ($ThisLine =~ /^Started Session (\d+) of user (.*)\.$/)) { + $UserSession{$user}->{$session}++; + } elsif (my ($service) = ($ThisLine =~ /^Activated (.*)\.$/)) { + $Activated{$service}++; + } elsif (my ($service) = ($ThisLine =~ /^Started (.*)\.$/)) { + $Started{$service}++; + } elsif (my ($service) = ($ThisLine =~ /^Reloaded (.*)\.$/)) { + $Reloaded{$service}++; + } elsif ($ThisLine eq "Reexecuting.") { + $Reexecuted++; + } elsif ($ThisLine =~ /^Time has been changed$/) { + $TimeChanged++; + } elsif (my ($slice) = ($ThisLine =~ /^Created slice (.*)\.$/)) { + $Slice{$slice}++; + } else { + $OtherList{$ThisLine}++; + } +} + +if (keys %Failed) { + print "ERROR: Failed state:\n"; + foreach my $item (sort {$a cmp $b} keys %Failed) { + print " $item $Failed{$item} Time(s)\n"; + } + print "\n"; +} + +if ($Reexecuted && $Detail) { + print "Reexecuted systemd: $Reexecuted Time(s)\n\n"; +} + +if (keys %Target && $Detail > 3) { + print "Reached target $LastTarget: $Target{$LastTarget} Time(s)"; + if ($Detail > 10) { + print ", and:\n"; + foreach my $target (sort {$a cmp $b} keys %Target) { + print " $target: $Target{$target} Time(s)\n"; + } + } else { + print "\n"; + } + print "\n"; +} + +if (keys %Started && $Detail > 3) { + print "Started:\n"; + foreach my $started (sort {$a cmp $b} keys %Started) { + print " $started: $Started{$started} Time(s)\n"; + } + print "\n"; +} + +if (keys %Activated && $Detail > 3) { + print "Activated:\n"; + foreach my $item (sort {$a cmp $b} keys %Activated) { + print " $item: $Activated{$item} Time(s)\n"; + } + print "\n"; +} + +if (keys %Reloaded && $Detail > 5) { + print "Reloaded:\n"; + foreach my $item (sort {$a cmp $b} keys %Reloaded) { + print " $item: $Reloaded{$item} Time(s)\n"; + } + print "\n"; +} + +if ($TimeChanged && $Detail > 5) { + print "Time Changed $TimeChanged Time(s)\n\n"; +} + +if (keys %UserSession && $Detail > 3) { + print "User Sessions:\n"; + foreach my $user (sort {$a cmp $b} keys %UserSession) { + print " $user: "; + if ($Detail >= 10) { + foreach my $session (sort {$a cmp $b} keys %{$UserSession{$user}}) { + print " $session"; + } + print "\n"; + } else { + print scalar(keys %{$UserSession{$user}}) . ": Time(s)\n"; + } + print "\n"; + } +} + +if (keys %Slice && $Detail > 5) { + print "Slices created:\n"; + foreach my $slice (sort {$a cmp $b} keys %Slice) { + print " $slice $Slice{$slice} Time(s)\n"; + } + print "\n"; +} + +if (keys %OtherList) { + print "\n\n**Unmatched Entries**\n"; + foreach my $line (sort {$a cmp $b} keys %OtherList) { + print " $line: $OtherList{$line} Time(s)\n"; + } +} + +exit(0); + +# vi: shiftwidth=3 tabstop=3 syntax=perl et +# Local Variables: +# mode: perl +# perl-indent-level: 3 +# indent-tabs-mode: nil +# End:
--- a/manifests/templates.pp Mon Jul 20 10:33:54 2020 +0100 +++ b/manifests/templates.pp Mon Jul 20 11:19:52 2020 +0100 @@ -332,6 +332,9 @@ file { '/etc/logwatch/scripts/services/postfix': source => 'puppet:///common/logwatch/postfix', } + file { '/etc/logwatch/scripts/services/systemd': + source => 'puppet:///common/logwatch/systemd', + } } #Our web server with our configs, not just a stock one