Korzystanie z API Zabbix

zabbix_utils umożliwia korzystanie z API Zabbix do zarządzania obiektami Zabbix, w tym tworzenia hostów, aktualizowania pozycji, pobierania zdarzeń i nie tylko.

Żądania API mogą być wykonywane w trybie synchronicznym lub asynchronicznym:

  • W trybie synchronicznym skrypt Python wysyła żądanie i czeka na odpowiedź przed kontynuowaniem działania, co jest odpowiednie dla prostych, sekwencyjnych i przewidywalnych operacji.
  • W trybie asynchronicznym skrypt wysyła żądania bez oczekiwania na każdą odpowiedź, umożliwiając równoległe wykonywanie innych operacji; jest to bardziej efektywne w przypadku wolnych żądań lub dużych partii danych.

Przykłady na tej stronie koncentrują się na trybie synchronicznym, chociaż tryb asynchroniczny opiera się na podobnych wzorcach. Dodatkowe przykłady są dostępne w repozytorium GitHub zabbix_utils.

Import

Aby używać zabbix_utils do pracy z API Zabbix, zaimportuj klasę ZabbixAPI w swoim skrypcie:

from zabbix_utils import ZabbixAPI

Jeśli już używasz biblioteki Python społeczności, zazwyczaj możesz zastąpić ten import przez ZabbixAPI z zabbix_utils.

Logowanie

Przed wykonywaniem żądań API należy utworzyć instancję ZabbixAPI i zalogować się do Zabbix API.

Wybierz metodę, która najlepiej odpowiada sposobowi zarządzania poświadczeniami. Możesz użyć nazwy użytkownika i hasła lub tokenów API.

Podczas inicjalizacji

Podczas tworzenia instancji ZabbixAPI możesz od razu podać adres URL interfejsu webowego Zabbix oraz swoje dane uwierzytelniające:

# Nazwa użytkownika i hasło:
api = ZabbixAPI(url="127.0.0.1/zabbix", user="Admin", password="zabbix")

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

Jeśli wolisz pogrupować parametry połączenia, możesz przekazać je jako słownik Pythona i rozpakować go za pomocą składni argumentów nazwanych Pythona:

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

api = ZabbixAPI(**ZABBIX_AUTH)
Używanie login()

Możesz najpierw utworzyć instancję ZabbixAPI, podając tylko URL interfejsu webowego Zabbix, a następnie użyć metody login() ze swoimi poświadczeniami:

# Nazwa użytkownika i hasło:
api = ZabbixAPI(url="127.0.0.1/zabbix")
api.login(user="Admin", password="zabbix")

# Token API:
api = ZabbixAPI(url="127.0.0.1/zabbix")
api.login(token="your_api_token")
Używanie zmiennych środowiskowych

Możesz najpierw zapisać swoje dane uwierzytelniające jako zmienne środowiskowe, na przykład przy użyciu terminala:

# Nazwa użytkownika i hasło:
export ZABBIX_USER="Admin"
export ZABBIX_PASSWORD="zabbix"

# Token:
export ZABBIX_TOKEN="your_api_token"

Następnie, jeśli uruchomisz swój skrypt z tej samej sesji terminala, instancja ZabbixAPI w skrypcie wymaga jedynie adresu URL interfejsu webowego Zabbix:

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

Możesz również zapisać adres URL w zmiennej środowiskowej:

# Nazwa użytkownika i hasło:
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"

Gdy adres URL i dane uwierzytelniające są już ustawione jako zmienne środowiskowe, instancja ZabbixAPI w skrypcie nie wymaga już żadnych argumentów:

api = ZabbixAPI()

Wylogowanie

Jeśli zalogowano się przy użyciu nazwy użytkownika i hasła, po zakończeniu operacji API należy wywołać metodę logout():

from zabbix_utils import ZabbixAPI

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

# API actions go here

api.logout()

Wywołanie metody logout() nie jest wymagane podczas używania tokenów API.

Żądania API

Po zalogowaniu możesz wykonywać dowolne żądania API, wywołując metody opisane w opisie metod API Zabbix.

Metody API są wywoływane przy użyciu następującego formatu:

api_instance.zabbix_object.method(parameters)

Niektóre nazwy metod lub obiektów API Zabbix używają słów, które są słowami zastrzeżonymi w Pythonie (np. import). Aby uniknąć błędów Pythona, podczas używania ich w Pythonie dodaj podkreślenie do nazwy metody lub obiektu (np. api.configuration.import_).

Na przykład, aby wyświetlić listę hostów za pomocą host.get:

# 1. Importuj ZabbixAPI z zabbix_utils:
from zabbix_utils import ZabbixAPI

# 2. Utwórz instancję ZabbixAPI i zaloguj się:
api = ZabbixAPI(url="127.0.0.1/zabbix")
api.login(user="Admin", password="zabbix")

# 3. Pobierz hosty pasujące do filtra:
hosts = api.host.get(
    filter={
        "host": [
            "Zabbix server",
            "Linux server"
        ]
    }
)

# 4. Iteruj po zwróconych hostach i wyświetl szczegóły każdego hosta:
for host in hosts:
    print(host)

# 5. Wyloguj się z API, aby zamknąć sesję:
api.logout()
Tryb asynchroniczny

Tryb asynchroniczny pozwala skryptowi wysyłać żądania API bez czekania na zakończenie każdego z nich. Może to zwiększyć wydajność skryptu, gdy musi on wykonać wiele żądań API lub gdy niektóre żądania zajmują dużo czasu.

Podczas korzystania z trybu asynchronicznego występują istotne różnice w porównaniu z trybem synchronicznym:

  • Zaimportuj moduł asyncio języka Python (należy najpierw zainstalować wymagane zależności).
  • Zaimportuj AsyncZabbixAPI zamiast ZabbixAPI.
  • Napisz kod wewnątrz funkcji async.
  • Używaj await podczas wywoływania metod API, w tym login() i logout().

Podczas tworzenia instancji AsyncZabbixAPI nie można zalogować się podczas inicjalizacji.

Na przykład, aby wyświetlić listę hostów za pomocą host.get w trybie asynchronicznym:

# 1. Zaimportuj asyncio dla trybu asynchronicznego oraz AsyncZabbixAPI z zabbix_utils:
import asyncio
from zabbix_utils import AsyncZabbixAPI

# 2. Zdefiniuj główną funkcję async, w której będą wykonywane wszystkie operacje API:
async def main():

    # 3. Utwórz instancję AsyncZabbixAPI i zaloguj się (wymaga await):
    api = AsyncZabbixAPI(url="127.0.0.1")
    await api.login(user="User", password="zabbix")

    # 4. Pobierz hosty pasujące do filtra (wymaga await):
    hosts = await api.host.get(
        filter={
            "host": [
                "Zabbix server",
                "Linux server"
            ]
        }
    )

    # 5. Iteruj po zwróconych hostach i wypisz szczegóły każdego hosta:
    for host in hosts:
        print(host)

    # 6. Wyloguj się z API, aby zamknąć sesję (wymaga await):
    await api.logout()

# 7. Uruchom główną funkcję async main() przy użyciu pętli zdarzeń asyncio:
asyncio.run(main())

Przykłady

Poniższe przykłady pokazują typowe zadania API Zabbix z użyciem biblioteki zabbix_utils.

Dodatkowe przykłady są dostępne w katalogu examples repozytorium GitHub zabbix_utils.