NRW:Arbeitsgruppe/Technik/Dokumentation/Monitoring/Syslog

Aus Piratenwiki
Wechseln zu: Navigation, Suche
ACHTUNG: Die Informationen hier im Wiki sind momentan nicht vollständig aktualisiert.
AG Technik NRW
Verwaltung: Übersicht | Protokolle | Dokumentation | FAQ
Dienste: E-Mail | Lists | Webcache | Blogs | Wikimirror | Domains | RT | Mumble | LAN | Serverstatus


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.

Speicherorte der Logfiles
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