Zabbix Housekeeping

Die Houskeeper Tasks

Vor der Zabbix-Version 2.2 existierte nur ein Housekeeper Tasks, der alte Item-Werte aus den History-Tabellen gelöscht hat. Dieser Task konnte global in der zabbix_server.conf deaktiviert werden. Seit Version 2.2 erfolgt die Steuerung der Housekeeper über die Weboberfläche. Unter Administration|General|Housekeeper können die Aufräumarbeiten gesteuert und ggf. deaktiviert werden.

Item Updateintervalle vergrößern

Wenn die MySQL-Datenbank zu schnell wächst, sollten Sie die Updateintervalle der Items prüfen und wo immer möglich vergrößern. Je größer die Zeitspanne zwischen den einzelnen Messzyklen, desto weniger Daten landen in der Datenbank. Fragen Sie sich kritisch, warum Sie ein Item alle 60 Sekunden und nicht alle fünf Minuten updaten. Was machen Sie mit den gespeicherten Daten? Wie schnell wollen Sie auf mögliche Fehler reagieren? Wenn Sie zum Beispiel eine Reaktionszeit von vier Stunden bei kritischen Fehlern sichergestellt haben, ist es dann notwendig, den Festplattenverbrauch aller Server aller 60 Sekunden zu messen?

Wenn Sie die Update-Intervalle einzelner Items nachträglich vergrößern, hat das keine Auswirkung auf den bereits verbrauchten Festplattenplatz.

Platzfresser identifizieren

Wenn Sie nach einiger Zeit merken, dass die Zabbix-Datenbank zu schnell wächst, sollten Sie prüfen, welche Tabelle die meisten Daten enthält. In der Regel sind dies die Tabellen "history" und "history_unit". Wenn Sie Ihre MySQL-Datebank mit der Option "innodb_file_per_table = 1" betreiben, identifizieren Sie die größten Tabellen ganz einfach.

root@monitoring:~# ls -lShr /var/lib/mysql/zabbix/|tail -n 10
-rw-rw---- 1 mysql mysql  10M Jun 10 11:22 items.ibd
-rw-rw---- 1 mysql mysql  29M Jun 10 11:21 history_str.ibd
-rw-rw---- 1 mysql mysql  56M Jun 10 11:22 sessions.ibd
-rw-rw---- 1 mysql mysql  72M Jun 10 11:21 events.ibd
-rw-rw---- 1 mysql mysql 140M Jun 10 11:10 trends.ibd
-rw-rw---- 1 mysql mysql 380M Jun 10 11:20 trends_uint.ibd
-rw-rw---- 1 mysql mysql 464M Jun 10 11:17 alerts.ibd
-rw-rw---- 1 mysql mysql 3,2G Jun 10 11:22 history_text.ibd
-rw-rw---- 1 mysql mysql 6,0G Jun 10 11:22 history.ibd
-rw-rw---- 1 mysql mysql  16G Jun 10 11:22 history_uint.ibd

Alternativ und unabhängig von den MySQL-Einstellungen können Sie die Größe der Tabellen mit folgender SQL-Anweisung ermitteln.

SELECT (data_length+index_length)/power(1024,3) tablesize_gb, TABLE_NAME
FROM information_schema.tables
WHERE table_schema='zabbix'
ORDER BY tablesize_gb DESC

MySQL: Eine Datei pro Tabelle

Es ist äußerst ratsam, dass Sie die MySQL-Datenbank so einstellen, dass pro Tabelle eine Datei angelegt wird. Dies ist leider nicht der Standard. Sollten Sie diese Einstellung nicht vor der Installation von Zabbix vorgenommen haben, sollten Sie auch nachträglich vornehmen. Dazu ist es notwendig, dass Sie die Datenbank komplett exportieren und wieder reimportieren.

Schritt für Schritt

  1. Stoppen Sie den Zabbix-Server
  2. Exportieren Sie die komplette Datenbank in eine Datei
    mysqldump --all-databases --single-transaction --events |gzip -c >/tmp/mysql-all-databases.sql.gz
  3. Stoppen Sie MySQL
  4. Öffnen Sie die Konfigurationsdatei /etc/my.cnf oder /etc/mysql/my.cnf und tragen Sie im Block [mysqld] die folgende Option ein innodb_file_per_table = 1
  5. Starten Sie MySQL
  6. Reimportieren Sie die Datebank mit
    gunzip -c /tmp/mysql-all-databases.sql.gz|mysql
  7. Werfen Sie einen Blick ins Verzeichnis /var/lib/mysql/zabbix. Sie sollten nun pro Tabelle zwei Dateien vorfinden. Die Tabellen-Definition mit der Endung .frm und die Tabellen-Daten mit der Endung .ibd.
  8. Starten Sie den Zabbix-Server
  9. Wenn Zabbix wieder wie gewohnt läuft, können Sie die Datei /tmp/mysql-all-databases.sql.gz löschen.