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: This email address is being protected from spambots. You need JavaScript enabled to view it.
* !^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: This email address is being protected from spambots. You need JavaScript enabled to view it." -A "X-Loop: This email address is being protected from spambots. You need JavaScript enabled to view it." -I "To: ${NEW_TO}" -I "Subject: ${NEW_SUBJ}" | $SENDMAIL -oi ${NEW_TO} 

{phocagallery view=category|categoryid=30|imageid=44|float=left}

{phocagallery view=category|categoryid=30|imageid=45|float=left}