Syslog-NG

Aus Wiki
Zur Navigation springen Zur Suche springen

Allgemein

Syslog-NG (Syslog New Generation) bietet deutlich mehr Features und Möglichkeiten als die eingebaute Kombination von syslogd und klogd. Standardmäßig schreibt Syslog-NG nicht einfach alle Log-Informationen in ein Logfile (/var/log/messages) wie syslogd. Stattdessen erzeugt es mehrere Files, in denen nur spezifische Inforamtionen landen. Z.b. auth.log für alle SSH-Anmeldeinformationen, mail.err für Fehler des Mailsystems, mail.info und mail.log für Informationen vom Mailer, usw. Syslog-NG ist relativ einfach zu installieren und zu konfigurieren.

Daneben wird noch Logrotate installiert. Wie der Name bereits andeutet, werden zu definierende Logfiles nach einem bestimmten Schema rotiert. Z.B. ist es möglich /var/log/messages täglich zu rotieren und isgesamt die letzten 5 Versionen zu archivieren. D.h. zum definierten Zeitpunkt wird messages nach messages.1 umbenannt und messages neu erstellt. Zum nächsten def. Zeitpunkt wird messages.1 nach messages.2 und messages zu messages.1 rotiert usw. Dadurch bleiben die zu untersuchenden Log-Files relativ klein, es geht aber keine Information verloren.

Hinweis:

Beide Pakete können auch unabhängig voneinander betrieben werden. D.h. Logrotate kann auch mit dem eingebauten syslog betrieben werden, bzw. Syslog_NG funktioniert auch ohne Logrotate tadellos.


Installation

Beide Pakete werden mittels ipkg installiert:

ipkg update
ipkg install syslog-ng
ipkg install logrotate

Syslog-NG

Konfiguration von Syslog-NG

vi /opt/etc/syslog-ng/syslog-ng.conf

Folgende Zeile

source src { pipe("/proc/kmsg");unix-stream("/dev/log"); internal(); };

abändern in:

source src { pipe("/proc/kmsg");unix-stream("/var/tmp/log"); internal(); };

Standardmäßig wird alle 10 Minuten eine Zahl von Statistik-Einträgen nach /var/log/messages geschrieben. Das Intervall kann erhöht werden, da die häufigen Statistik-Einträge die LOG-File Größe relativ schnell anwachsen lassen. Um das Intervall z.B. auf eine Stunde zu erhöhen, den Options-Eintrag:

options { long_hostnames(off); sync(0); };

abändern in:

options { long_hostnames(off); sync(0); stats(3600); };

Konfiguration der Ziel-Log-Files. Standardäßig landen alle logfiles in /opt/var/log/. Nachdem alle anderen Anleitungen des Wiki von der Standardinstallation (mit syslogd und klogd) ausgehen, müssen entweder die logfiles unter /var/log/ angelegt werden, oder die Pfade aller logfiles bei den anderen Anleitungen entsprechend abgeändert werden.

Abändern der Pfade der logfiles:

destination authlog { file("/var/log/auth.log"); };
destination syslog { file("/var/log/syslog"); };
destination cron { file("/var/log/cron.log"); };
destination daemon { file("/var/log/daemon.log"); };
destination kern { file("/var/log/kern.log"); };
destination lpr { file("/var/log/lpr.log"); };
destination user { file("/var/log/user.log"); };
destination uucp { file("/var/log/uucp.log"); };
destination ppp { file("/var/log/ppp.log"); };
destination mail { file("/var/log/mail.log"); };

destination mailinfo { file("/var/log/mail.info"); };
destination mailwarn { file("/var/log/mail.warn"); };
destination mailerr { file("/var/log/mail.err"); };

destination newscrit { file("/var/log/news/news.crit"); };
destination newserr { file("/var/log/news/news.err"); };
destination newsnotice { file("/var/log/news/news.notice"); };

destination debug { file("/var/log/debug"); };
destination messages { file("/var/log/messages"); };

In der Standardkonfiguration von Syslog-NG ist ein Fehler enthalten. Der fehlerhafte Filter-Eintrag:

filter f_uucp { facility(cron); }; 

bewirkt, dass der Filter für uucp anstatt auf uucp-Logeinträge auf Cron-Einträge anspricht. D.h. alle Cron-Einträge werden neben dem Logfile cron.log auch im File uucp.log protokolliert. Nachdem uucp auf der NSLU überhaupt nicht verwendet wird, kann einfach die entsprechende LOG-Zeile auskommentiert werden:

#log { source(src); filter(f_uucp); destination(uucp); };

alternativ kann auch der fehlerhafte Filter korrigiert werden:

filter f_uucp { facility(uucp); };


In der Standardkonfiguration werden nicht mehr alle Informationen nach /var/log/messages geschrieben. Um dies zu erreichen, muß folgende Zeile abgeädert werden:

log { source(src); filter(f_messages); destination(messages); };

abändern in:

log { source(src); destination(messages); };


Start von syslogd und klogd in Zukunft unterbinden:

vi /etc/inittab

syslogd- und klogd- Aufrufe auskommentieren:

# slog:unknown:/sbin/syslogd -n
# klog:unknown:/sbin/klogd -n

Start von Syslog-NG

Bevor Syslog-NG gestartet werden kann, muß syslogd und klogd erst beendet werden:

killall syslogd
killall klogd

Start von Syslog-NG:

/opt/etc/init.d/S01syslog-ng

Logrotate

Konfiguration von Logrotate

Anlegen eines Verzeichnisses für die "rotierten" Files:

mkdir /var/log_old

Bearbeiten des Konfigurationsfiles:

vi /opt/etc/logrotate.conf

Standardmäßig sieht die Konfigurationsdatei folgendermaßen aus:

compress

/var/log/messages {
        rotate 5
        postrotate
                /bin/killall syslogd
                /bin/killall klogd
        endscript
}

include /opt/etc/logrotate.d

compress bedeutet, dass die "rotierten" Logfiles gepackt werden. Dies erspart zwar Platz, erschwert aber den Zugriff, da das File dann erst entpackt werden muß, falls man es ansehen will. Deshalb evtl. die Zeile compress in nocompress abändern.

Rotiert wird das File /var/log/messages.

rotate 5 bedeutet, daß 5 Rotate-Files erstellt werden sollen.

Falls Syslog-NG zum Einsatz kommt, das File folgendermaßen abändern:

postrotate
    /bin/killall -HUP syslog-ng
endscript

Einfügen der folgenden Zeilen nach der compress bzw. nocompress Zeile:

olddir /var/log_old
sharedscripts

Rotation aller Logfiles, die in den Verzeichnissen /var/log/ und /opt/var/log/liegen. Die Zeile

/var/log/messages {

abändern in:

/var/log/* /opt/var/log/*{

Das Konfigfile könnte dann folgendermaßen aussehen:

nocompress
olddir /var/log_old
sharedscripts

/var/log/* /opt/var/log/* {
        rotate 5
        postrotate
                /bin/killall -HUP syslog-ng
        endscript
}

include /opt/etc/logrotate.d


Test von Logrotate

Logrotate kann einfach ausgeführt werden:

/opt/sbin/logrotate -f /opt/etc/logrotate.conf

Es darf kein Fehler ausgegeben werden.

Check, ob Logrotate die Logfiles korrekt "rotiert" hat:

ls -l /var/log

Alle angezeigten Log-Files sollten ca 0 Byte groß sein. Ca deshalb, da zwischen "rotieren" und anzeigen des Verzeichnisinhaltes bereits erneut Einträge aufgelaufen sein könnten.

ls -l /var/log_old

Es sollten die Logfiles mit der Endung .1 (z.B. messages.1) erstellt worden sein.


Regelmäßige Ausführung von Logrotate

Bei der Installation von Logrotate wird bereits ein →Cronjob angelegt, sofern "the real Cron". Es wird allerdings kein neuer Eintrag im File /opt/etc/crontab angelegt, sondern stattdessen ein neues File namens logrotate im Unterverzeichnis /opt/etc/cron.d angelegt. Alle diese Files werden vom Cron ebenfalls mit eingelesen und verarbeitet. Der Aufbau dieser Files ist identisch mit den Einträgen in der der Crontab. Das vorhandene logrotate-Cron-File sorgt dafür, dass die Logfiles täglich rotiert werden. Dies ist evtl. zu häufig, sodass dieser Eintrag angepasst werden sollte. Häufiges rotieren sorgt für kleinere und damit performantere Logfiles, es geht allerdings evtl die Übersicht etwas verloren, da beim suchen eines Ereignisses, mehrere alte, rotierte Logfiles ebenfalls durchsucht werden müssen.

Sofern der Originale Cron verwendet wird, muss ein neuer →Cronjob angelegt werden.

  • Falls der Originale Cron verwendet wird (siehe Crontab):
vi /etc/crontab
  • Falls der "Real Cron" verwendet wird (siehe Crontab):
vi /opt/etc/cron.d/logrotated

Z.B. Folgende Zeile einfügen/anpassen:

15 3 * * */5 root /opt/sbin/logrotate -f /opt/etc/logrotate.conf &>/dev/null

Damit werden die Logfiles alle fünf Tage um 03:15 Uhr rotiert. Den Zeitpunkt und das Intervall an die persönlichen Vorgaben anpassen.