Kritische Meldungen in syslog per E-Mail verschicken

Logfiles sind essenziell zur Fehleranalyse. Eine ständige Überwachung der Logfiles ist äußerst wichtig um den fehlerfreien Betrieb eines Servers sicherzustellen. Eine automatische E-Mail Benachrichtigung bei schweren Systemfehlern ist dabei eine große Hilfe. Das folgende Tutorial beschreibt die Konfiguration eines Debian Systems mit, sodass bei kritischen Fehlern in syslog automatisch eine E-Mail an den Administrator verschickt wird. Vorraussetzung für den Mailversand ist ein fertig konfigurierter MTA (z.B. exim).

Grob lässt sich die Funktion folgendermaßen beschreiben. Syslog schreibt alle kritschen Meldungen in eine named pipe. Über cron wird minütlich ein Script ausgeführt, welches die Einträge der named pipe ausließt, auf Dopplungen prüft, und bei vorhandenen Einträgen eine E-Mail verschickt.

Schritt 1: named pipe für syslog erstellen

mkdir /etc/rsyslog.pipes && mkfifo /etc/rsyslog.pipes/criticalMessages && chmod 600 /etc/rsyslog.pipes/criticalMessages

Schritt 2: Syslog konfigurieren

nano /etc/rsyslog.d/local0-criticalpipe.conf

In das neu erstelle Konfigurationsfile fügt man folgendes ein:

local0.crit   |/etc/rsyslog.pipes/criticalMessages

Schritt 3: syslogMailer Script anlegen

Um die named pipe regelmäßig auszulesen und eine E-Mail zu versenden muss nun ein Script erstellt werden. An dieser Stelle Danke an john & cailin für das einfache aber wirkungsvolle Script.

nano /usr/bin/syslogMailer
#!/bin/bash

# syslogMailer: a script to read stdin and turn each line into an alert
# email typically this is used to read a named-pipe written to by syslog
# example usage: syslogMailer < /etc/syslog.pipes/criticalMessages

alertRecipient="empfaenger@domain.com" # the mail recipient for alerts
TMOUT=1 # don't wait > 1 second for input

# process each line of input and produce an alert email
while read line
do
# remove any repeated messages
echo ${line} | grep "message repeated" > /dev/null 2>&1
if test $? -eq 1
then
# send the alert
echo "${line}" | mail -s "critical error on syslog" ${alertRecipient}
fi
done

Es muss lediglich die E-Mail Adresse des Administrators angegeben werden. Nun muss das Script nur noch ausführbar gemacht werden.

chmod u+x /usr/bin/syslogMailer

Schritt 5: Test

Bevor die Konfiguration mit einem Eintrag in der crontab abgeschlossen wird sollte nun ein kleiner Test der Konfiguration durchgeführt werden. Hierfür reichen zwei Befehle.

logger -p local0.crit "my pants are on fire"
syslogMailer < /etc/rsyslog.pipes/criticalMessages

Schritt 6: Eintrag in der crontab

crontab -e

Hier fügt man die folgende Zeile ein:

0-59/5 * * * * /usr/bin/syslogMailer < /etc/rsyslog.pipes/criticalMessages

Quelle: john & cailin how to setup real-time email-notification for critical syslog events

Ein Gedanke zu „Kritische Meldungen in syslog per E-Mail verschicken

  1. Michael Lorenz

    Ich habe alle Schritte wie beschrieben abgearbeitet. Leider bekomme ich beim Test keine andere Antwort als „permission denied“. Oder das Skript hängt sich auf, läuft endlos. Ich betreibe meinen Server mit Ubuntu 14.04.02 LTS. Mein Mailserver ist Postfix.

    Antworten

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.