Использование 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 tokens.
Во время инициализации
При создании экземпляра 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 actions go here
api.logout()
При использовании токенов API вызывать метод logout() не требуется.
API-запросы
После входа в систему вы можете выполнять любые API-запросы, вызывая методы, описанные в справочнике методов Zabbix API.
Методы API вызываются в следующем формате:
api_instance.zabbix_object.method(parameters)
Некоторые имена методов или объектов Zabbix API используют слова, которые являются зарезервированными ключевыми словами в Python (например, import).
Чтобы избежать ошибок Python, добавляйте символ подчеркивания к имени метода или объекта при использовании его в Python (например, api.configuration.import_).
Например, чтобы получить список узлов сети с помощью host.get:
# 1. Импортируйте ZabbixAPI из zabbix_utils:
from zabbix_utils import ZabbixAPI
# 2. Создайте экземпляр ZabbixAPI и выполните вход:
api = ZabbixAPI(url="127.0.0.1/zabbix")
api.login(user="Admin", password="zabbix")
# 3. Получите узлы сети, соответствующие фильтру:
hosts = api.host.get(
filter={
"host": [
"Zabbix server",
"Linux server"
]
}
)
# 4. Переберите возвращенные узлы сети и выведите сведения о каждом узле:
for host in hosts:
print(host)
# 5. Выйдите из API, чтобы закрыть сеанс:
api.logout()
Асинхронный режим
Асинхронный режим позволяет вашему скрипту отправлять API-запросы, не дожидаясь завершения каждого из них. Это может сделать ваш скрипт более эффективным, когда ему нужно выполнить много API-запросов или когда некоторые запросы занимают много времени.
При использовании асинхронного режима есть важные отличия по сравнению с синхронным режимом:
- Импортируйте модуль Python
asyncio(сначала необходимо установить требуемые зависимости). - Импортируйте
AsyncZabbixAPIвместоZabbixAPI. - Пишите код внутри функции
async. - Используйте
awaitпри вызове методов API, включаяlogin()иlogout().
При создании экземпляра AsyncZabbixAPI вы не можете выполнить вход во время инициализации.
Например, чтобы увидеть список узлов сети с помощью 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())
Примеры
Следующие примеры показывают распространенные задачи Zabbix API с использованием библиотеки zabbix_utils.
Дополнительные примеры доступны в каталоге examples репозитория zabbix_utils на GitHub.