Zabbix API verwenden

zabbix_utils ermöglicht Ihnen die Verwendung der Zabbix API zur Verwaltung von Zabbix-Objekten, einschließlich des Erstellens von Hosts, des Aktualisierens von Datenpunkten, des Abrufens von Ereignissen und mehr.

API-Anfragen können im synchronen oder asynchronen Modus ausgeführt werden:

  • Im synchronen Modus sendet Ihr Python-Skript eine Anfrage und wartet auf eine Antwort, bevor es fortfährt. Dies eignet sich für einfache, sequenzielle und vorhersehbare Vorgänge.
  • Im asynchronen Modus sendet das Skript Anfragen, ohne auf jede einzelne Antwort zu warten, sodass andere Vorgänge parallel fortgesetzt werden können; dies ist effizienter bei langsamen Anfragen oder großen Datenmengen.

Die Beispiele auf dieser Seite konzentrieren sich auf den synchronen Modus, obwohl der asynchrone Modus ähnlichen Mustern folgt. Zusätzliche Beispiele sind im GitHub-Repository zabbix_utils verfügbar.

Import

Um zabbix_utils für die Arbeit mit der Zabbix-API zu verwenden, importieren Sie die Klasse ZabbixAPI in Ihr Skript:

from zabbix_utils import ZabbixAPI

Wenn Sie bereits eine Python-Bibliothek aus der Community verwenden, können Sie diesen Import in der Regel durch ZabbixAPI aus zabbix_utils ersetzen.

Anmelden

Bevor Sie API-Anfragen stellen, müssen Sie eine ZabbixAPI-Instanz erstellen und sich bei der Zabbix API anmelden.

Wählen Sie die Methode, die am besten dazu passt, wie Sie Anmeldedaten verwalten. Sie können Ihren Benutzernamen und Ihr Passwort oder API-Tokens verwenden.

Während der Initialisierung

Beim Erstellen einer ZabbixAPI-Instanz können Sie die URL der Zabbix-Weboberfläche und Ihre Zugangsdaten auf einmal angeben:

# Benutzername und Passwort:
api = ZabbixAPI(url="127.0.0.1/zabbix", user="Admin", password="zabbix")

# API-Token:
api = ZabbixAPI(url="127.0.0.1/zabbix", token="your_api_token")

Wenn Sie Verbindungsparameter lieber gruppieren möchten, können Sie sie als Python-Dictionary übergeben und mithilfe der Python-Syntax für Schlüsselwortargumente entpacken:

ZABBIX_AUTH = {
    "url": "127.0.0.1/zabbix",
    "user": "Admin",
    "password": "zabbix"
}

api = ZabbixAPI(**ZABBIX_AUTH)
Verwendung von login()

Sie können zunächst eine ZabbixAPI-Instanz nur mit der URL der Zabbix-Weboberfläche erstellen und später die Methode login() mit Ihren Zugangsdaten verwenden:

# Benutzername und Passwort:
api = ZabbixAPI(url="127.0.0.1/zabbix")
api.login(user="Admin", password="zabbix")

# API-Token:
api = ZabbixAPI(url="127.0.0.1/zabbix")
api.login(token="your_api_token")
Verwendung von Umgebungsvariablen

Sie können Ihre Zugangsdaten zunächst als Umgebungsvariablen speichern, zum Beispiel über ein Terminal:

# Benutzername und Passwort:
export ZABBIX_USER="Admin"
export ZABBIX_PASSWORD="zabbix"

# Token:
export ZABBIX_TOKEN="your_api_token"

Wenn Sie dann Ihr Skript aus derselben Terminal-Sitzung starten, benötigt die ZabbixAPI-Instanz im Skript nur die URL der Zabbix-Weboberfläche:

api = ZabbixAPI(url="127.0.0.1/zabbix")

Sie können die URL auch in einer Umgebungsvariablen speichern:

# Benutzername und Passwort:
export ZABBIX_USER="Admin"
export ZABBIX_PASSWORD="zabbix"
export ZABBIX_URL="https://127.0.0.1/zabbix"

# Token:
export ZABBIX_TOKEN="your_api_token"
export ZABBIX_URL="https://127.0.0.1/zabbix"

Wenn URL und Zugangsdaten vollständig als Umgebungsvariablen gesetzt sind, benötigt die ZabbixAPI-Instanz im Skript überhaupt keine Argumente:

api = ZabbixAPI()

Abmelden

Wenn Sie sich mit einem Benutzernamen und Passwort angemeldet haben, rufen Sie nach Abschluss Ihrer API-Operationen die Methode logout() auf:

from zabbix_utils import ZabbixAPI

api = ZabbixAPI(url="127.0.0.1/zabbix")
api.login(user="Admin", password="zabbix")

# API-Aktionen kommen hier hin

api.logout()

Beim Verwenden von API-Tokens ist das Aufrufen der Methode logout() nicht erforderlich.

API-Anfragen

Nachdem Sie sich angemeldet haben, können Sie beliebige API-Anfragen stellen, indem Sie Methoden aufrufen, die in der Zabbix-API-Methodenreferenz beschrieben sind.

API-Methoden werden im folgenden Format aufgerufen:

api_instance.zabbix_object.method(parameters)

Einige Methoden- oder Objektnamen der Zabbix-API verwenden Wörter, die in Python reservierte Schlüsselwörter sind (z. B. import). Um Python-Fehler zu vermeiden, fügen Sie beim Verwenden in Python einen Unterstrich an den Methoden- oder Objektnamen an (z. B. api.configuration.import_).

Zum Beispiel, um mit host.get eine Liste von Hosts anzuzeigen:

# 1. Import ZabbixAPI from zabbix_utils:
from zabbix_utils import ZabbixAPI

# 2. Create the ZabbixAPI instance and log in:
api = ZabbixAPI(url="127.0.0.1/zabbix")
api.login(user="Admin", password="zabbix")

# 3. Retrieve hosts matching a filter:
hosts = api.host.get(
    filter={
        "host": [
            "Zabbix server",
            "Linux server"
        ]
    }
)

# 4. Iterate over returned hosts and print each host's details:
for host in hosts:
    print(host)

# 5. Log out from the API to close the session:
api.logout()
Asynchroner Modus

Der asynchrone Modus ermöglicht es Ihrem Skript, API-Anfragen zu senden, ohne auf den Abschluss jeder einzelnen Anfrage zu warten. Dadurch kann Ihr Skript effizienter werden, wenn es viele API-Anfragen ausführen muss oder wenn einige Anfragen lange dauern.

Bei der Verwendung des asynchronen Modus gibt es im Vergleich zum synchronen Modus wichtige Unterschiede:

  • Importieren Sie das Python-Modul asyncio (zuvor müssen Sie die erforderlichen Abhängigkeiten installieren).
  • Importieren Sie AsyncZabbixAPI anstelle von ZabbixAPI.
  • Schreiben Sie Ihren Code innerhalb einer async-Funktion.
  • Verwenden Sie await beim Aufruf von API-Methoden, einschließlich login() und logout().

Beim Erstellen einer AsyncZabbixAPI-Instanz können Sie sich nicht während der Initialisierung anmelden.

Zum Beispiel, um im asynchronen Modus mit host.get eine Liste von Hosts anzuzeigen:

# 1. Importieren Sie asyncio für den asynchronen Modus und AsyncZabbixAPI aus zabbix_utils:
import asyncio
from zabbix_utils import AsyncZabbixAPI

# 2. Definieren Sie die Haupt-async-Funktion, in der alle API-Operationen ausgeführt werden:
async def main():

    # 3. Erstellen Sie eine AsyncZabbixAPI-Instanz und melden Sie sich an (await ist erforderlich):
    api = AsyncZabbixAPI(url="127.0.0.1")
    await api.login(user="User", password="zabbix")

    # 4. Rufen Sie Hosts ab, die einem Filter entsprechen (await ist erforderlich):
    hosts = await api.host.get(
        filter={
            "host": [
                "Zabbix server",
                "Linux server"
            ]
        }
    )

    # 5. Iterieren Sie über die zurückgegebenen Hosts und geben Sie die Details jedes Hosts aus:
    for host in hosts:
        print(host)

    # 6. Melden Sie sich von der API ab, um die Sitzung zu schließen (await ist erforderlich):
    await api.logout()

# 7. Führen Sie die async-Hauptfunktion main() mit der Ereignisschleife von asyncio aus:
asyncio.run(main())

Beispiele

Die folgenden Beispiele zeigen häufige Aufgaben mit der Zabbix-API unter Verwendung der Bibliothek zabbix_utils.

Weitere Beispiele sind im Verzeichnis examples des GitHub-Repositorys zabbix_utils verfügbar.