Erweitern von Zabbix Agents

Dieser Abschnitt enthält eine schrittweise Anleitung zum Erweitern der Funktionalität eines Zabbix Agents mithilfe eines Benutzerparameters.

Das folgende Beispiel ruft die Anzahl der von einem MySQL-Server ausgeführten Anweisungen ab. Die Schritte gelten sowohl für den Zabbix Agent als auch für Zabbix Agent 2.

Dieses Beispiel veranschaulicht die Funktionsweise von Benutzerparametern. Für die Überwachung von MySQL in Produktionsumgebungen sollten Sie die vordefinierten MySQL-Vorlagen verwenden, für die keine Benutzerparameter erforderlich sind.

Schritt 1: Zugriff auf MySQL vorbereiten

Der Agent wird als Betriebssystembenutzer zabbix ausgeführt. Verwenden Sie nicht das MySQL-Konto root, da es möglicherweise die socketbasierte Authentifizierung verwendet, wodurch eine Verbindung des Agents verhindert werden kann. Erstellen Sie stattdessen einen dedizierten MySQL-Benutzer:

CREATE USER 'zbx_monitor'@'localhost' IDENTIFIED BY '<password>';

Speichern Sie die Zugangsdaten in einer Datei, die nur für den Benutzer zabbix lesbar ist, zum Beispiel /etc/zabbix/mysql_monitor.cnf (der Pfad hängt vom Betriebssystem und der Installationsmethode von Zabbix ab):

[client]
user=zbx_monitor
password=<strong password>

Legen Sie Eigentümer und Berechtigungen der Datei fest:

sudo chown zabbix:zabbix /etc/zabbix/mysql_monitor.cnf
sudo chmod 600 /etc/zabbix/mysql_monitor.cnf

Übergeben Sie diese Datei explizit mit --defaults-extra-file (dies muss die erste an den MySQL-Client übergebene Option sein), anstatt sich auf ~/.my.cnf zu verlassen, da die Umgebungsvariable HOME des Daemons möglicherweise nicht gesetzt ist oder einen anderen Wert als erwartet hat. Wenn MySQL einen nicht standardmäßigen Socket-Pfad verwendet, fügen Sie derselben Datei eine Zeile socket= hinzu.

Schritt 2: Einen Befehl schreiben

Schreiben Sie ein benutzerdefiniertes Skript oder einen Befehl, um den erforderlichen Parameter abzurufen, und stellen Sie sicher, dass er unter denselben Bedingungen wie der Agent-Daemon funktioniert.

Der folgende Befehl gibt die Anzahl der vom MySQL-Server ausgeführten Anweisungen zurück:

/usr/bin/mysql --defaults-extra-file=/etc/zabbix/mysql_monitor.cnf -N -B -e "SHOW GLOBAL STATUS LIKE 'Questions'" | /usr/bin/awk '{print $2}'

Sie können den Befehl als Benutzer zabbix testen. Er sollte eine einzelne Zahl ausgeben:

sudo -u zabbix sh -c "/usr/bin/mysql --defaults-extra-file=/etc/zabbix/mysql_monitor.cnf -N -B -e \"SHOW GLOBAL STATUS LIKE 'Questions'\" | /usr/bin/awk '{print \$2}'"

Schritt 3: Fügen Sie den Befehl zur Konfiguration des Zabbix Agent hinzu

Anstatt die zentrale Agent-Konfigurationsdatei (zabbix_agentd.conf oder zabbix_agent2.conf) zu bearbeiten, erstellen Sie eine separate Datei in dem Verzeichnis, das durch den Parameter Include eingebunden wird. Separate Dateien sind einfacher zu verwalten und werden bei Paketaktualisierungen weniger wahrscheinlich beeinträchtigt.

Erstellen Sie beispielsweise /etc/zabbix/zabbix_agentd.d/mysql.conf (/etc/zabbix/zabbix_agent2.d/mysql.conf für Zabbix Agent 2) mit folgendem Inhalt:

UserParameter=mysql.questions,/usr/bin/mysql --defaults-extra-file=/etc/zabbix/mysql_monitor.cnf -N -B -e "SHOW GLOBAL STATUS LIKE 'Questions'" | /usr/bin/awk '{print $2}'

mysql.questions ist der eindeutige Schlüssel des Datenpunkts. Er muss innerhalb der Agent-Konfiguration eindeutig sein.

Sie können den Parameter testen, indem Sie den Zabbix Agent mit dem Flag -t ausführen. Führen Sie den Test als Benutzer zabbix aus und geben Sie die Konfigurationsdatei an, wenn sie sich nicht am Standardspeicherort befindet:

Für Zabbix Agent:

sudo -u zabbix zabbix_agentd -c /etc/zabbix/zabbix_agentd.conf -t mysql.questions

Für Zabbix Agent 2:

sudo -u zabbix zabbix_agent2 -c /etc/zabbix/zabbix_agent2.conf -t mysql.questions

Die erwartete Ausgabe enthält eine Zahl, zum Beispiel:

mysql.questions                               [t|4567]

Schritt 4: Benutzerparameter neu laden und testen

Laden Sie die Benutzerparameter aus der Konfigurationsdatei neu, indem Sie den folgenden Befehl ausführen:

Für den Zabbix Agent:

sudo zabbix_agentd -c /etc/zabbix/zabbix_agentd.conf -R userparameter_reload

Für Zabbix Agent 2:

sudo zabbix_agent2 -c /etc/zabbix/zabbix_agent2.conf -R userparameter_reload

Führen Sie den Befehl als root oder als der Betriebssystembenutzer aus, unter dem der Agent ausgeführt wird.

Alternativ können Sie den Agent neu starten, um die Konfigurationsänderungen anzuwenden.

Sie können den Parameter mit dem laufenden Agent testen, indem Sie das Dienstprogramm zabbix_get verwenden, zum Beispiel vom Zabbix Server aus:

zabbix_get -s <IP address> -k mysql.questions

Hier ist <IP address> die IP-Adresse des Hosts, auf dem der Agent ausgeführt wird, zu dem zabbix_get eine Verbindung herstellt. Die IP-Adresse des Hosts, auf dem zabbix_get ausgeführt wird, muss im Parameter Server des Agents aufgeführt sein.

Damit dieser Test funktioniert, muss der Agent passive Prüfungen akzeptieren (für den Zabbix Agent darf StartAgents nicht auf 0 gesetzt sein). Wenn der Agent nur für aktive Prüfungen konfiguriert ist, überspringen Sie diesen Test und überprüfen Sie den Datenpunkt unter Monitoring > Latest data, nachdem Sie den letzten Schritt abgeschlossen haben.

Schritt 5: Einen Datenpunkt erstellen

Erstellen Sie einen neuen Datenpunkt auf dem überwachten Host mit dem Datenpunktschlüssel mysql.questions.

Wählen Sie den Datenpunkttyp aus: entweder Zabbix Agent oder Zabbix Agent (aktiv).

Für den passiven Zabbix Agent muss die Adresse des Zabbix Servers oder Proxys im Parameter Server des Agents aufgeführt sein. Für den aktiven Zabbix Agent muss der Parameter ServerActive den Zabbix Server oder Proxy angeben, und der Parameter Hostname des Agents muss exakt mit dem im Frontend konfigurierten Hostnamen übereinstimmen.

Wählen Sie den Informationstyp des Datenpunkts aus. Der Agent gibt den Wert immer als Text zurück; der Informationstyp legt fest, wie Zabbix den Wert nach allen Vorverarbeitungsschritten interpretiert und speichert.

Für den kumulativen Rohzähler wählen Sie Numerisch (positiv). Um die Anzahl der Anweisungen pro Sekunde zu messen, wählen Sie Numerisch (Gleitkomma) und fügen Sie den Vorverarbeitungsschritt Änderung pro Sekunde hinzu.