Logwatch zur automatischen und manuellen Log-Auswertung

Logfile

Auch wenn ich ein Freund der manuellen Log-Auswertung bin, ist es angenehm, hin und wieder eine kleine Übersicht automatisiert und ausgewertet per E-Mail zugeschickt zu bekommen. Ursprünglich hatte ich vor, ein solches Interface selbst zu „scripten“, aber warum das Rad neu erfinden?
Mit Logwatch steht ein Werkzeug zur Verfügung, das den Administrator – einen Mail-Server vorausgesetzt – nach eigenen Vorstellungen über den Status informiert.

Hinweis zur Konfiguration: Ich werde Logwatch im Folgenden so einrichten, dass bei manuellem Aufruf, der Status in der Konsole angezeigt wird („stdout“). Automatisierte Status-Berichte möchte ich dagegen per E-Mail bekommen.

Der Artikel bezieht sich auf Debian und nahe Derivate. Logwatch liegt

Logwatch – Installation und Konfiguration

Die Installation erfolgt aus den Paketquellen und ist daher denkbar einfach:

sudo apt-get install logwatch

Mit der Installation erstellt Logwatch einen täglichen Cronjob, zu dessen Konfiguration ich im Verlauf noch eingehe.

Etwas ungewöhnlich ist der Pfad zur allgemeine Konfiguration. Diese öffne ich und nehme einige Anpassungen vor:

sudo nano /usr/share/logwatch/default.conf/logwatch.conf

Zu sehen ist sofort, das der Entwickler die Konfiguration ausreichend kommentiert hat und ein Blick in die „man-page“ nur selten notwendig ist.

Folgende Optionen setze ich ein. Die Einstellungen beziehen sich auf einen Aufruf Logwatchs ohne Parameter:

LogDir = /var/log
TmpDir = /var/cache/logwatch # Für temporäre Dateien
Output = stdout
Format = text
Encode = none
MailTo = empfaenger@domain.tld # Nur "empfaenger" für lokalen Benutzer
MailFrom = absender@domain.tld # Nur "absender" für lokalen Benutzer
Archives = Yes
Range = Today
mailer = "/usr/sbin/sendmail -t"
Detail = Low

"LogDir" durchsucht alle Log-Dateien im Verzeichnis. Kann auch durch "LogFile" ersetzt werden, um nur definierte Dateien zu durchsuchen.

"Output" und "Format" entsprechen einer Konsolen-Ausgabe. "Encode" ist für beide Methoden zulässig. 

Mit MailTo sowie MailFrom definierte ich bereits den Absender und Empfänger zukünftiger Status-Berichte. Diese Optionen greifen erst, wenn Logwatch mit "--output mail" aufgerufen wird.
Wichtiger Hinweis: Damit die "MailFrom"-Option funktioniert, muss vorab die Zeile "MailFrom" aus der Datei "/usr/share/logwatch/dist.conf/logwatch.conf" entfernt werden:
sed -i '/MailFrom/d' /usr/share/logwatch/dist.conf/logwatch.conf

"Archives = Yes" legt fest, dass auch rotierte und komprimierte Logs wie etwa "/var/log/messages.1" oder "/var/log/messages.1.gz" durchsucht werden. Dies ist die Standardeinstellung.

"Range = Yesterday" überschreibt obigen Parameter jedoch wieder, da hiermit festgelegt wird, dass die Logs über den gesamten vergangenen Tag ausgewertet werden. Das kann, muss aber nicht, rotierte/komprimierte Logs einschließen. Gültige Optionen sind "All", "Today" und "Yesterday". "Today" wäre nicht sonderlich clever, wenn ich nicht im weiteren Verlauf den Cronjob anpassen würde, da der Status-Bericht ansonsten leer ist.
Bei einem Aufruf in der Konsole, möchte ich jedoch nur den heutigen Status sehen.

Detail = Low beschränkt die Ausgabe im Detail. Für die Konsolenausgabe sorgt diese Einstellung für eine bessere Übersicht. "Low", "Med", "High" sind valide Optionen.

Service = All kann nach Bedarf angepasst werden.
Hinweis: Eine Übersicht der Dienste, die Logwatch auswerten kann, findet sich im Verzeichnis "/usr/share/logwatch/scripts/services":

afpd amavis arpwatch audit automount autorpm barracuda bfd cisco citadel clamav clamav-milter clam-update courier cron denyhosts dhcpd dnssec dovecot dpkg emerge evtapplication evtsecurity evtsystem exim eximstats extreme-networks fail2ban fetchmail freeradius ftpd-messages ftpd-xferlog http http-error identd imapd init in.qpopper ipop3d iptables kernel mailscanner modprobe mountd mysql named netopia netscreen oidentd openvpn pam pam_pwdb pam_unix php pix pluto pop3 portsentry postfix postgresql pound proftpd-messages puppet pureftpd qmail qmail-pop3d qmail-pop3ds qmail-send qmail-smtpd raid resolver rt314 samba saslauthd scsi secure sendmail sendmail-largeboxes shaperd slon smartd sonicwall spamassassin sshd sshd2 stunnel sudo syslogd syslog-ng tac_acc up2date vpopmail vsftpd windows xntpd yum zz-disk_space zz-fortune zz-network zz-runtime zz-sys zz-zfs

Via "Service = -Dienst" wird ein Dienst ignoriert ("-"-Zeichen!). Ohne vorangehendes "-", wird ein Dienst explizit ausgewählt.

Der "mailer" ist die Standardeinstellung und kann in der Regel so bleiben. Nur verändern, wenn ihr wisst, was ihr tut.

Konfiguration des Cronjobs

Ich öffne das Script des Cronjobs und ändere sie nach eigenen Wünschen ab:

sudo nano /etc/cron.daily/00logwatch

Der gesamte Inhalt, wobei nur die "execute"-Zeile verändert wurde:

#!/bin/bash

#Check if removed-but-not-purged
test -x /usr/share/logwatch/scripts/logwatch.pl || exit 0

#execute
/usr/sbin/logwatch --output mail --format html --detail med --range yesterday

#Note: It's possible to force the recipient in above command
#Just pass --mailto address@a.com instead of --output mail

Die Parameter "Output", "Format", "Detail" und "Range" werden somit überschrieben.

Ist eine Benachrichtigung nur einmal monatlich notwendig, kann das Script entsprechend verschoben werden:

sudo mv /etc/cron.daily/00logwatch /etc/cron.monthly/

Ebenso einmal wöchentlich:

sudo mv /etc/cron.daily/00logwatch /etc/cron.weekly/

Wichtig ist in jedem Fall, dass das Script des Cronjobs entsprechend angepasst wird! Wichtig ist hierbei der Parameter "--range". Folgende Beispiele sind gegeben:

--range today
--range yesterday
--range '4 hours ago for that hour'
--range '-3 days'
--range 'since 2 hours ago for those hours'
--range 'between -10 days and -2 days'
--range 'Apr 15, 2005'
--range 'first Monday in May'
--range 'between 4/23/2005 and 4/30/2005'
--range '2005/05/03 10:24:17 for that second'

Wöchentlich könnte der Aufruf des Cronjobs etwa so aussehen:

/usr/sbin/logwatch --output mail --format html --detail med --range 'between -7 days and -1 days'

Monatlich:

/usr/sbin/logwatch --output mail --format html --detail med --range 'between -1 month and -1 days'

HTML-Templates anpassen

Optional lässt sich auch die HTML-Ausgabe anpassen.
Entsprechende Dateien finden sich im Verzeichnis "/usr/share/logwatch/default.conf/html".
Die CSS-Parameter sind in der Datei "/usr/share/logwatch/default.conf/html/header.html" definiert.

5 Antworten auf “Logwatch zur automatischen und manuellen Log-Auswertung

  1. Frank

    Beispiel für ein HTML-Template zu Logwatch (/usr/share/logwatch/default.conf/html/header.html):

    Logwatch $Version ( $VDate )

    h1 {color: gray; border-bottom: 3px double silver; font-family: sans-serif; }
    h2 {color: white; border-bottom: 1px solid silver; font-family: sans-serif; }
    h3 {color: white; border-bottom: 1px solid silver; font-family: sans-serif; }
    th {background: #476996; text-align: left; font-family: sans-serif; color: floralwhite;}
    td {background: #EFEFEF; text-align: left; font-family: courier,serif; font-size: 14px; }
    li {font-family: sans-serif; }
    .ref {padding-left: 1%; }
    .service {padding-left: 1%; }
    .return_link {border-top: 1px; border-bottom: 1px;
    padding: 1%; margin-top: 1%; margin-bottom: 1%; font-family: sans-serif; }
    .copyright {font-size: 200%; color: #000000; border-top: 1px solid grey;
    border-bottom: 1px solid grey;
    padding: 1%; margin-top: 1%; margin-bottom: 1%;}

  2. Christian M. Grube

    Eigentlich ist der Cronjob nicht dafür da um die Einstellungen einzugeben.

    Schau Dir doch mal bitte genau Zeile 52 in /usr/sbin/logwatch an:
    my $ConfigDir = „/etc/logwatch“;

    Die Envrionmentvariable durchläuft das ganze Script
    Zeile 154 bis 157:
    &ReadConfigFile („$BaseDir/default.conf/logwatch.conf“, „“);
    &ReadConfigFile („$BaseDir/dist.conf/logwatch.conf“, „“);
    &ReadConfigFile („$ConfigDir/conf/logwatch.conf“, „“);
    &ReadConfigFile („$ConfigDir/conf/override.conf“, „logwatch“);

    Aus dem Manual:
    /etc/log.d/logwatch.conf
    Really a symlink to /etc/log.d/conf/logwatch.conf. This file sets the default values of all the above options. These defaults are used when LogWatch is called without any parameters (i.e. from cron.daily). The file is well-documented, but the explanations above also apply to this config file.

    Auch hier http://www.debianhelp.co.uk/logwatch1.htm nochmal zu finden.
    Warum sollte man denn eine Konfigurationsdatei editieren, wenn man alles sowieso in einen Cronjob schreibt.
    Und wäre es dann auch nicht besser eher crontab zu nehmen ?

    Oder bin ich dir im April auf dem Leim gegangen ?

    Grüsse
    Christian

    1. André P. Autor

      Hi,
      zu „Warum sollte man denn eine Konfigurationsdatei editieren, wenn man alles sowieso in einen Cronjob schreibt.“:
      Wie du siehst, erreiche ich mit dem Aufruf ohne Paramter in der Konsole genau das, was ich möchte: Die „Defaults“ aus der Konfiguration verwenden. Die Ausgabe ist entsprechend nur auf den laufenden Tag bezogen.
      Der Cronjob bekommt dagegen von mir die Optionen mit und überschreibt (nur) vorab definierte Parameter.
      Es gibt optional noch den Weg über dist.conf/*, wo ich mich aber gegen entschieden habe. Ist einfach nicht der übliche Stil – finde ich. Geschmackssache.

      „Besser“ ist an Crontab nichts. *daily und Konsorten werden ja auch nur via Crontab angesteuert. Hin und wieder verschiebe ich Scripts der Einfachheit wegen auch „nur mal schnell nach weekly“. Ich habe es einfach gemacht, wie es gerade passte. Wer witzig ist, kann es anders machen. :)

      Ich glaube, du hast einfach nur überlesen, dass ich in der Konsole eine andere Ausgabe haben möchte, als beim Aufruf via Cron, oder? In dem Fall wäre das natürlich Blödsinn. :)

        1. André P. Autor

          Den Cronjob, den du – in der Regel – nie manuell aufrust, möchtest du kürzen. Den Befehl, den du ggf. täglich in der Konsole eintippst, möchtest du jedes mal händisch eingeben? Halte ich für die falsche Reihenfolge.

          Klar, Alias wäre möglich. Aber wozu? Dazu gibt es schließlich die Konfigurationsdatei.

          Ich verstehe nicht wirklich das Problem. ;) Wenn du dir die Arbeit lieber im Cronjob sparen möchtest, dann tue es. Womöglich auch dann, wenn du das Programm sowieso nie vorhast manuell aufzurufen.

          Pofalla erklärt dieses Problem für beendet.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.