zabbixAPI的包装pyzabbix

pyzabbix是zabbixAPI的第三方python包装。从网上莫名其妙地搞到了一份源码,看了一下之后发现实现方法还蛮巧妙的,感觉挺好的就记下来了。那些个源码本身其实也是一个个单独操作的脚本,可以用命令行参数直接操作。pyzbx用了json来encode和decode请求数据和返回数据,并且用了urllib2中的一些方法来进行通讯

  如果不是直接用它的脚本,而是自己定制相关程序的话基本上只用到ZabbixAPI这个类:

  

from pyzabbix import ZabbixAPI

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‘]则是把所有字段的信息都返回)

    此外我还要获取一些这个主机组里主机的信息,那么可以用selectHosts这个参数,列表中的值指定了我想知道的这些主机哪些字段的信息。

  最后返回回来的json可能是这样的:

[
    {
        "hosts": [
            {
                "hostid": "10001", 
                "name": "主机1"
            }, 
            {
                "hostid": "10002", 
                "name": "主机2"
            }
        ], 
        "groupid": "10", 
        "name": "主机组1"
    }
]

  *不要问为什么hosts不是写在output里的一个参数= =。它的API就是这么设计的,即使是写json请求串也是要把selectHosts和output分开两个字段写的。。

  このように,利用这类包装好的方法来获取json串,然后从json串里解析出我想要的信息就是一般的做法了。get基本上就是这样了,其他的什么create啦,update啦,主要还是要结合官方给出的请求串的格式以及可用字段,然后思考一下我的参数该怎么写,测试一下就好了。总体来时pyzabbix并不难用,只是zabbixAPI本身有些逻辑比较异于常理,需要适应适应。。

■  以下是一些我在使用过程中碰到的一些需要注意的地方:

  ●  本身参数不存在,或者参数的值不合法的情况下(比如在上面那条语句中加个testpara="testvalue"之类的或者把output写成[‘name‘,‘groupid‘,‘testitem‘]),zabbixAPI不会报错,而是默认忽略这个参数,这一点比较坑,需要注意的。

  ●  主机有一个属性是status,这个属性可以在host.update中使用来实现通过api enable和disable某个主机的操作。但是需要注意的是这个status的值是u‘0‘或者u‘1‘,不是int也不是str,是unicode

  ●  host.update的时候在确定要update哪台主机的时候用的不是filter参数(事实上可能出了get方法以外,其他的用的都不是filter),而是直接有个hostid参数来指定一个hostid,从而确定一台特定的主机。这么做的依据是因为hostid是主机与生俱来且唯一的,可以这么做。。

  ●host在create的时候可以加上macros参数来添加宏。比如macros=[{‘macro‘:‘{$INSTANCE}‘,‘value‘:‘frankid‘},{‘macro‘:‘{$ACCOUNT}‘,‘value‘:‘test_account‘}]

  ●未完待续。。。

时间: 2024-10-08 07:50:39

zabbixAPI的包装pyzabbix的相关文章

【Python】 zabbixAPI的包装pyzabbix

pyzabbix pyzabbix是zabbixAPI的第三方python包装.从网上莫名其妙地搞到了一份源码,看了一下之后发现实现方法还蛮巧妙的,感觉挺好的就记下来了.那些个源码本身其实也是一个个单独操作的脚本,可以用命令行参数直接操作.pyzbx用了json来encode和decode请求数据和返回数据,并且用了urllib2中的一些方法来进行通讯 如果不是直接用它的脚本,而是自己定制相关程序的话基本上只用到ZabbixAPI这个类: from pyzabbix import ZabbixA

利用zabbix-api创建item

#!/usr/bin/python #-*- coding:utf8 -*- from zabbix_api import ZabbixAPI server = "http://172.16.206.130/zabbix" username = "Admin" password = "zabbix" zapi = ZabbixAPI(server=server, path="", log_level=0) zapi.login

java基本类型和包装器类

java是一种面向对象语言,java中的类把方法与数据连接在一起,并构成了自包含式的处理单元.但在java中不能定义基本类型(primitive type),为了能将基本类型视为对象来处理,并能连接相关的方法,java为每个基本类型都提供了包装类,这样,我们便可以把这些基本类型转化为对象来处理了.这些包装类有:Boolean,Byte,Short,Character,Integer,Long,Float,Double,Void共9个(注意:Date不是,无其基本类型). 一. 包装类(Wrapp

乔春洋:谈谈包装文化

包装有两层含义:一是指设计生产容器或包裹物的系列活动过程,二是指容器或包裹物本身.美国著名营销专家菲利普·科特勒说过:"包装是指设计生产容器或包裹物的一系列活动.这种容器或包裹物被称为包装."我们认为,产品包装是一个动态过程,产品美丽的外表只不过是这一动态过程的结果.包装是产品的脸面,是品牌文化的延伸.在过去的产品销售中,包装的作用常被生产者所忽视.现在,人们已改变了往日的观点,懂得了包装的巨大作用和无穷魅力.       包装是强有力的营销手段,是品牌战略中不可或缺的组成部分.良好的

javascript标准对象与包装对象

标准对象 在JavaScript的世界里,一切都是对象. 但是某些对象还是和其他对象不太一样.为了区分对象的类型,我们用typeof操作符获取对象的类型,它总是返回一个字符串: typeof 123; // 'number' typeof NaN; // 'number' typeof 'str'; // 'string' typeof true; // 'boolean' typeof undefined; // 'undefined' typeof Math.abs; // 'functio

将Python脚本文件包装成可执行文件

将Python脚本文件包装成可执行文件,其目的有二: 一则: 不需要依赖Python编译器就可以运行软件 二则: 不想让自己的源码公布出去 常用的工具有: py2exe.cx_freeze等 [工具:py2exe] 安装py2exe 安装该工具很简单: 只需要从官方网站:http://www.py2exe.org/下载与版本对应的安装程序,点击下一步即可完成安装. 安装后,执行import py2exe,不报错则表示安装成功! >>> import py2exe >>>

标准库》第三章 包装对象和Boolean对象

第三部分  标准库 ***************第三章   包装对象和Boolean对象******************* 一.包装对象的定义[1]有人说,JavaScript语言"一切皆对象",数组和函数本质上都是对象,就连三种原始类型的值--数值.字符串.布尔值--在一定条件下,也会自动转为对象,也就是原始类型的"包装对象". 所谓"包装对象",就是分别与数值.字符串.布尔值相对应的Number.String.Boolean三个原生对象

基本数据类型对象包装(Integer等)

基本数据类型 包装类 byte Byte short             Short int   Integer long Long boolean Boolean float              Float double Double char             Character 基本数据类型对象包装的常见作用就是: 实现基本数据类型和字符串之间的转换. 基本数据类型转换成字符串: 基本数据类型+""  基本数据类型.toString(基本数据类型值); 如: In

Python3 Tkinter基础 Entry root.register包装函数 validatecommand中有 %P %v %W 传入当前的输入框的值及validate

镇场诗: 清心感悟智慧语,不着世间名与利.学水处下纳百川,舍尽贡高我慢意. 学有小成返哺根,愿铸一良心博客.诚心于此写经验,愿见文者得启发.------------------------------------------ code: from tkinter import * root = Tk() def test(content,reason,name): if content == "舍名利": print('正确') print(content, reason,name)