Zabbix ist ein open source Monitoring System, das unter der GNU General Public License (GPL) version 2 lizenziert ist. Seit November 2013 wird es von mir eingesetzt. Hauptvorteile sind die einfache Implementierung, die Flexibilität und Skalierbarkeit sowie die geringen Voraussetzungen, die Pflegbarkeit über ein Webfrontend und die Anschaffungs- und Wartungskosten.
Serverplattform:
Softwarepakete:
- LAMP-Server (tasksel)
- fping (aptitude)
- php5-ldap, php5-curl (aptitude)
- snmp, snmp-mibs-downloader (aptitude)
- zabbix-server, zabbix-frontend-php und zabbix-agent, Download unter http://www.zabbix.com
Anpassungen:
Filesystem
Mounten der DB-Platte mit den folgenden Optionen, ist empfehlenswert bei Installationen mit hoher Last:
/var ext4 noatime,data=ordered,barrier= 0 # Sofortiges Schreiben ohne Buffering, Ausschalten Journal |
MySQL
- Tuning der DB mit den folgenden Parametern in der Datei /etc/mysql/conf.d/performance.cnf
innodb_flush_log_at_trx_commit= 2 innodb_buffer_pool_size=1500M innodb_log_buffer_size=4M innodb_file_per_table |
Löschen historischer Daten bei zu großen Tabellen
- Erzeugen MySQL-konformer Zeitstring:
# date +%s -d
"2012/12/24 00:00:00"
(JJJJ/MM/TT)
1356303600
- Löschen Einträge aus Tabelle history_uint älter 12.12.2013 und Eindampfen Tabelle:
mysql> DELETE FROM `history_uint` WHERE `clock` <
1346428800
;
mysql> optimize table history_uint;
- Löschen Einträge aus Tabelle history älter 12.12.2012 und Eindampfen Tabelle:
mysql> DELETE FROM `history` WHERE `clock` <
1346428800
;
mysql> optimize table history;
Alternativ besteht die Möglichkeit, über den Housekeeper (Administration->General->Housekeeping) alte Einträge periodisch aus der DB zu entfernen. Parameter in der zabbix_server.conf dazu:
- HousekeepingFrequency=<1-24> (Stunden)
- MaxHousekeeperDelete=<0-1000000>
Tabellen Defragmentieren
Die Tabellen history_uint und trends_uint werden je nach Einstellung sehr groß. Um sie zu defragmentieren, genügt der Befehl
mysqlcheck -u root -p --auto-repair --optimize zabbix # Passwort in Keepass |
Mailing
- Das mailing erfolgt über das folgende Menü:

Alternativ kann Zabbix auch über Jabber/XMPP und SMS (nur per angeschlossenem GSM-Modem!) alarmieren.
Zabbix Proxy
Ein Proxy entlastet den Server, indem er selbst Daten sammelt und in definierten Abständen entweder an den Server überträgt (active proxy) oder vom Server gepollt wird (passive proxy).
Ist der Proxy erst funktionsfähig, können am Server Hosts angelegt werden, die in der Hostkonfiguration so konfiguriert werden müssen, dass sie vom Proxy gemonitort werden. Das funktioniert sowohl für Agent- simple- und Webchecks.
Agents
Es gibt aktuelle Agenten für nahezu alle großen Serverplattformen. Für Windows (auf http://www.suiviperf.com/zabbix/index.php) und Linux (14.04aufwärts ) in binärer Form, ansonsten als source. Die Installation der Sourcecode-Version auf einem Ubuntu 6.06 läuft wie folgt:
- groupadd zabbix && useradd -g zabbix zabbix
- ./configure –enable-agent
- make install (binaries und Konfigs etc. landen unter /usr/local/bin, /usr/local/sbin und /usr/local/etc.
- startskript im Anhang kopieren nach /etc/init.d und mit chmod 755 ausführbar machen
- update-rc.d <Startskript> defaults erzeugt Links in den runlevel-Verzechnissen
- Konfig unter /usr/local/etc/zabbix_agentd.conf anpassen
- Agenten starten mit /etc/init.d/zabbix_agent start
Aktive Agents
Entlasten den Pollerprozeß vom Server, da sie ihre Daten selbst an den Server melden. Dafür ist allerdings eine eingehende Verbindung auf TCP/10051 zum Server notwendig. Ideal für LAN-Clients. Damit das klappt, müssen 3 Voraussetzungen aufeinandertreffen:
- Der Host darf in Zabbix noch nicht existieren und es muss eine Action des Typs Auto Registration existieren.
- Der Agent benötigt zusätzlich zur passiven Server-Konfiguration den Servernamen als Wert vor der Variable ServerActive.
- Der Agent benötigt in seiner Konfiguration den Parameter: HostMetadataItem=system.uname. Anhand des zurückgelieferten Werts (Windows/Linux) wird der neue Agent gleich mit den richtigen Templates verknüpft und in die richtige Gruppe gesteckt.
Logfile-Überwachung
- Voraussetzung:active agent
- Einrichten eines Items
- ggfs. passenden Trigger einrichten
Passive Agents
Werden vom Pollerprozeß des Servers auf TCP/10050 abgefragt und sind für DMZ-Szenarios zu bevorzugen. Voraussetzungen für die Funktion:
- die Item-Typen für einen passive agent müssen Zabbix agent sein.
- Der Agent benötigt den Servernamen als Wert vor der Variable Server
Agents mit mehreren Netzwerkkarten
Wenn ein Agent mehrere Netzwerkkarten hat, registriert er sich mit allen am Server, was sinnfrei sein kann. Um das zu verhindern, müssen die Variablen SourceIP und ListenIP konfiguriert und der Agent neu gestartet werden.
Besondere Items
aggregate checks
- Um eine Funktion (avg, max, min, sum) über die (gleichnamigen) Items mehrerer Hosts auszuführen, müssen die entspr. Hosts in eine Gruppe gesteckt werden.
- Als Zweites wird auf dem Zabbix-Server ein Item des Typs Zabbix-aggregate angelegt, das den folgenden Key erhält:
grp<avg,max,min,sum>[hostgroup,item,timeperiod,parameter]
Remote Commands
Können als action konfiguriert werden, um beim Zutreffen einer oder mehrerer Bedingungen (UND/ODER) eine Operation auszuführen. So kann die Operation ein Shell-Befehl sein, der vom Server zum Agent geschickt wird (Achtung – nur passive Agents!) oder ein ssh command, der direkt vom Server abgesetzt wird. Bei Linux: Zabbix-User benötigt entsprechende sudo-Rechte.
SNMP-Checks
Über Templates
Im Standardumfang von Zabbix sind einige SNMP-Templates dabei. Hier reicht es, dem jewg. Host unter Macros die Variable {$SNMP_COMMUNITY} zuzuweisen und das entsprechende Template.
Individuell
- den Host per snmp an der shell abfragen:
snmpwalk -c <community> -v2c (version) <hostname/ip>
- wenn der Host erreichbar ist, kann ein Item dafür in Zabbix angelegt werden. Dafür ist die Kenntnis der genauen OID notwendig, die aber relativ leicht im Internet abzufragen ist.
- Dem Host kann auch wieder unter Macros die Variable {$SNMP_COMMUNITY} verpasst werden.
- Im Anschluss wird falls gewünscht ein Trigger dafür eingerichtet.
Hosts anhand Inventardaten finden
- Über den Punkt Inventory können hosts anhand ihrer Inventardaten gruppiert werden! Beispiel: Inventory -> Group Switches, Grouping by -> Location. Es erfolgt eine Anzeige nach Lokationen mit einer Spalte dahinter mit der Anzahl der Switches mit dem jewg. Location Tag. Ein Klick auf die Anzahl zeigt die Switches.
Downloads
Agents (Windows/Linux), Server, Proxy, Frontend und Sources: http://www.zabbix.com/download.
Kompilierte Windows-Agenten können unter http://www.suiviperf.com/zabbix/index.php heruntergeladen werden.
Verschlüsselung der Kommunikation
Anlegen eines zufälligen PSK-Keys auf agent oder proxy:
openssl rand -hex 48 -out /etc/zabbix/key.psk chown zabbix:zabbix /etc/zabbix/key.psk chmod 0400 /etc/zabbix/key.psk
Eintragen folgender Optionen in der Konfiguration des Agenten oder Proxys:
TLSConnect=psk TLSAccept=psk TLSPSKIdentity=Key1 TLSPSKFile=/etc/zabbix/key.psk
Eintragen des PSK ins Frontend des Servers