Utilitzeu l'API de Zabbix

zabbix_utils us permet utilitzar l'API de Zabbix per gestionar objectes Zabbix, incloent-hi la creació d'amfitrions, l'actualització d'elements, la recuperació d'esdeveniments i més.

Les peticions a l'API es poden fer en mode síncron o asíncron:

  • En mode síncron, el vostre script de Python envia una sol·licitud i espera una resposta abans de continuar, cosa que és adequada per a operacions senzilles, seqüencials i predictibles.
  • En mode asíncron, l'script envia peticions sense esperar cada resposta, cosa que permet que altres operacions continuïn en paral·lel; això és més eficient per a peticions lentes o grans lots de dades.

Els exemples d'aquesta pàgina se centren en el mode síncron, tot i que el mode asíncron segueix patrons similars. Hi ha exemples addicionals disponibles al repositori de GitHub zabbix_utils.

Importació

Per utilitzar zabbix_utils per treballar amb l'API de Zabbix, importeu la classe ZabbixAPI al vostre script:

from zabbix_utils import ZabbixAPI

Si ja utilitzeu una biblioteca comunitària de Python, normalment podeu substituir aquesta importació per ZabbixAPI from zabbix_utils.

Inici de sessió

Abans de fer peticions a l'API, heu de crear una instància de ZabbixAPI i iniciar la sessió a l'API de Zabbix.

Trieu el mètode que millor s'adapti a la manera com gestioneu les credencials. Podeu utilitzar el vostre nom d'usuari i mot de pas o tokens d'API.

Durant la inicialització

Quan creeu una instància de ZabbixAPI, podeu proporcionar l'URL de la interfície web de Zabbix i les vostres credencials alhora:

# Nom d'usuari i mot de pas:
api = ZabbixAPI(url="127.0.0.1/zabbix", user="Admin", password="zabbix")

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

Si preferiu agrupar paràmetres de connexió, podeu passar-los com a diccionari de Python i desempaquetar-lo utilitzant la sintaxi d'arguments de paraules clau de Python:

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

api = ZabbixAPI(**ZABBIX_AUTH)
Ús de login()

Primer podeu crear una instància de ZabbixAPI només amb l'URL de la interfície web de Zabbix i, més tard, utilitzar el mètode login() amb les vostres credencials:

# Nom d'usuari i mot de pas:

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

# Token de l'API:
api = ZabbixAPI(url="127.0.0.1/zabbix")
api.login(token="your_api_token")
Ús de variables d'entorn

Primer podeu emmagatzemar les vostres credencials com a variables d'entorn, per exemple, mitjançant un terminal:

# Nom d'usuari i mot de pas:
export ZABBIX_USER="Admin"
export ZABBIX_PASSWORD="zabbix"

# Token:
export ZABBIX_TOKEN="your_api_token"

Aleshores, si inicieu el vostre script des de la mateixa sessió de terminal, la instància ZabbixAPI de l'script només requereix l'URL de la interfície web de Zabbix:

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

També podeu emmagatzemar l'URL en una variable d'entorn:

# Nom d'usuari i mot de pas:
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"

Quan l'URL i les credencials són definides com a variables d'entorn, la instància ZabbixAPI a l'script no requereix cap argument:

api = ZabbixAPI()

Tanca la sessió

Si heu iniciat la sessió amb un nom d'usuari i un mot de pas, crideu el mètode logout() després de completar les operacions de l'API:

from zabbix_utils import ZabbixAPI

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

api.login(user="Admin", password="zabbix")

# Les accions de l'API van aquí

api.logout()

No cal cridar el mètode logout() quan s'empren tokens de l'API.

API requests

After you've logged in, you can make any API requests by calling methods described in the Zabbix API method reference.

API methods are called using the following format:

api_instance.zabbix_object.method(parameters)

Some Zabbix API method or object names use words that are reserved keywords in Python (e.g., import). To avoid Python errors, add an underscore to the method or object name when using it in Python (e.g., api.configuration.import_).

For example, to see a list of hosts with host.get:

# 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()
Asynchronous mode

Asynchronous mode lets your script send API requests without waiting for each one to finish. This can make your script more efficient when it needs to perform many API requests or when some requests take a long time.

When using asynchronous mode, there are important differences compared to synchronous mode:

  • Import Python's asyncio module (you must first install the required dependencies).
  • Import AsyncZabbixAPI instead of ZabbixAPI.
  • Write your code inside an async function.
  • Use await when calling API methods, including login() and logout().

When creating an AsyncZabbixAPI instance, you cannot log in during initialization.

For example, to see a list of hosts with host.get in asynchronous mode:

# 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())

Examples

The following examples show common Zabbix API tasks using the zabbix_utils library.

Additional examples are available in the examples directory of the zabbix_utils GitHub repository.