NRW:Arbeitsgruppe/Technik/Dokumentation/Monitoring/Syslog
Dienste: E-Mail | Lists | Blogs | Domains | RT | Mumble | LAN | Serverstatus
Inhaltsverzeichnis
zentrales Syslog
Einführung
Zur einer einfachen Fehlersuche kann ein zentrales Log-File maßgeblich dazu beitragen. Mögliche Fehler schnell zu erkennen und diese eingrenzen zu können erhöht indirekt die Qualität, sowie die Verfügbarkeit.
Syslog ist ein standardisiertes Protokoll zur Übermittlung von Nachrichten (auch als Events bezeichnet) an ein File oder an einen zentralen Syslog-Host. Dazu wird am Syslog-Server der TCP Port 514 angesprochen, während der Client mit einem beliebigen High-Port seine Nachricht sendet.
Aufbau in der LV NRW
Syslog-Server
Der zentrale Host, der möglichst alle Syslog Meldungen einsammlt ist derzeit über den Host access realisiert. Dort wurde die Software syslog-ng aus den OS Repository installiert. Im Verzeichnis /var/log/central/ finden sich weitere Unterverzeichnise, nach IP oder Funktion benannt. Um schnell in das Verzeichnis wechseln zu können, kann ein alias definiert werden,
alias cd.log='cd /var/log/central/'
Aufbau der Konfigurations Datei syslog-ng.conf
Source
Mit dieser Definition wird die Quelle angegeben. In unserem Fall wird auf die lokale IP und dem UDP Port 514 der Eingang des Syslog-Servers beschränkt.
Filter
Mit Filter läst sich ein umfangreiches Regelwerk erstellen, das zwischen den einzelnen Meldungen unterscheiden kann.
Destination
Als Destination wird überlicherweise eine Datei oder eine Dateistruktur über Variablen abgebildet. Es kann auch auch hier ein entfernter Server als Destination angegeben werden. So könnte damit ein Syslog-Forwarding erstellt werden.
Log
Der wichtigste Eintrag ist die LOG-Zeile. Sie bringt nun Source, Filter und Destination zusammen. Und definiert somit ein Syslog-Szenario.
Der Server selbst soll nur über sein lokales Interface auf UDP Syslog Meldungen hören. Dies wird mit folgender Konfiguration erreicht.
Auszug aus /etc/syslog-ng/syslog-ng.conf
source s_udp { udp(ip(192.168.1.7) port(514)); }; destination d_centraldir { file("/var/log/central/$HOST/messages-$YEAR-$MONTH-$DAY.log" owner("root") group("users") perm(0664) dir_perm(0775) create_dirs(yes)); }; log { source(s_udp); destination(d_centraldir); };
Client Konfiguration
Auf jedem Unix/Linux Host befindet sich meist die Syslog-Konfiguration in der Datei /etc/syslog.conf, /etc/rsyslog.conf oder auch /etc/syslog-ng/syslog-ng.conf. Darin wird der zentrale Syslog-Host mit seinem Hostnamen oder IP eingetragen.
Soll nur die authentifizierung an den centralen Syslog gesendet werden, dann werden folgende Zeilen eingetragen.
user.debug @192.168.1.7 auth.debug @192.168.1.7
sollen jedoch alle alle Meldungen gesendet werden, dann sieht dies wie folgt aus :
*.* @192.168.1.7
In unserem Fall kommt auf dem Host rsyslog zum Einsatz, somit kann im Verzeichnis /etc/rsyslog.d/ eine centrallog.conf Datei abgelegt werden, mit diesem Inhalt:
*.* @192.168.1.7
Logrotation
Um nicht in kürze eine volle Festplatte zu haben, ist ein funktionierendes Logrotation ein wichtiger bestandteil. Dazu werden wenige Config-Files und Shell-Scripte eingesetzt.
logrotation-hourly.conf
/var/log/central/*/messages-*.log { size=10M create 664 root users missingok notifempty compress rotate 50 sharedscripts postrotate /etc/init.d/syslog-ng restart > /dev/null || : endscript }
logrotation-hourly.sh
#!/bin/sh /usr/sbin/logrotate /etc/logrotate-hourly.conf EXITVALUE=$? if [ $EXITVALUE != 0 ]; then /usr/bin/logger -t logrotate "ALERT hourly exited abnormally with [$EXITVALUE]" fi exit 0
logrotation-daily.conf
/var/log/central/*/messages-*.log { daily nocreate missingok notifempty compress rotate 50 sharedscripts postrotate /etc/init.d/syslog-ng restart > /dev/null || : endscript }
logrotation-daily.sh
#!/bin/sh /usr/sbin/logrotate -d /etc/logrotate-daily.conf > /var/log/logrotate-daily.log 2>&1 EXITVALUE=$? if [ $EXITVALUE != 0 ]; then /usr/bin/logger -t logrotate "ALERT daily exited abnormally with [$EXITVALUE]" fi exit 0
centrallog-remove.sh als täglichen Cronjob
Da die zentralen Messages-Files nur für den Fehlerfall gedacht sind, reicht es aus am Syslog-Server die Files für den jeweiligen Tag nach 14-Tage wieder zu löschen.
Dazu wird im Cron Verzeichnis /etc/cron.daily folgendes Script hinterlegt
#!/bin/sh #Config LOG=/var/log/centrallog-remove.log DAYS=14 /bin/echo > $LOG "------------------------------------------------------------" /bin/date >> $LOG #removing empty log directories /bin/echo >> $LOG "removing empty directories ..." /bin/rmdir /var/log/central/* >> $LOG #removing after default age /bin/echo >> $LOG "removing old files ..." /usr/bin/find /var/log/central -xdev -depth -mindepth 1 -maxdepth 2 -mtime +${DAYS} -type f -exec rm {} \; 2>&1 >> $LOG /bin/echo >> $LOG "done."
Und dann mit einem chmod 755 centrallog-remove.sh die Datei ausführbar machen.
Das Kommando logger
Sofern eigene Scripte am Server zum Einsatz kommen, macht es Sinn mit dem Kommando logger schnell und direkt Meldungen in das Syslog Logfile schreiben zu lassen. Dadurch kann jeder Admin am zentralen Logfile leicht erkennen, was fehlgeschlagen ist. Und somit entsprechend reagieren.
usage: logger [-is] [-f file] [-p pri] [-t tag] [-u socket] [ message ... ] Zum Beispiel ... logger -i -p warn -t meincheck "$var hat die maximale Speicherplatz erreicht" ...
Logging Übersicht
Nicht jedes Programm oder Anwendung sendet Log-Meldungen an ein systemweites oder eigenes Logfile. In dieser Übersicht werden die typischen variationen aufgelistet.
Anwendung | lokaler Speicherort | Zusätzlich im Central-Log |
---|---|---|
System Meldungen | ||
Kernel | /var/log/kern.log | Ja |
Multipath | /var/log/ | Ja |
Crond | /var/log/cron.log | Ja |
SSH | Ja | |
rsyslogd | /var/log/? | Ja |
Auth/Login | /var/log/auth.* | Ja |
Services | ||
Postfix | /var/log/mail | Ja |
Apache | /var/log/apache2/access oder error | Ja |
Pound | /var/log/? | Ja |
Postfix | /var/log/mail.* | Ja |
Nullmailer | /var/log/mail.* | Ja |
Dovecot | /var/log/mail.* | Ja |
Amavis | /var/log/mail.* | Ja |
Postgrey | /var/log/mail.* | Ja |
Bacula | /var/log/? | Ja |
Munin | /var/log/munin/munin-node.log | Nein |
Anwendungen | ||
Wordpress | über Apache | über Apache |
Request Tracker | /var/log/? | Ja, als "RT:" erkennbar |
Kalender | über Apache | über Apache |
Mumble | ? | ? |
Open-Xchange | /var/log/open-xchange/* | Nein |
Weiterführende Links
- http://wiki.ubuntuusers.de/syslog-ng (Zusammenfasende Erklärung von syslog-NG)
- http://de.wikipedia.org/wiki/Syslog
- http://www.aboutdebian.com/syslog.htm