Der Apache Webserver schreibt seine Log Informationen standardmäßig in eine lokale Datei. Auf SuSE oder SLES Systemen ist dass dann meist /var/log/apache2/access_log. Wenn man nicht nur einen Webserver hat, ist es sinnvoll diese Logs an einer zentralen Stelle (z.B. auf einem eigenen Logging Server) zusammenzuführen. Das Mittel der Wahl ist dann syslog oder das weit verbreitete syslog-ng.
Doch wie schafft man es jetzt, dass man:
a) seine lokale Logdatei behält und
b) syslog-ng als zusätzliches Ziel für die Loginformationen definiert
Wie es grundsätzlich funktioniert beschreibt dieser O’Reilly Artikel. Ich habe allerdings das Perlskript durch folgendes einfacheres Shell Skript (/usr/local/bin/apacheToSyslog.sh) ersetzt.
vi /usr/local/bin/apacheToSyslog.sh #!/bin/bash while read x do echo $x done | logger -p local6.info chmod 755 /usr/local/bin/apacheToSyslog.sh
Dieses Skript wird bei SuSE oder SLES in der distributionseigenen Konfigurationsdatei eingetragen (|/usr/local/bin/apacheToSyslog.sh combined
) und durch den reload des Apaches aktiviert.
vi /etc/sysconfig/apache2 APACHE_ACCESS_LOG="/var/log/apache2/access_log combined, |/usr/local/bin/apacheToSyslog.sh combined" rcapache2 reload # Kontrolle less /etc/apache2/sysconfig.d/global.conf ... CustomLog /var/log/apache2/access_log combined CustomLog |/usr/local/bin/apacheToSyslog.sh combined
Fehlt noch die syslog-ng Konfiguration:
vi /etc/syslog-ng/syslog-ng.conf filter f_logger { level(info) and facility(local6);}; destination d_logger{ udp("<ziel_server>" port(514)); }; destination d_logfile{ file("/var/log/apacheToSyslog.log"); }; log { source(src);filter(f_logger); destination(d_logger); }; log { source(src);filter(f_logger); destination(d_logfile); }; # aktivieren der Konfiguration killall syslog-ng /sbin/syslog-ng
Zeile 4 und 6 sind optional und nur notwendig, wenn zusätzlich zur Übertragung der Daten an den <ziel_server>
auch noch lokal eine Logdatei geschrieben werden soll.