rsyslog
Meldungen per Regex in eine andere Datei umleiten
Mit diesem Beispiel lassen sich Meldungen, die von „apache2“ gesendet werden und nicht den String „PHP Notice“ enthalten in die Datei /var/log/apache2-global-error.log schreiben.
if $programname == 'apache2' and not ($msg contains 'PHP Notice') then /var/log/apache2-global-error.log
Das ist z.B. sehr nützlich, wenn man einen Cluster loadbalancter Server hat und diese zentral loggen läßt. Es gibt dann nur ein Error-Log, das man bequem durchsuchen kann und einen Überblick über die Fehler im gesamten Netz zeigt.
Remote-Logging mit rsyslog
Um den Empfang von Remote-Messages im rsyslog zu ermöglichen sind in /etc/rsyslog.conf zwei, bzw. 4 Zeilen einzukommentieren:
# provides UDP syslog reception $ModLoad imudp $UDPServerRun 514
Üblicherweise werden Syslog-Messages per UDP übertragen. Will man aber auch auf einem TCP-Port empfangen muss das entsprechende Modul geladen und konfiguriert werden:
# provides TCP syslog reception $ModLoad imtcp $InputTCPServerRun 514
Damit der entfernte Server nun auch Meldungen sendet ist folgendes zu tun:
*.* @syslog.meinserver.de
Damit werden sämtliche Syslog-Einträge per UDP an den entfernten Server geschickt. Sollen die Pakete über TCP laufen wird ein zweites @ vor den Server gepackt. Die Portangabe ist optional, default-Port ist 514. Sollen die Meldungen an einen anderen Port geschickt werden, ist das hierüber konfigurierbar.
*.* @@syslog.meinserver.de:1234
Die Meldungen lassen sich auch auf wichtige Sachen einschränken. Beispielsweise nur Emergencies und Alerts, etc.
*.emerg,*.alert @syslog.meinserver.de *.emerg,*.alert,*.crit,*.err,*.warning @syslog.meinserver.de
Bei instabilen Verbindungen kann es helfen die Meldungen in einer Sendequeue vorzuhalten:
$ActionQueueType LinkedList
$ActionQueueFileName remote_queue
$ActionQueueMaxDiskSpace 1g
$ActionResumeRetryCount -1
$ActionQueueSaveOnShutdown on