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 asyncio moduli (vispirms jāinstalē nepieciešamās atkarības).
  • Importējiet AsyncZabbixAPI ZabbixAPI vietā.
  • Rakstiet savu kodu async funkcijā.
  • Izmantojiet await, izsaucot API metodes, tostarp login() un logout().

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ā.