Wir nutzen auf Linux-Server häufig einen lokalen Exim, um zum Beispiel Fehler-E-Mails von Programmen zu verschicken. Wenn es dabei zu Problemen kommt, merkt man das daran, dass die Mail-Queue immer länger wird bzw. die Anzahl von "gefrorenen" (frozen) E-Mails größer als 0 ist. Aber in diesem Fall, also wenn es Probleme mit dem E-Mail-Server gibt, kann man sich leider nicht zuverlässig per E-Mail benachrichtigen lassen. 😉
Aber da wir Zabbix als Monitoring-System nutzen, liegt es natürlich nahe, auch damit die Länge der Queue bzw. die Anzahl der gefrorenen E-Mails zu beobachten.
Genau dafür gibt es in Zabbix, genauer beim Zabbix Agent, die "User Parameter".
Schritt 1: Daten ermitteln
Um die Anzahl von E-Mails in der Queue von Exim zu ermitteln, gibt es das Kommando
exim4 -bpc
exipick
macht es auch einfach, die Anzahl der "frozen mails" zu bekommen:
exipick -zi | wc -l
Schritt 2: Dem Zabbix Agent neue Tricks beibringen
Wenn der Zabbix Agent etwas ausführt, passiert es als Benutzer zabbix
, also müssen die obigen Kommandos mit sudo
ausgeführt werden.
Damit das ohne Passworteingabe läuft, habe ich eine neue Datei /etc/sudoers.d/zabbix
angelegt (ich verwende Debian in diesem Beispiel):
zabbix ALL=(ALL) NOPASSWD: /usr/sbin/exim4,/usr/sbin/exipick
Damit die Kommandos vom Zabbix Agent aus genutzt werden können, muss man sie in der Konfiguration hinterlegen zusammen mit einem Namen (Key), unter dem man sie dann aufrufen kann.
Zur besseren Übersicht erzeuge ich dafür die neue Datei /etc/zabbix/zabbix_agent2.d/exim-monitoring.conf
(bei Zabbix Agent 2).
### Option: UserParameter
# User-defined parameter to monitor. There can be several user-defined parameters.
# Format: UserParameter=<key>,<shell command>
# See 'zabbix_agentd' directory for examples.
#
# Mandatory: no
# Default:
# UserParameter=
UserParameter=exim.queuelength,sudo /usr/sbin/exim4 -bpc
UserParameter=exim.frozenmails,sudo /usr/sbin/exipick -zi | /usr/bin/wc -l
Man muss anschließend entweder den Zabbix Agent neustarten oder zumindest die UserParameter aktualisieren mit (bei Zabbix Agent 2):
zabbix_agent2 -R userparameter_reload
Man kann sie dann auch direkt testen:
zabbix_agent2 -t exim.queuelength
exim.queuelength [s|0]
zabbix_agent2 -t exim.frozenmails
exim.frozenmails [s|0]
Schritt 3: Auf dem Zabbix-Server
Jetzt kann man auf Zabbix-Server-Seite einem Host ein Item hinzufügen. Oder man macht es gleich richtig und erstellt dafür ein Template. Ich nenne es "Exim Monitoring"
Darin erstelle ich die zwei Items "Queue Length" und "Frozen mails"
Für beide Items noch jeweils ein Trigger, damit man z. B. benachrichtigt werden kann:
Jetzt kann man das neue Template einem oder mehreren Hosts zuweisen.
Kurz danach sollten die ersten Werte eintrudeln, die man sich unter "Monitoring - Latest Data" anzeigen lassen kann.