server:logwatch

logwatch

logwatch ist ein sehr nützliches Tool um Zusammenfassungen der Logdateien in einem bestimmten Intervall anfertigen zu lassen. Dabei unterstützt das Programm bereits eine Menge Software (z.B. Apache) die ebenfalls neben den Systemlogs durchsucht werden.

Für den Versand des Reports per mail wird standardmäßig ein Mailserver) installiert, bei Debian z.B. Postfix.

logwatch ist in Perl geschrieben und installiert ein Script in /etc/cron.daily, d.h. es wird täglich vom cron-dienst gestartet.

In Debian ist die Konfiguration sehr merkwürdig gestaltet.

Im Verzeichnis /usr/share/logwatch/dist.conf werden die Einstellungen von /usr/share/logwatch/default.conf angepasst. Wo in dist.conf keine Einstellung vorgenommen wird, gilt dann die Einstellung in default.conf. Die Einstellungen in /etc/logwatch werden nicht berücksichtigt. Alles in allem sehr merkwürdig gestaltet.

Eine Möglichkeit wäre in /etc/logwatch symlinks auf die geltenden Einstellungen anzulegen. Dazu wechselt man in /etc/logwatch und löscht logwatch.conf, logfiles und services.

ln -s /usr/share/logwatch/dist.conf/logwatch.conf logwatch.conf
ln -s /usr/share/logwatch/dist.conf/logfiles logfiles
ln -s /usr/share/logwatch/dist.conf/services services
ln -s /usr/share/logwatch/dist.conf dist.conf
LogFile = apache2/DOMAIN/*access.log
LogFile = apache2/DOMAIN/*access.log.1
Archive = apache2/DOMAIN/*access.log.*.gz

/usr/share/logwatch/default.conf/logfiles

Blogartikel zu logwatch

logwatch --print

gibt einen ausführlichen Report aus, ohne Parameter nimmt er als range (Zeitraum für die Auswertung) yesterday, also gestern an.

Mit dem Befehl

logwatch -range help

gibt er eine ausführliche Hilfe zu gültigen Zeiträumen aus.

Logwatch braucht für Zeitangaben jenseits von today, yesterday und all das Modul Date::Manip. Dieses kann man mit

cpan -i 'Date::Manip'

oder

perl -MCPAN -e 'install Date::Manip'

nachinstallieren. Wenn man eine Paketverwaltung einsetzt kann man auch das Paket „libdate-manip-perl“ (Ubuntu, Debian?) installieren.

z.B. wenn ich einen wöchentlichen Zeitraum will (besser lesbar: 'since 7 days ago'):

logwatch --print --range 'since -7days'

In einem cronjob kann diese Zeile einen wöchentlichen Logreport an root versenden:

/usr/sbin/logwatch --mailto root --range 'since -7days'