Использование Zabbix API

zabbix_utils позволяет использовать Zabbix API для управления объектами Zabbix, включая создание узлов сети, обновление элементов данных, получение событий и многое другое.

API-запросы могут выполняться в синхронном или асинхронном режиме:

  • В синхронном режиме ваш Python-скрипт отправляет запрос и ожидает ответа перед продолжением работы, что подходит для простых, последовательных и предсказуемых операций.
  • В асинхронном режиме скрипт отправляет запросы, не дожидаясь каждого ответа, что позволяет параллельно выполнять другие операции; это более эффективно для медленных запросов или больших пакетов данных.

Примеры на этой странице сосредоточены на синхронном режиме, хотя асинхронный режим использует схожие подходы. Дополнительные примеры доступны в GitHub-репозитории zabbix_utils.

Импорт

Чтобы использовать zabbix_utils для работы с Zabbix API, импортируйте класс ZabbixAPI в свой скрипт:

from zabbix_utils import ZabbixAPI

Если вы уже используете Python-библиотеку сообщества, обычно можно заменить этот импорт на ZabbixAPI из zabbix_utils.

Вход в систему

Перед выполнением API-запросов необходимо создать экземпляр ZabbixAPI и войти в Zabbix API.

Выберите метод, который лучше всего соответствует тому, как вы управляете учетными данными. Вы можете использовать имя пользователя и пароль или API-токены.

Во время инициализации

При создании экземпляра ZabbixAPI вы можете сразу указать URL веб-интерфейса Zabbix и свои учетные данные:

# Имя пользователя и пароль:
api = ZabbixAPI(url="127.0.0.1/zabbix", user="Admin", password="zabbix")

# API-токен:
api = ZabbixAPI(url="127.0.0.1/zabbix", token="your_api_token")

Если вы предпочитаете сгруппировать параметры подключения, вы можете передать их в виде словаря Python и распаковать его, используя синтаксис именованных аргументов Python:

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

api = ZabbixAPI(**ZABBIX_AUTH)
Использование login()

Сначала вы можете создать экземпляр ZabbixAPI, указав только URL веб-интерфейса Zabbix, а затем использовать метод login() со своими учетными данными:

# Имя пользователя и пароль:
api = ZabbixAPI(url="127.0.0.1/zabbix")
api.login(user="Admin", password="zabbix")

# API токен:
api = ZabbixAPI(url="127.0.0.1/zabbix")
api.login(token="your_api_token")
Использование переменных окружения

Сначала вы можете сохранить свои учетные данные как переменные окружения, например, с помощью терминала:

# Имя пользователя и пароль:
export ZABBIX_USER="Admin"
export ZABBIX_PASSWORD="zabbix"

# Токен:
export ZABBIX_TOKEN="your_api_token"

Затем, если вы запускаете свой скрипт из того же сеанса терминала, экземпляру ZabbixAPI в скрипте требуется только URL веб-интерфейса Zabbix:

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

Вы также можете сохранить URL в переменной окружения:

# Имя пользователя и пароль:
export ZABBIX_USER="Admin"
export ZABBIX_PASSWORD="zabbix"
export ZABBIX_URL="https://127.0.0.1/zabbix"

# Токен:
export ZABBIX_TOKEN="your_api_token"
export ZABBIX_URL="https://127.0.0.1/zabbix"

Когда URL и учетные данные заданы как переменные окружения, экземпляру ZabbixAPI в скрипте вообще не требуются никакие аргументы:

api = ZabbixAPI()

Выход из системы

Если вы вошли в систему, используя имя пользователя и пароль, вызовите метод logout() после завершения операций API:

from zabbix_utils import ZabbixAPI

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

# Здесь выполняются действия API

api.logout()

Вызов метода logout() не требуется при использовании токенов API.

API-запросы

После входа в систему вы можете выполнять любые API-запросы, вызывая методы, описанные в справочнике методов Zabbix API.

Методы API вызываются в следующем формате:

api_instance.zabbix_object.method(parameters)

Некоторые имена методов или объектов Zabbix API используют слова, которые являются зарезервированными ключевыми словами в Python (например, import). Чтобы избежать ошибок Python, добавляйте символ подчеркивания к имени метода или объекта при использовании его в Python (например, api.configuration.import_).

Например, чтобы увидеть список узлов сети с помощью 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()
Асинхронный режим

Асинхронный режим позволяет вашему скрипту отправлять API-запросы, не дожидаясь завершения каждого из них. Это может сделать ваш скрипт более эффективным, если ему нужно выполнять много API-запросов или если выполнение некоторых запросов занимает много времени.

При использовании асинхронного режима есть важные отличия по сравнению с синхронным режимом:

  • Импортируйте модуль Python asyncio (сначала необходимо установить требуемые зависимости).
  • Импортируйте AsyncZabbixAPI вместо ZabbixAPI.
  • Пишите код внутри функции async.
  • Используйте await при вызове методов API, включая login() и logout().

При создании экземпляра AsyncZabbixAPI вы не можете выполнить вход во время инициализации.

Например, чтобы увидеть список узлов сети с помощью host.get в асинхронном режиме:

# 1. Импортируйте asyncio для асинхронного режима и AsyncZabbixAPI из zabbix_utils:
import asyncio
from zabbix_utils import AsyncZabbixAPI

# 2. Определите основную async-функцию, в которой будут выполняться все операции API:
async def main():

    # 3. Создайте экземпляр AsyncZabbixAPI и выполните вход (необходимо использовать await):
    api = AsyncZabbixAPI(url="127.0.0.1")
    await api.login(user="User", password="zabbix")

    # 4. Получите узлы сети, соответствующие фильтру (необходимо использовать await):
    hosts = await api.host.get(
        filter={
            "host": [
                "Zabbix server",
                "Linux server"
            ]
        }
    )

    # 5. Переберите возвращённые узлы сети и выведите сведения о каждом узле:
    for host in hosts:
        print(host)

    # 6. Выйдите из API, чтобы закрыть сессию (необходимо использовать await):
    await api.logout()

# 7. Запустите асинхронную функцию main() с помощью цикла событий asyncio:
asyncio.run(main())

Примеры

Следующие примеры показывают распространённые задачи Zabbix API с использованием библиотеки zabbix_utils.

Дополнительные примеры доступны в каталоге examples GitHub-репозитория zabbix_utils.