Zabbix API 3.4 - 由于循环要求无法创建主机
Zabbix API 3.4 - unable to create host because of circular requirement
我正在尝试为 Python 中编写的服务添加 zabbix 服务器支持。此服务应以主动模式将指标发送到 zabbix 服务器。例如。该服务定期连接到服务器,而不是其他方式。 (该服务可以在防火墙后运行,唯一的选择是使用主动模式。)
在host.create API调用中,我需要提供主机接口。这是相关的文档: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 web 界面创建主机,所以我猜问题出在界面上。所以我尝试先创建一个界面。但是,hostinterface.create 方法需要一个 hostid 参数。
看这里:https://www.zabbix.com/documentation/3.4/manual/api/reference/hostinterface/create - 我必须给一个hostid。
这是陷阱 22 - 为了创建主机,我需要有一个主机界面。但是要创建主机接口,我需要有一个主机。
我错过了什么?也许我错了,host.create API 调用由于不同的原因被拒绝了。我怎样才能弄清楚它是什么?
主机创建 api 也会创建主机接口,您需要根据 the documentation
使用正确的字段填充接口 []
例如,在调用 api 之前添加:
interfaces = []
interfaces.append( {
'type' : 2,
'main' : 1,
'useip': 1,
'ip' : '1.2.3.4',
'dns' : "",
'port' : '161'
} )
然后传给host create api
参考文档没有明确显示,但在 Zabbix 中,一台主机需要:
- 一个或多个接口(活动主机也需要)
- 一个或多个主机组
因此,对于您的代码工作,您需要更改为如下内容:
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=[ {"type": "1",
"main": "1",
"useip": "1",
"ip": "127.0.0.1",
"dns": "mydns", # can be blank
"port": "10051"}],
)
在你的例子中是 "active host" 但在 Zabbix 中 Active/Passive 的概念是针对项目的,而不是针对主机的。所以它可能(并且不是很不寻常)同时具有被动和主动 itens 的主机。
我正在尝试为 Python 中编写的服务添加 zabbix 服务器支持。此服务应以主动模式将指标发送到 zabbix 服务器。例如。该服务定期连接到服务器,而不是其他方式。 (该服务可以在防火墙后运行,唯一的选择是使用主动模式。)
在host.create API调用中,我需要提供主机接口。这是相关的文档: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 web 界面创建主机,所以我猜问题出在界面上。所以我尝试先创建一个界面。但是,hostinterface.create 方法需要一个 hostid 参数。 看这里:https://www.zabbix.com/documentation/3.4/manual/api/reference/hostinterface/create - 我必须给一个hostid。
这是陷阱 22 - 为了创建主机,我需要有一个主机界面。但是要创建主机接口,我需要有一个主机。
我错过了什么?也许我错了,host.create API 调用由于不同的原因被拒绝了。我怎样才能弄清楚它是什么?
主机创建 api 也会创建主机接口,您需要根据 the documentation
使用正确的字段填充接口 []例如,在调用 api 之前添加:
interfaces = []
interfaces.append( {
'type' : 2,
'main' : 1,
'useip': 1,
'ip' : '1.2.3.4',
'dns' : "",
'port' : '161'
} )
然后传给host create api
参考文档没有明确显示,但在 Zabbix 中,一台主机需要: - 一个或多个接口(活动主机也需要) - 一个或多个主机组
因此,对于您的代码工作,您需要更改为如下内容:
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=[ {"type": "1",
"main": "1",
"useip": "1",
"ip": "127.0.0.1",
"dns": "mydns", # can be blank
"port": "10051"}],
)
在你的例子中是 "active host" 但在 Zabbix 中 Active/Passive 的概念是针对项目的,而不是针对主机的。所以它可能(并且不是很不寻常)同时具有被动和主动 itens 的主机。