最近接手了全国设备监控的重构项目,老版的 Zabbix
还是 5.0
的,这次重构打算用最新的 Zabbix
。
上周 Zabbix 7.0.0rc1
发布了,跟之前的 alpha
和 beta
版的区别还是挺大的,尤其是还没有完整的文档。
7.0.0rc1
之前的版本是没有代理池概念的,所以加代理也比较简单:
create_host_params = {
'host': host,
'name': device_data['name'],
'groups': {
'groupid': group_id,
},
'templates': {
'templateid': template_id
},
'proxyid': proxy_id,
'tags': tags,
'interfaces': [
{
'type': 2,
'main': 1,
'useip': 1,
'ip': device_data['ip_addr'],
'dns': '',
'port': '161',
'details': {
'version': 2,
'community': '{$SNMP_COMMUNITY}'
}
}
]
}
zapi.create_host(**create_host_params)
如果想实现简单的代理池也可以自己写,这里提供一种思路。首先将多个代理配置好,例如配置 5
台机器作为代理服务,然后将这 5
个代理服务的 id
获取到,然后通过 random.choice()
函数将所有要监控的主机负载到不同的代理上。
proxy_pool = [1, 2, 3, 4, 5]
proxy_id = random.choice(proxy_pool)
但是当 7.0.0rc1
版本发布后,之前写的代理服务相关的代码报错,经过排查是原来的 Zabbix API
字段有改动,新版将 proxyid
字段删除了。
不过新版本开始支持代理池了。
代理池下面是具体的代理服务。
由于没有文档,只能在页面上操作通过抓包、爬虫、逆向以及瞎猜的方式终于找到了 7.0.0rc1
版本如何添加代理池了。
7.0.0rc1
版本是通过 monitored_by
和 proxy_groupid
这两个字段来添加代理池的。
monitored_by
的值是 0
、1
、2
,分别代表服务器、agent代理程序、Proxy group
。
proxy_groupid
是代理池的 id
。
通过 monitored_by
和 proxy_groupid
这两个字段就可以添加代理池了:
create_host_params = {
'host': host,
'name': device_data['name'],
'groups': {
'groupid': group_id,
},
'templates': {
'templateid': template_id
},
'tags': tags,
'interfaces': [
{
'type': 2,
'main': 1,
'useip': 1,
'ip': device_data['ip_addr'],
'dns': '',
'port': '161',
'details': {
'version': 2,
'community': '{$SNMP_COMMUNITY}'
}
}
],
'monitored_by': 2,
'proxy_groupid': proxy_group_id
}
zapi.create_host(**create_host_params)