使用 python 脚本通过 Zabbix API 获取所有触发器
Using python script to get all triggers via Zabbix API
我正在使用 Python 带有 pyzabbix 模块的脚本来通过 Zabbix API 获取所有触发器。使用 trigger.get() 函数获取所有触发器列表。
该脚本可以与 host.get() 等所有其他函数一起正常工作。但是对于这个脚本,它无法给我 500 内部服务器错误。但是当我为其运行指定某些对象参数时。
运行 它带有为 trigger.get() 方法指定的一些参数然后它工作但我想列出所有触发器而不使用方法的任何参数 triggers.get().
我的代码:
from pyzabbix import ZabbixAPI
zapi = ZabbixAPI("http://Zabbix-Server-IP/zabbix")
zapi.login("username","password")
trigger=zapi.trigger.get() #Method to get all triggers from zabbix
错误
Traceback (most recent call last):
File "zabbix.py", line 69, in <module>
get_all_zabbix_host()
File "zabbix.py", line 16, in get_all_zabbix_host
trigger=zapi.trigger.get()
File "/usr/lib/python2.7/site-packages/pyzabbix/__init__.py", line 157, in fn
args or kwargs
File "/usr/lib/python2.7/site-packages/pyzabbix/__init__.py", line 109, in do_request
response.raise_for_status()
File "/usr/lib/python2.7/site-packages/requests/models.py", line 928, in raise_for_status
raise HTTPError(http_error_msg, response=self)
requests.exceptions.HTTPError: 500 Server Error: Internal Server Error for url:
http://Zabbix-Server-IP/zabbix/api_jsonrpc.php
如您所说,不带参数的 trigger.get()
调用应该 return 所有 定义的触发器(主机和模板)。
一个新的 zabbix 系统,有 2 个主机和一些添加的默认模板(适用于 api 3.4 和 4.0):
>>> from zabbix.api import ZabbixAPI
>>> zabbixServer = 'http://localhost/zabbix/'
>>> zabbixUser = 'admin'
>>> zabbixPass = 'zabbix'
>>> zapi = ZabbixAPI(url=zabbixServer, user=zabbixUser, password=zabbixPass)
>>> triggers = zapi.trigger.get()
>>> len(triggers)
482
>>> sys.getsizeof(triggers)
4280
500 Internal Server error 可能是由过度响应引起的,例如结果大于 php 的 memory_limit
。
你应该首先检查你的 httpd 的 error.log
是否有像这样的东西:
PHP Fatal error: Allowed memory size of xxxxxxx bytes exhausted
如果是这种情况,您应该相应地调整您的 /etc/httpd/conf.d/zabbix.conf
(Centos 的默认设置),然后重新启动 httpd 并重试。
我正在使用 Python 带有 pyzabbix 模块的脚本来通过 Zabbix API 获取所有触发器。使用 trigger.get() 函数获取所有触发器列表。 该脚本可以与 host.get() 等所有其他函数一起正常工作。但是对于这个脚本,它无法给我 500 内部服务器错误。但是当我为其运行指定某些对象参数时。
运行 它带有为 trigger.get() 方法指定的一些参数然后它工作但我想列出所有触发器而不使用方法的任何参数 triggers.get().
我的代码:
from pyzabbix import ZabbixAPI
zapi = ZabbixAPI("http://Zabbix-Server-IP/zabbix")
zapi.login("username","password")
trigger=zapi.trigger.get() #Method to get all triggers from zabbix
错误
Traceback (most recent call last):
File "zabbix.py", line 69, in <module>
get_all_zabbix_host()
File "zabbix.py", line 16, in get_all_zabbix_host
trigger=zapi.trigger.get()
File "/usr/lib/python2.7/site-packages/pyzabbix/__init__.py", line 157, in fn
args or kwargs
File "/usr/lib/python2.7/site-packages/pyzabbix/__init__.py", line 109, in do_request
response.raise_for_status()
File "/usr/lib/python2.7/site-packages/requests/models.py", line 928, in raise_for_status
raise HTTPError(http_error_msg, response=self)
requests.exceptions.HTTPError: 500 Server Error: Internal Server Error for url:
http://Zabbix-Server-IP/zabbix/api_jsonrpc.php
如您所说,不带参数的 trigger.get()
调用应该 return 所有 定义的触发器(主机和模板)。
一个新的 zabbix 系统,有 2 个主机和一些添加的默认模板(适用于 api 3.4 和 4.0):
>>> from zabbix.api import ZabbixAPI
>>> zabbixServer = 'http://localhost/zabbix/'
>>> zabbixUser = 'admin'
>>> zabbixPass = 'zabbix'
>>> zapi = ZabbixAPI(url=zabbixServer, user=zabbixUser, password=zabbixPass)
>>> triggers = zapi.trigger.get()
>>> len(triggers)
482
>>> sys.getsizeof(triggers)
4280
500 Internal Server error 可能是由过度响应引起的,例如结果大于 php 的 memory_limit
。
你应该首先检查你的 httpd 的 error.log
是否有像这样的东西:
PHP Fatal error: Allowed memory size of xxxxxxx bytes exhausted
如果是这种情况,您应该相应地调整您的 /etc/httpd/conf.d/zabbix.conf
(Centos 的默认设置),然后重新启动 httpd 并重试。