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ł
asynciojęzyka Python (należy najpierw zainstalować wymagane zależności). - Zaimportuj
AsyncZabbixAPIzamiastZabbixAPI. - Napisz kod wewnątrz funkcji
async. - Używaj
awaitpodczas wywoływania metod API, w tymlogin()ilogout().
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.