Benachrichtigung per E-Mail bei bestimmten Syslog Einträgen

german

#1

Für die Überwachung von Diensten werden mit UCS Programme wie Nagios ausgeliefert, die einen großen Funktionsumfang bieten und flexibel konfigurierbar sind. Als kleiner Lösung für die Benachrichtigung bei bestimmten Ereignissen kann ein Filterskript für den Syslog-Daemon erstellt werden.

Der Syslog-Daemon nimmt Meldungen vom Betriebssystem und von Diensten entgegen und schreibt sie in zentrale Log-Dateien. Über die Konfigurationsdatei /etc/syslog.conf kann vorgegeben werden, wie Meldungen verarbeitet werden. Der Großteil solcher Meldungen wird standardmäßig in /var/log/syslog aufgenommen. In diesem Artikel wird beschrieben, wie bei Meldungen, die einen fehlgeschlagenen Beitritt zur UCS Domäne anzeigen, automatisch E-Mails versendet werden können. Der Beitritt eines UCS Systems zur Domäne ist im gleichnamigen Artikel unter [url]Beitritt eines UCS Systems zur Domäne] beschrieben.

Der Sylog-Daemon ist in der Lage, Meldungen auch in Named Pipes zu schreiben, die dann von einem anderen Programm wieder ausgelesen werden können. Unter /var/log/univention/pipes wird als Benutzer ‘root’ eine solche Named Pipe angelegt:

# mkdir -p /var/log/univention/pipes
# mkfifo /var/log/univention/pipes/syslog.pipe

Damit der Syslog-Daemon Meldungen in diese Named Pipe schreibt, muss die Konfiguration des Syslog-Daemons erweitert und der Dienst neu gestartet werden. Es wird der Datei /etc/syslog.conf eine Zeile hinzugefügt, in der festgelegt wird, dass Meldungen der Kategorie ‘user.err’ zusätzlich zu bereits konfigurierten Ausgaben in andere Log-Dateien in die Named Pipe /var/log/univention/pipes/syslog.pipe ausgegeben werden:

# echo "user.err |/var/log/univention/pipes/syslog.pipe" >> /etc/syslog.conf
# /etc/init.d/syslogd reload

Mit folgendem Skript wird aus der Named Pipe zeilenweise gelesen und nach Auftreten der Zeichenkette “Connect Error” eine E-Mail mit dem Betreff “Join failed” an administrator@ucstest.de geschrieben. Es kann beispielsweise als /usr/sbin/univention-syslog-filter angelegt werden:

#!/bin/bash
suchstring="Connect error"
while true; do
  read </var/log/univention/pipes/syslog.pipe zeile
  if echo $zeile | grep $suchstring; then
    echo $zeile | mail -s "Join failed" administrator@ucstest.de
  fi
done

Das Skript muss ausführbar sein und sollte beim Systemstart ausgeführt werden:

# chmod u+x /usr/sbin/univention-syslog-filter 

Um das Skript beim Systemstart auszuführen, kann es über ein Init-Skript gestartet werden. Eine Vorlage für Init-Skripte liegt unter /etc/init.d/skeleton. In dieser Vorlage sind die wesentlichen Elemente eines Init-Skripts enthalten, es muss lediglich der Aufruf von /usr/sbin/univention-syslog-filter ergänzt werden.

Nachdem ein entsprechendes Init-Skript erstellt wurde, kann es über den Befehl update-rc.d in die Liste der zu startenden Skripte aufgenommen werden. Wurde das Init-Skript beispielsweise als /etc/init.d/parse-syslog angelegt, können mit folgendem Befehl symbolische Links zum Starten in den Verzeichnisse der Runleven 2, 3, 4 und 5 und zum Stoppen in den Verzeichnissen der Runlevel 0, 1 und 6 erzeugt werden.

# update-rc.d parse-syslog defaults

Die Verzeichnisse der Runlevel haben den Pfad /etc/rc.d, für Runlevel 2 also /etc/rc2.d.

Weitere Informationen zur Konfiguration des Syslog-Daemons und die unterschiedlichen Kategorien finden Sie in der Man-Page zu syslog.conf über den Befehl ‘man 5 syslog.conf’, weitere Informationen zu update-rc.d finden sich in der entsprechenden Man-Page über den Befehl ‘man 8 update-rc.d’.