Zabbix Database Monitor

Datenbanken als Informationsquelle

Zabbix bietet die Möglichkeit, zahlreiche Datenbanken mit beliebigen SQL-Queries abzufragen und die Resultate als Item-Values zu speichern und von Triggern weiterverarbeiten zu lassen.

So können Sie zum Beispiel monitoren, wie viele Nutzer auf Ihrem Online-Portal angemeldet sind. Sie können aber auch einen Syslog-Daemon mit SQL-Backend einsetzen. Dann kann Zabbix auf sehr flexible und effektive Art nach Logmeldungen in einer Datenbank suchen. Oder Sie möchten eingehende Mails von Zabbix analysieren lassen. Die Open-Source-Software dbmailer schreibt alle ankommenden Mails in eine SQL-Datenbank. Über den Database Monitor kann Zabbix nun einfach nachschauen, wann zum Beispiel die letzte Mail von Ihrer Backup-Software eingetroffen ist und ob diese die erwarteten Stichworte enthält, die Ihnen anzeigen, dass das Backup erfolgreich erstellt wurde.

Zum Abfragen der Datenbanken setzt Zabbix auf die von Microsoft entwickelte Technologie Open Database Connectivity (ODBC). ODBC ist eine standardisierte Datenbankschnittstelle zwischen Applikation (Zabbix) und beliebigen Datenbanken. Zabbix muss nur mit der ODBC-Api sprechen und nicht mit der Datenbank direkt. Das hat den Vorteil, dass Zabbix nicht für jede Datenbank über passende Treiber verfügen muss. Sobald Sie einen Treiber per ODBC eingerichtet haben, kann Zabbix auf eine Datenbank zugreifen.

Es existieren zwei Open-Source-Varianten von ODBC: UnixODBC und iodbc. Zabbix kann beide nutzen. Die nachfolgende Anleitung beschränkt sich nur auf UnixODBC, weil es weiter verbreitet ist und auf allen Distributionen ohne Komplikationen funktionieren sollte.
Damit Zabbix Datenbanken per ODBC abfragen kann, müssen der Zabbix-Server und ggf. auch die Zabbix-Proxys mit der ODBC-Option kompiliert werden. Wenn Sie bei der ersten Installation von Zabbix also die Option --with-unixodbx nicht angegeben haben, dann müssen Sie den Zabbix-Server neu kompilieren. Dies sollten sie mit denselben Quellen tun, mit denen Sie auch den laufenden Zabbix-Server übersetzt haben.

UnixODBC per Paketmanager installieren

Wenn Sie den Zabbix-Server mit den RPM- oder DEB-Paketen aus dem Zabbix-Repository installiert haben, ist Ihr Zabbix-Server bereit für das Datenbank-Monitoring. Sie müssen UnixODBC und den Zabbix-Server nicht erneut kompilieren und installieren. Sie müssen lediglich die für Ihre Datenbank passenden Treiber installieren. Beispielsweise:

yum install mysql-connector-odbc # Red Hat/CentOS
apt-get install libmyodbc        # Debian/Ubuntu 14.04
Mit der Version Ubuntu 16.04 Xenial wurde das Paket "libmyodbc" aus dem Repository entfernt. Benutzer von Ubuntu 16.04 müssen den MySQL-Unixodbc-Treiber – wie nachfolgenden beschrieben – manuell über den Download der MySQL-Webseite installieren.

UnixODBC und Zabbix-Server aus dem Quellcode installieren

UnixODBC installieren

Wenn Sie den Zabbix-Server aus dem Quellcode kompiliert haben, sollten Sie UnixODBC ebenfalls aus dem Quellcode übersetzen. Alle Distributionen stellen zwar Pakete mit UnixODBC bereit, doch sind diese in der Regel zu alt. Bei Debian fehlen außerdem einige Header-Dateien im Paket UnixODBC-dev. Ersparen Sie sich Ärger und Zeit und installieren Sie UnixODBC direkt aus den aktuellen Quellen.

Laden Sie die Quellen aus dem Internet herunter. Anschließend packen Sie den Tarball aus. Mit dem üblichen Dreisatz wird dann UnixODBC kompiliert und installiert. Achten Sie auf die korrekte Angabe für die Option --libdir. Diese variiert ja nachdem, ob Sie ein 32- oder 64Bit-System verwenden.

cd /usr/src
wget ftp://ftp.unixodbc.org/pub/unixODBC/unixODBC-2.3.2.tar.gz
tar xzf unixODBC-2.3.2.tar.gz
cd unixODBC-2.3.2
./configure --prefix=/usr --sysconfdir=/etc --libdir=/usr/lib64
make
make install

Mit den oben stehenden Kommandos wird UnixODBC in die Standardverzeichnisse Ihres Linux-Systems installiert. Das bedeutet, die Bibliotheken landen in /usr/lib oder /usr/lib64 und die ausführbaren Dateien werden nach /usr/bin/ installiert. Wenn Sie ein anderes Präfix verwenden, müssen Sie ggf. den „Library Path“ anpassen, in dem andere Programme nach gemeinsam genutzten Bibliotheken suchen.

Zabbix mit UnixODBC kompilieren

Sobald UnixODBC funktioniert, können Sie den Zabbix-Server neu kompilieren.

Wenn Ihr Zabbix-Server bereits läuft, sollten Sie nur eine neue Binary zabbix_server kompilieren, welche Sie dann gegen die aktuelle austauschen. Rufen Sie also nicht das Kommando make install auf. Dieses würde viele andere Dateien in Ihr System kopieren und ggf. Dateien ungewollt überschreiben.

Wechseln Sie in das Verzeichnis mit dem Zabbix-Quellcode und rufen Sie ./configure mit genau den Optionen auf, mit dem Sie Zabbix zuvor auch kompiliert haben. Fügen Sie nun zusätzlich die Option --with-unixodbc ein. Beispiel:

./configure --enable-server --enable-agent\
 --with-mysql --with-net-snmp --with-openipmi\
 --with-unixodbc --prefix=/opt/zabbix 

checking for odbc_config... /usr/local/bin/odbc_config
checking for main in -lodbc... yes
checking whether unixodbc is usable... yes

Wenn ./configure bestätigt, dass unixodbc gefunden wurde, können Sie mit make kompilieren und dann die Datei zabbix_server an Ihren Ort kopieren. Stoppen Sie den Zabbix-Server vorher und machen Sie sich ein Backup der alten Datei.

Wenn Sie anschließend den Zabbix-Server neu starten, sollte im Logfile des Servers der Eintrag ODBC = yes auftauchen. Sie können nun mit Zabbix-Datenbanken per ODBC abfragen.

Datenbanktreiber installieren

Damit eine Applikation über ODBC mit einer Datenbank „reden“ kann, muss ODBC wissen, wie man mit einer speziellen Datenbank eine Verbindung aufbaut. Dazu braucht man für jeden Datenbanktyp einen speziellen Treiber. Diese werden in der Regel von den Datenbankherstellern kostenlos zum Download bereitgestellt.

MySQL-ODBC-Treiber
Benutzer von CentOS/RHEL installieren den MySQL ODBC Treiber mit dem Paketmanager.

yum install mysql-connector-odbc

Alternativ laden Sie den ODBC-Treiber für Linux von der MySQL-Webseite herunter. Auch SUSE- oder Red Hat-Benutzer sollten den allgemeinen ODBC-Treiber als tar.gz-Datei downloaden. Da Sie UnixODBC nicht über den rpm-Paketmanager installiert haben, wird die Installation des Treibers per rpm wegen der nicht erfüllten Abhängigkeiten fehlschlagen.
Packen Sie die Datei nach dem Download aus und kopieren Sie die Treiber (.so-Dateien) in Ihr System:

tar xzf mysql-connector-odbc-<VERSION>-linux-glibc2.3-x86-64bit.tar.gz
mkdir /usr/lib/odbc/
cp /usr/src/mysql-connector-odbc-<VERSION>-linux-glibc2.3-x86-64bit/lib/*\
 /usr/lib/odbc/

Benutzer von Ubuntu 16.04 Xenial laden den Treiber für Ubuntu 15.10 herunter und gehen wie folgt vor:

apt-get install unixodbc odbcinst1debian2
wget http://cdn.mysql.com//Downloads/Connector-ODBC/5.3/mysql-connector-odbc-5.3.6-linux-ubuntu15.10-x86-64bit.tar.gz
tar xf mysql-connector-odbc-5.3.6-linux-ubuntu15.10-x86-64bit.tar.gz 
mkdir /usr/lib/odbc
cp mysql-connector-odbc-5.3.6-linux-ubuntu15.10-x86-64bit/lib/libmyodbc5* /usr/lib/odbc/   

Prüfen Sie nun, ob auch alle anderen Bibliotheken aus Ihrem System vorhanden sind, die der MySQL-ODBC-Treiber benötigt.

ldd /usr/lib/odbc/libmyodbc5*.so

Sollten Bibliotheken mit „Not found“ angezeigt werden, müssen Sie diese über den Paketmanager installieren. Zeigt ldd an, dass alle Bibliotheken vorhanden sind, können Sie den Treiber nutzen.

ODBC-Verbindungen und DSN einrichten

Nachdem Sie ODBC und einen ODBC-Datenbanktreiber installiert haben, müssen Sie zum Beispiel den MySQL-Treiber ODBC bekanntgeben.

Dazu legen Sie die Datei /etc/odbcinst.ini mit folgendem Inhalt an:

[MySQL5]
Description     = MySQL5
Driver          = /usr/lib/odbc/libmyodbc5a.so

Der Pfad zum Datenbanktreiber kann je nach Distribution und Installationsweise unterschiedlich sein. Suchen Sie mit find /usr/lib/ -name "*myodbc*.so" danach.

Möchte sich eine Applikation per ODBC mit einer Datenbank verbinden, wird ein sogenannter DSN (Data Source Name) verwendet. Für jede Datenbank, die Zabbix oder eine andere Applikation per ODBC ansprechen möchte, muss ein DSN eingerichtet werden. Der DSN gibt vor, mit welchem Treiber eine Datenbank angesprochen wird. Außerdem werden weitere Verbindungsdaten wie IP, Benutzername, Datenbankname etc. in der DSN-Konfiguration gespeichert.
Legen Sie eine Datei /etc/odbc.ini mit folgendem Inhalt an:

[mysql-test]
Driver          = MySQL5
DATABASE        = zabbix
PWD             = 12345
SERVER          = 127.0.0.1
PORT            = 3306
UID             = root

Der Wert in eckigen Klammern ist der Name des DSN, wie ihn die Applikation verwenden muss. Der Treiber muss exakt so angegeben werden, wie er in der Datei /etc/odbcinst.ini eingefügt wurde. Benutzername und Passwort müssen Sie nicht in den DSN eintragen. Diese können auch bei jeder Datenbankverbindung von der Applikation mitgeschickt werden.

UnixODBC testen

Bevor Sie UnixODBC in Zabbix integrieren, sollten Sie testen, ob es auch funktioniert. Wenn also die Dateien /etc/odbcinst.ini und /etc/odbc.ini angelegt wurden, können Sie mit dem Kommando

isql <DSN> <user> <password>

einen DSN testen. Wenn der Benutzername und das Passwort schon in der odbc.ini eingetragen wurden, genügt die Angabe des DSN, beispielsweise isql mysql-test. Wenn alles korrekt eingerichtet wurde, sollten Sie per Konsole auf der Datenbank angemeldet sein. Geben Sie nun eine SQL-Abfrage ein. Sollte die Verbindung nicht zustande kommen, versuchen Sie mit isql -v <DSN> über die erweiterte Ausgabe einen Hinweis zu bekommen.

Items vom Typ Database-Monitor einrichten

Eine Datenbankabfrage wird im Zabbix-Server als Item eingerichtet. Das Ergebnis der Datenbankabfrage wird dann als Item-Value gespeichert. Legen Sie ein neues Item an und wählen Sie als Typ „Database-Monitor“.

Den Item-Key können Sie nicht über ein weiteres Menü auswählen. Geben Sie diesen nach folgendem Schema an:

db.odbc.select[what_you_like,dsn]

Der Key muss immer mit db.odbc.select beginnen. In den eckigen Klammern geben Sie einen beliebigen String ein, mit dem Sie später das Item zum Beispiel bei der Konfiguration der Trigger identifizieren. Als zweiten Parameter geben Sie einen DSN an, wie Sie ihn vorher in der Datei /etc/odbc.ini eingerichtet haben.

Wenn Sie für einen DSN in der Datei /etc/odbc.ini einen Benutzernamen und ein Kennwort hinterlegt haben, bleiben die Felder „User name“ und „Password“ frei. Sollten die Zugangsdaten nicht in der DNS-Konfiguration hinterlegt sein, geben Sie diese in der Item-Konfiguration an.

Items vom Typ Database-Monitor werden dem Host zugeordnet, für den sie eingerichtet werden. Die Verbindungsdaten des Hosts werden aber nicht berücksichtigt. Auf welchem Host die SQL-Abfragen ausgeführt werden, wird nur über den DSN eingestellt. Es ist also möglich, dass Sie das Item für Host A anlegen, es wird aber eine Datenbank auf Host B abgefragt.

Im Feld „SQL query“ geben Sie das SQL-Kommando an, welches ausgeführt werden soll. Zum Beispiel:

select count(*) from items;
Anlegen eines Items, welches eine Datenbank abfragt

Vorgaben für die SQL-Abfragen

Beachten Sie:

  • Das SQL-Kommando muss mit select beginnen.
  • Die Query darf nur einen einzigen Wert zurückliefern.
  • Liefert die Query mehr als eine Spalte zurück, wird nur die erste Spalte von Zabbix berücksichtigt.
  • Liefert eine Query mehr als eine Zeile zurück, so wird nur die erste Zeile ausgelesen.
  • Queries können, müssen aber nicht mit einem Semikolon beendet werden.
  • Globale Makros wie zum Beispiel {$HOSTNAME} werden nicht ersetzt.

Achten Sie bei jedem Item auf den korrekten Type of Information. Liefert die Datenbankabfrage eine Ganzzahl zurück, wählen Sie Numeric Unsigned aus. Kommazahlen werden als Float eingerichtet und Text als Text.

Sie können Items vom Typ Database Monitor für jeden Host einrichten. Die Datenbankabfrage übernimmt immer der Zabbix-Server. Wird ein Host von einem Proxy überwacht, dann erfolgt die Abfrage der Datenbank vom Proxy aus. Das setzt voraus, dass Sie auch auf den Proxys UnixODBC installiert haben und dass Sie den Proxy mit der Option --with-unixodbc kompiliert haben. Die Konfiguration der DSN muss ebenfalls auf den Proxys vorhanden sein.

Wenn bei der SQL-Abfrage ein Fehler auftritt, wird Ihnen dieser in der Übersicht der Items angezeigt, indem Sie mit der Maus über das rote Kreuz in der Spalte „Error“ fahren.

Anzeige von SQL-Fehlern