LogSurfer
Inhaltsverzeichnis
Übersicht
LogSurfer kann das, was viele zum Teil teure Programme nicht können:
Fehlermeldungen der Betriebssysteme bzw. Dienste an die jeweils Verantwortlichen zukommen lassen, seien es Fehler von Windows, Linux oder ein Router.
Das Programm LogSurfer baut auf syslog auf und ermöglicht die Echtzeit-Kontrolle von Logdateien, wie der Datei /var/log/messages. Bei Auftreten bestimmter Zeilen/Ereignisse in einer Log-Datei kann LogSurfer Benachrichtigungen senden, z.B. als E-Mails oder SMS.
Als besonderes Feature kann LogSurfer mehrere zusammenhängende Ereignisse in einem Container(Kontext) sammeln, um dann z.B. mit nur einer Benachrichtigung zu reagieren. So kann eine Benachrichtigungs-Flut vermieden werden.
LogSurfer kann zu einem zentralen Werkzeug werden.
Werden von allen Geräten Meldungen an einen Syslog-Server geschickt, auf welchem LogSurfer lauft, können Meldungen aller Server, Router und sonstigen Syslog-fähigen Geräten damit analysiert werden. Auch für Windows gibt es verschiedene Clients, damit das Ereignis-Protokoll in Echtzeit an einen Syslog-Server geschickt werden können, wie z.B. das freie ntsyslog
LogSurfer vergleicht jede neu eintreffende Zeile gegen einen Satz von regulären Ausdrücken. Passt die Zeile auf einen Ausdruck, führt dies zu einer in den Regeln definierten Aktion.
Konfiguration
Hier geht es um ein Beispiel, in welchem wichtige Meldungen per Mail weitergeleitet werden sollen.
Vorausgesetzt wird, dass der Server Mails versenden kann.
logsurfer.conf
In dieser Datei werden die Regeln festgelegt, was bei Auftreten eines oder mehrerer bestimmter Ereignisse geschehen soll.
Die Datei kann zum Beispiel unter /etc/logsurfer/logsurfer.conf liegen, je nach Konfiguration.
Der Grundaufbau einer Regel sieht folgendermaßen aus:
Passender_Ausdruck Nicht_Passender_Ausdruck stop_regex not_stop_regex timeout [continue] Aktion
Meist ist nur Passender_Ausdruck und Aktion definiert.
Passender_Ausdruck |
Ein Ausdruck an dieser Stelle ich zwingend erforderlich. Passt er nicht auf die Zeile der Log-Datei, tritt die Regel nicht in Kraft |
Nicht_Passender_Ausdruck |
Ist dieser Ausdruck nicht "-", wird Regel abgebrochen, wenn der Ausdruck passt. Ist meist "-" |
stop_regex |
Ist dieser Ausdruck nicht "-", löscht er dynamische Regeln. Ist fast immer "-" |
not_stop_regex |
Ist dieser Ausdruck nicht "-", darf stop_regex die dynamische Regel nicht löschen. Ist fast immer "-" |
timeout |
Ist dieser Ausdruck nicht 0, definiert der Wert die Anzahl der Sekunden, welche die Regel aktiv ist. |
continue |
Wird dies genutzt, wird nach der Aktion die Zeile der Log-Datei durch die folgenden Regeln analysiert. Fehlt das continue, wird die Zeile auf keiner weiteren Regel angewendet. |
Aktion |
Was gemacht werden soll, wenn Regel zutrifft. Verwendet werden hier vor allem ignore, open und pipe (siehe man-Page zur logsurfer.conf) |
Das Zutreffen einer Regeln wird über reguläre Ausdrücke definiert, siehe auch wikipedia.
Leider gibt es mehrere Varianten der regulären Ausdrücke. LogSurfer nutzt die regulären Ausdrücke der GNU regex-library, wie sie auch egrep nutzt. Eine Doku in Englisch ist den Sourcen beigelegt.
Zeilen, die mit einem # beginnen, werden als Kommentar gesehen und damit ignoriert.
Beginnt die Zeile mit einem Leerzeichen oder einem TAB, gilt sie als Fortführung der vorhergehenden Zeile.
Nur wenn eine Zeile nicht mit einem Leerzeichen, TAB oder einer #, wird sie als beginn einer neuen Regel gesehen.
In drei Arten kann definiert werden, wo ein Suchstring anfängt und wo er aufhört:
Werden keine Anführungszeichen verwendet werden, gilt die Zeichenfolge nach dem ersten Leerzeichen oder Tabulator als beendet.
Verwenden Sie einfache Anführungszeichen ', gilt die Zeichenfolge als abgeschlossen, wenn das beendende einfachen Anführungszeichen folgt. Die Inhalte werden so verwendet, wie sie sind, es gibt keine Variablen Ersetzung.
Werden doppelte Anführungszeichen " verwendet, gilt die Zeichenkette als beendet mit dem zweiten ". Kommt innerhalb des Such-Strings ein doppeltes Anführungszeichen vor, muss ein Backslash-Zeichen \ als "Escape"-Zeichen vor doppelte Anführungszeichen gesetzt werden, also: \".
Um Verwirrungen zu vermeiden, sollte immer Anführungszeichen verwendet werden, ob nun einzeln oder doppelt.
Spezielle Variablen
Werden doppelte Anführungszeichen genutzt, können die speziellen Variablen $0 bis $9 verwenden können.
$0 entspricht der gesamten Zeile, $1 entspricht genau den Zeichen, welche auf den gesamten regulären Ausdruck passen.
Wenn Teile des regulären Ausdruckes in Klammern gesetzt werden, wird der Inhalt in die Variablen von $2 bis $9 geschrieben und kann so dynamisch für anschließende Aktionen verwendet werden.
Zu weiteren Details siehe die man-Page zur logsurfer.conf Datei
Container(Kontext)
Kontext meint bei LogSurfer dynamisch erstellte Regeln, über welche Log-Zeilen zusammen gefasst werden können, die auf auf einen regulären Ausdruck passen. So können z.B. alle Logeinträge eines NTP-Daemon zusammen gefasst werden.
Ein Kontext wird erzeugt, wenn eine Regel wie oben beschrieben mit der Aktion "open" genutzt wird und anschließend folgendes aufgerufen wird:
Passender_Ausdruck Nicht_Passender_Ausdruck Zeilen_Begrenzung timeout_abs timeout_rel [min_lines] action
Passender_Ausdruck |
Ein Ausdruck an dieser Stelle ich zwingend erforderlich. Passt er nicht auf die Zeile der Log-Datei, tritt die Regel nicht in Kraft |
Nicht_Passender_Ausdruck |
Ist dieser Ausdruck nicht "-", wird die Zeile ignoriert, wenn der Ausdruck passt. Ist meist "-" |
Zeilen_Begrenzung |
Maximale Anzahl der Zeilen, die der Kontext enthalten darf, bevor Aktion ausgelößt wird |
timeout_abs |
Absolutes Timeout, zählend ab dem ersten Treffer |
timeout_rel |
Relatives Timeout, zählend ab dem letzten Treffer |
min_lines |
Optional: Mindestanzahl an passenden Zeilen |
action |
ignore - Zeile ignorieren, exec - Programm ausführen, pipe - Zeile an StdIn übergeben |
Beispiele
Unwichtige Meldungen unterdrücken
Um unwichtige Meldungen zu unterdrücken
"wurde erfolgreich durchgef.hrt" - - - 0 ignore
Hier sieht man auch gleich die Lösung eines Problems, wenn im Log-Datei Sonderzeichen vorkommen: Das Sonderzeichen muss mit einem "." ersetzt werden. Der Punkt steht bei regulären Ausdrücken für irgendein beliebiges Zeichen.
Meldungen im Kontext sammeln und dann eine E-Mail schicken
Hier soll z.B. erst eine Mail geschickt werden, wenn die Meldungen entweder 120 Sekunden gesammelt wurden oder mehr als 50 Treffer auf den String "server1" vorliegen:
'server1' - - - 0 open "server1" - 50 120 - pipe "/usr/bin/mutt -s \"Server1-Meldungen \" mailadr@linuxwiki.de "
Meldungen Sammeln, als E-Mail schicken und dabei Variablen nutzen
Die folgende Regel habe ich an das Ende aller Regeln gestellt.
Der reguläre Ausdruck bewirkt, das die Klammer ([^ ]*) den Hostnamen enthält, der anschließend über die Variable $2 als Betreff geschickt werden kann:
'.{3} {1,2}[^ ]{1,2} [^ ]{8} ([^ ]*) ' - - - 0 open ".{3} {1,2}[^ ]{1,2} [^ ]{8} $2" - 20 60 - pipe "/usr/bin/mutt -s \"Event $2\" mailadr@linuxwiki.de"