pyzabbix是zabbixAPI的第三方python包装。那些个源码本身其实也是一个个单独操作的脚本,可以用命令行参数直接操作。pyzbx用了json来encode和decode请求数据和返回数据,并且用了urllib2中的一些方法来进行通讯
如果不是直接用它的脚本,而是自己定制相关程序的话基本上只用到ZabbixAPI这个类:
frompyzabbiximportZabbixAPI
zapi=ZabbixAPI(“server”)#server是指zabbixweb界面的url,比如http://192.168.1.101/zabbixzapi.login(“username”,“password”)#指的是zabbix系统里的用户名和密码,不是服务器本身的用户名和密码
之后就可以用zapi这个对象来实现程序和zabbixAPI之间的通讯了。
官方文档地址:http://www.zabbix.com/documentation/2.4/manual/api
zapi主要可以用的方法:
zapi.host.get , zapi.host.create , zapi.hostgroup.get , zapi.host.update , …等等。可以看到,这些方法和API的分类是一致的,这是写了这个pyzabbix模块的人包装得很巧妙的おかげ,用起来就方便很多了。 此外,这些方法大多都支持string/list的双重参数格式。意思就是说,当你想操作多次,但是又不想一条一条语句写的时候,可以直接传一个list进去,它会自动给你解析出来的。
■ 使用方法:
zapi.hostgroup.get(filter={‘groupid‘:‘xxx‘},output=[‘name‘,‘groupid‘],selectHosts=[‘name‘,‘hostid‘])
类似这样的语句。一个方法对应了官方API说明中的一种操作,这种对应关系很好懂,比如hostgroup.get就是获取主机组的信息,host.update就是更新主机的一些信息等等。至于每个方法的参数,就是和这个方法对应的那个API操作里规定的请求json串有关了。看几个请求串和方法参数的对应就会有感觉了= =。。字段是参数名,而字段值是参数值。
比如详细解释一下上面这条语句,它的意思就是
我要获取一些主机组的信息。
这个(些)主机组的groupid是xxx(filter的功能,如果不写filter,系统就默认把所有组的信息都返回给你了,当然通过指定groupid过滤出来的组肯定只有一个咯,但是返回来的json串仍然是个列表的形式,即使只有一项,这个后面还会说到)
我要得到的是这个(些)组的name和groupid字段(output的功能,output一定得是一个列表,可以是空,但是无论如何至少一定会返回groupid这个字段。如果写[‘extend‘]则是把所有字段的信息都返回)
用例:
#!/usr/bin/env python
from pyzabbix import ZabbixAPI
import json
import os,sys
import re,time
import logging
rule = json.load(file('D:\pycharm\project\R