Zabbix API izmantošana
zabbix_utils ļauj izmantot Zabbix API, lai pārvaldītu Zabbix objektus, tostarp izveidotu hostus, atjauninātu vienumus, izgūtu notikumus un veiktu citas darbības.
API pieprasījumus var veikt sinhronajā vai asinhronajā režīmā:
- Sinhronajā režīmā jūsu Python skripts nosūta pieprasījumu un pirms turpināšanas gaida atbildi, kas ir piemēroti vienkāršām, secīgām un paredzamām darbībām.
- Asinhronajā režīmā skripts nosūta pieprasījumus, negaidot katru atbildi, ļaujot citām darbībām turpināties paralēli; tas ir efektīvāk lēniem pieprasījumiem vai lielām datu paketēm.
Šīs lapas piemēri ir vērsti uz sinhrono režīmu, lai gan asinhronais režīms izmanto līdzīgus principus. Papildu piemēri ir pieejami GitHub repozitorijā zabbix_utils.
Importēšana
Lai izmantotu zabbix_utils darbam ar Zabbix API, importējiet ZabbixAPI klasi savā skriptā:
from zabbix_utils import ZabbixAPI
Ja jau izmantojat kopienas Python bibliotēku, parasti varat aizstāt šo importu ar ZabbixAPI no zabbix_utils.
Pieteikšanās
Pirms API pieprasījumu veikšanas jums jāizveido ZabbixAPI instance un jāpiesakās Zabbix API.
Izvēlieties metodi, kas vislabāk atbilst tam, kā pārvaldāt akreditācijas datus. Varat izmantot savu lietotājvārdu un paroli vai API tokenus.
Inicializācijas laikā
Veidojot ZabbixAPI instanci, varat uzreiz norādīt Zabbix tīmekļa saskarnes URL un savus akreditācijas datus:
# Lietotājvārds un parole:
api = ZabbixAPI(url="127.0.0.1/zabbix", user="Admin", password="zabbix")
# API marķieris:
api = ZabbixAPI(url="127.0.0.1/zabbix", token="your_api_token")
Ja vēlaties grupēt savienojuma parametrus, varat tos nodot kā Python vārdnīcu un izpakot, izmantojot Python atslēgvārdu argumentu sintaksi:
ZABBIX_AUTH = {
"url": "127.0.0.1/zabbix",
"user": "Admin",
"password": "zabbix"
}
api = ZabbixAPI(**ZABBIX_AUTH)
login() izmantošana
Vispirms varat izveidot ZabbixAPI instanci, norādot tikai Zabbix tīmekļa saskarnes URL, un vēlāk izmantot login() metodi ar saviem akreditācijas datiem:
# Lietotājvārds un parole:
api = ZabbixAPI(url="127.0.0.1/zabbix")
api.login(user="Admin", password="zabbix")
# API marķieris:
api = ZabbixAPI(url="127.0.0.1/zabbix")
api.login(token="your_api_token")
Vides mainīgo izmantošana
Vispirms varat saglabāt savus akreditācijas datus kā vides mainīgos, piemēram, izmantojot termināli:
# Lietotājvārds un parole:
export ZABBIX_USER="Admin"
export ZABBIX_PASSWORD="zabbix"
# Token:
export ZABBIX_TOKEN="your_api_token"
Pēc tam, ja palaižat savu skriptu no tās pašas termināļa sesijas, skriptā esošajai ZabbixAPI instancei ir nepieciešams tikai Zabbix tīmekļa lietotāja saskarnes URL:
api = ZabbixAPI(url="127.0.0.1/zabbix")
URL varat arī saglabāt vides mainīgajā:
# Lietotājvārds un parole:
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"
Ja URL un akreditācijas dati visi ir iestatīti kā vides mainīgie, skriptā esošajai ZabbixAPI instancei vispār nav nepieciešami nekādi argumenti:
api = ZabbixAPI()
Izrakstīšanās
Ja pieteicāties, izmantojot lietotājvārdu un paroli, pēc API darbību pabeigšanas izsauciet logout() metodi:
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()
Izsaukt logout() metodi nav nepieciešams, ja izmantojat API tokenus.
API pieprasījumi
Pēc pieteikšanās jūs varat veikt jebkurus API pieprasījumus, izsaucot metodes, kas aprakstītas Zabbix API metožu atsaucē.
API metodes tiek izsauktas, izmantojot šādu formātu:
api_instance.zabbix_object.method(parameters)
Dažu Zabbix API metožu vai objektu nosaukumos tiek izmantoti vārdi, kas Python ir rezervēti atslēgvārdi (piemēram, import).
Lai izvairītos no Python kļūdām, pievienojiet pasvītrojuma zīmi metodes vai objekta nosaukumam, kad to izmantojat Python (piemēram, api.configuration.import_).
Piemēram, lai skatītu hostu sarakstu ar host.get:
# 1. Importējiet ZabbixAPI no zabbix_utils:
from zabbix_utils import ZabbixAPI
# 2. Izveidojiet ZabbixAPI instanci un piesakieties:
api = ZabbixAPI(url="127.0.0.1/zabbix")
api.login(user="Admin", password="zabbix")
# 3. Iegūstiet filtram atbilstošos hostus:
hosts = api.host.get(
filter={
"host": [
"Zabbix server",
"Linux server"
]
}
)
# 4. Iterējiet cauri atgrieztajiem hostiem un izdrukājiet katra hosta informāciju:
for host in hosts:
print(host)
# 5. Izrakstieties no API, lai aizvērtu sesiju:
api.logout()
Asinhronais režīms
Asinhronais režīms ļauj jūsu skriptam sūtīt API pieprasījumus, negaidot, līdz katrs no tiem tiks pabeigts. Tas var padarīt jūsu skriptu efektīvāku, ja tam jāizpilda daudzi API pieprasījumi vai ja dažu pieprasījumu izpilde aizņem ilgu laiku.
Izmantojot asinhrono režīmu, salīdzinājumā ar sinhrono režīmu ir vairākas būtiskas atšķirības:
- Importējiet Python
asynciomoduli (vispirms jāinstalē nepieciešamās atkarības). - Importējiet
AsyncZabbixAPIZabbixAPIvietā. - Rakstiet savu kodu
asyncfunkcijā. - Izmantojiet
await, izsaucot API metodes, tostarplogin()unlogout().
Veidojot AsyncZabbixAPI instanci, jūs nevarat pieteikties inicializācijas laikā.
Piemēram, lai asinhronajā režīmā skatītu hostu sarakstu ar host.get:
# 1. Import asyncio for asynchronous mode, and AsyncZabbixAPI from zabbix_utils:
import asyncio
from zabbix_utils import AsyncZabbixAPI
# 2. Define the main async function where all API operations will run:
async def main():
# 3. Create an AsyncZabbixAPI instance and log in (must await):
api = AsyncZabbixAPI(url="127.0.0.1")
await api.login(user="User", password="zabbix")
# 4. Retrieve hosts matching a filter (must await):
hosts = await api.host.get(
filter={
"host": [
"Zabbix server",
"Linux server"
]
}
)
# 5. Iterate over returned hosts and print each host's details:
for host in hosts:
print(host)
# 6. Log out from the API to close the session (must await):
await api.logout()
# 7. Run the async main() function using asyncio's event loop:
asyncio.run(main())
Piemēri
Tālāk sniegtie piemēri parāda biežāk sastopamos Zabbix API uzdevumus, izmantojot zabbix_utils bibliotēku.
Papildu piemēri ir pieejami GitHub repozitorija zabbix_utils examples direktorijā.