Mit der Monitoringlösung Zabbix ist es relativ einfach möglich, bei der Über-/Unterschreitung bestimmter Grenzwerte Alarme zu erstellen und diese auf verschiedenen Wegen versenden zu lassen. Zabbix verfügt dabei über eine relativ einfache Struktur.
Zabbix-Grundstruktur
- Geräte sind "hosts".
- "hosts" haben "items", also einzeln überwachte Variablen mit Werten "values".
- Grenzwerte eines "items" heißen "trigger".
- Wenn ein Grenzwert über-/unterschritten wird, wird ein "event" ausgelöst.
- Eine "action" startet einen (Benachrichtigungs-) Prozess, nachdem ein "event" ausgelöst wurde.
- Eine Benachrichtigung wird an Nutzer oder Nutzergruppen geschickt über unterschiedliche Wege ("media") geschickt.
- Das Ziel der Benachrichtigung wird in der "action" anhand des zu alarmierenden Nutzers ermittelt. Über "macros"1 lassen sich die Texte anpassen.
- Diese "macros" können auch verschiedene Werte des host-Objektes annehmen.
Es ist nicht möglich, jede Art von item-Wert für die Benachrichtigung zu nutzen.
Wie man das dennoch dynamisieren kann, zeigt dieses Beispiel.
Beispiel
- Es wird ein Emailzugang angelegt, der die Daten nur dem lokalen Benutzer (auf dem Zabbix-Server) zustellt.
- Auf dem Server sind Zusatzprogramme notwendig.
 - fetchmail (Zum Abholen der Email.)
- procmail (Zum Verarbeiten der Email.)
- formail (Zum Umformatieren der Emaildatei.)
 
Über die systemd-Services (analog cronjob) werden die Emails regelmäßig abgeholt und die Weiterverarbeitung gestartet.
nano /etc/systemd/system/multi-user.target.wants/mailrelay.service [Unit] Description=Mail relay (service) [Service] Type=simple ExecStart=/bin/sh -c '/bin/mv /var/mail/zabbix /var/mail/zabbix.tmp && /usr/bin/formail -s /usr/bin/procmail < /var/mail/zabbix.tmp && /bin/rm /var/mail/zabbix.tmp' [Install] WantedBy=multi-user.target
nano /etc/systemd/system/multi-user.target.wants/mailrelay.timer [Unit] Description=Mail relay [Timer] OnCalendar=*:0/5 Persistent=true [Install] WantedBy=multi-user.target
fetchmail startet procmail
nano /root/.fetchmailrc set no bouncemail defaults: batchlimit 100 poll localhost with protocol imap user "zabbix" password "[PASSWORT]" is zabbix ssl fetchall # keep no rewrite mda "/usr/bin/procmail -f %F -d %T";
procmail verarbeitet die Email
nano /root/.procmailrc
SHELL=/bin/sh
PATH=/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin 
MAILDIR=$HOME
DEFAULT=/dev/null
LOGFILE=/var/log/procmail.log
LOG="" 
VERBOSE="yes"
 
SUBJ=`formail -xSubject: ` 
NEW_SUBJ=`echo "${SUBJ}" | expand | /bin/sed -e 's|#[^# ]*#||g' -e 's|^\s*||g'`
NEW_TO=`echo "${SUBJ}" | expand | /bin/sed -n 's/.*#\([^# ]*\)#.*/\1/p' | /bin/grep -E "^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,63}$"` 
:0 bfhw
* ^To: <zabbix@localhost>
* !^X-Loop: Diese E-Mail-Adresse ist vor Spambots geschützt! Zur Anzeige muss JavaScript eingeschaltet sein. 
* !^Subject:.*Re:
* !^FROM_DAEMON
| formail -k -X "Content-Type:" -X "Content-Transfer-Encoding:" -X "Subject:" -X "From:" -X "Subject:" -X "Message-Id:" -X "Date:" -X "To:" -I "Content-Transfer-Encoding: base64" -I "From: Diese E-Mail-Adresse ist vor Spambots geschützt! Zur Anzeige muss JavaScript eingeschaltet sein. " -A "X-Loop: Diese E-Mail-Adresse ist vor Spambots geschützt! Zur Anzeige muss JavaScript eingeschaltet sein. " -I "To: ${NEW_TO}" -I "Subject: ${NEW_SUBJ}" | $SENDMAIL -oi ${NEW_TO} 
      
            
