Mail-Server Monitoring in Bash

0
164

Anhand eines Praxisbeispiels möchte ich heute eine Möglichkeit vorstellen, seinen Mail-Server im Hinblick auf die Postfachauslastung seiner User zu monitoren.

In unserem Beispiel wird ein Zarafa-Mail-Server benutzt, welcher ein älteres Produkt ist, das auf Postfix aufsetzt.

Das funktioniert in unserem Beispiel zweistufig.
Zunächst benötigen wir folgendes Script, um einen Überblick über die Postfachauslastung aller Benutzer zu erstellen:

#Script by C. Caspar
#!/bin/bash
_USER_LIST=$(zarafa-admin -l | grep -v “username” | grep -v “SYSTEM” | grep -v “User” | grep -v “–” | awk -F’ ‘ ‘{print$1}’ | sort)

for _USERS in $_USER_LIST
do
_CHECK_SIZE=$(zarafa-admin –details $_USERS –type user | grep “Current store size” | awk -F’ ‘ ‘{print$4, $5}’)

echo “$_USERS storesize: $_CHECK_SIZE”
done

Hierbei erstellen wir uns zunächst ein Array aus Usern, welche alphabetisch sortiert sind.
Alle Zeilen mit den Strings “username”, “SYSTEM”, “User” und “–” lassen wir hierbei aufgrund der Struktur des Standard-Outputs des genutzten Befehls nicht in die Ausgabe.
Unser Output sieht hierbei zunächst so aus:

a_user storesize: 277.54 MB
b_user storesize: 14510.95 MB
c_user storesize: 19.72 MB
d_user storesize: 1748.51 MB
e_user storesize: 7758.81 MB
f_user storesize: 490.84 MB

Mit diesem Script in der Hinterhand können wir folgendes Script für das tatsächliche Monitoring ausführen:

#Script by C. Caspar
#!/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root
sh /root/zeige_postfachauslastung.sh > postfachauslastung_recent &
sleep 60

echo -e `cat /root/postfachauslastung_recent |sort -n -r -k3 |grep -E '[0-9]{5}' |awk {'print $1"\011"$3"\n\r"'}` | { read body; echo -e $(echo “Subject: IMAP_Monitoring_Postfachauslastung\r\n”; echo “\r\n\r\nFolgende User haben Postfaecher von mindestens 10 GB:\r\n\r\n”; echo -e “${body}”)| sendmail empfaenger_A@Domain.de empfaenger_B@Domain.de empfaenger_C@Domain.de ;}

Was genau tun wir hier jetzt?
Zunächst geben wir dem Script über die PATH-Variable mit, wo es überall nach den entsprechenden Kommandos zu suchen hat, um nicht immer den vollen Pfad zu den Kommandos angeben zu müssen.
Dann geben wir den Output des cat-Befehls aus, wobei wir die Trennzeichen durch tatsächliche newlines ersetzen.
Das wird danach in die neue Variable “body” gelesen und weiter verarbeitet.
Im Output des Echo greppen wir bereits per regulärem Ausdruck nach 5-Stelligen Zahlen, da uns alle Postfächer ab 10 GB interessieren.
Im Nachgang wird per echo -e der Aufbau der später mit sendmail versandten Mail zusammengesetzt.
Hierbei est es wichtig, dass wir zeilenumbruchgetrennt “Subject” und anschließend den Inhalt (${body}) angeben, bevor wir den gesamten Output in ein sendmail pipen.

Folgende Mail kommt hierbei bspw. heraus:


Folgende User haben Postfaecher von mindestens 10 GB:

m_user 17333.92
b_user 17311.53
a_user 17193.89

Das Ganze lässt sich selbstverständlich auch über ein einzelnes Script bewerkstelligen, da ohnehin das erste im zweiten lediglich aufgerufen und in eine temporäre Datei geschrieben wird. Allerdings ist es in unserem Fall so gebaut, da Script Nummer Eins in mehreren Fällen auch anderweitige händische Verwendung findet.

Die Einbindung, damit das auch alles automatisiert und ohne unser Zutun läuft, erfolgt einfach via Eintrag im Crontab des entsprechenden Systems.

In unserem Beispiel ist das wie folgt geschehen:


1 6   * * *   root    /root/postfachauslastung_monitoring.sh

Aus diesem Eintrag geht hervor, dass das Script “postfachauslastung_monitoring.sh” täglich um 6:01 Uhr morgens ausgeführt werden soll.

HINTERLASSEN SIE EINE ANTWORT

Bitte geben Sie Ihren Kommentar ein
Bitte geben Sie Ihren Namen ein