Я пытаюсь добавить поддержку zabbix сервера для сервиса, написанного на Python. Эта служба должна отправлять метрики на zabbix сервер в активном режиме. Например. служба подключается к серверу периодически, а не другим способом. (Служба может работать за брандмауэрами, единственный вариант - использовать активный режим.)
В вызове API host.create я должен указать интерфейсы для хоста. Вот документация для этого: https://www.zabbix.com/documentation/3.4/manual/api/reference/host/create - обязательный параметр interfaces. Если я попытаюсь дать пустой список:
zapi = ZabbixAPI(cfg.url)
zapi.login(cfg.user, cfg.password) # I'm using an administrator user here!
host = zapi.host.create(
host=cfg.host_name,
description=cfg.host_description,
inventory_mode=1, # auto host inventory population
status=0, # monitored host
groups=[host_group_id],
interfaces=[], # active agent, no interface???
)
Тогда я получаю эту ошибку:
pyzabbix.ZabbixAPIException: ('Error -32500: Application error., No permissions to referred object or it does not exist!', -32500)
Я могу создавать хосты, используя одного и того же пользователя и веб-интерфейс zabbix, так что я думаю, проблема в интерфейсах. Поэтому я попытался сначала создать интерфейс. Однако для метода hostinterface.create требуется параметр hostid.
Смотрите здесь: https://www.zabbix.com/documentation/3.4/manual/api/reference/hostinterface/create - я должен дать хостид.
Это уловка 22 - Для создания хоста мне нужен интерфейс хоста. Но для создания интерфейса хоста мне нужен хост.
Что мне не хватает? Возможно, я ошибся, и вызов API host.create был отклонен по другой причине. Как я могу понять, что это было?