使用python脚本通过Zabbix API获取所有触发器

时间:2019-01-02 11:36:02

标签: python zabbix

我正在将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

1 个答案:

答案 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并重试。