我正在将Python脚本与pyzabbix模块一起使用,以通过Zabbix API获取所有触发器。使用trigger.get()函数获取所有触发器列表。 该脚本可以与其他所有功能(例如host.get()等)一起正常工作。但是对于此功能,它无法正常运行,并给我500内部服务器错误。但是当我为它们指定某些对象参数时,它将运行。
使用为trigger.get()方法指定的一些参数运行它,然后它可以工作,但是我想列出所有触发器,而不使用triggers.get()方法的任何参数。 < / p>
我的代码:
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
答案 0 :(得分:1)
如您所说,不带参数的trigger.get()
调用应返回所有定义的触发器(主机和模板)。
一个新的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错误可能是由于响应过多所致,例如,结果大于php的memory_limit
。
您应该先检查httpd的error.log
,例如:
PHP Fatal error: Allowed memory size of xxxxxxx bytes exhausted
在这种情况下,您应该相应地调整/etc/httpd/conf.d/zabbix.conf
(Centos的默认设置),然后重新启动httpd并重试。