【Python】 zabbixAPI的包装pyzabbix

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/zabbix

zapi.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-11-05 12:40:00

【Python】 zabbixAPI的包装pyzabbix的相关文章

zabbixAPI的包装pyzabbix

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

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

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

将python的程序包装成windows下的service

使用python编写的脚本应用程序,在运行的时候需要有python的运行环境,但是我们肯定是希望整个python程序能够像应用程序一样打包生成一个包括其运行环境的exe文件包,这是第一步,但是要想使用net start这样的方式启动, 还需要将该exe注册到服务里面去,使用exe install完成. ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 #SmallestService.py 

详解 Python 中的下划线命名规则

在 python 中,下划线命名规则往往令初学者相当 疑惑:单下划线.双下划线.双下划线还分前后……那它们的作用与使用场景 到底有何区别呢?今天 就来聊聊这个话题. 1.单下划线(_) 通常情况下,单下划线(_)会在以下3种场景中使用: 1.1 在解释器中: 在这种情况下,“_”代表交互式解释器会话中上一条执行的语句的结果.这种用法首先被标准CPython解释器采用,然后其他类型的解释器也先后采用. >>> _ Traceback (most recent call last): Fil

22 扩展Python - 《Python 核心编程》

?? 引言/动机 ?? 扩展 Python ?? 创建应用程序代码 ?? 用样板包装你的代码 ?? 编译 ?? 导入并测试 ?? 引用计数 ?? 线程和 GIL ?? 相关话题 22.1 介绍/动机 什么是扩展 一般来说,所有能被整合或导入到其它python 脚本的代码,都可以被称为扩展.您可以用纯 Python 来写扩展,也可以用C 和C++之类的编译型的语言来写扩展(或者也可以用Java 给Jython 写 扩展,也可以用C#或Visual Basic.NET 给IronPython 写扩展

Python 的类的下划线命名有什么不同?

1,以一个下划线开头的命名 ,如_getFile2,以两个下划线开头的命名 ,如__filename3,以两个下划线开头和结尾的命名,如 __init__()4,其它这些命名有什么不同吗 首先是单下划线开头,这个被常用于模块中,在一个模块中以单下划线开头的变量和函数被默认当作内部函数,如果使用 from a_module import * 导入时,这部分变量和函数不会被导入.不过值得注意的是,如果使用 import a_module 这样导入模块,仍然可以用 a_module._some_var

Awesome Python,Python的框架集合

Awesome Python A curated list of awesome Python frameworks, libraries and software. Inspired by awesome-php. Awesome Python Environment Management 环境管理 Package Management              软件包管理 Package Repositories              软件源 Distribution          

Awesome Python(中文对照)

A curated list of awesome Python frameworks, libraries and software. Inspired by awesome-php. Awesome Python Environment Management 环境管理 Package Management              软件包管理 Package Repositories              软件源 Distribution                         

python:类5——Python 的类的下划线命名有什么不同?

首先是单下划线开头,这个被常用于模块中,在一个模块中以单下划线开头的变量和函数被默认当作内部函数,如果使用 from a_module import * 导入时,这部分变量和函数不会被导入.不过值得注意的是,如果使用 import a_module 这样导入模块,仍然可以用 a_module._some_var 这样的形式访问到这样的对象. 在 Python 的官方推荐的代码样式中,还有一种单下划线结尾的样式,这在解析时并没有特别的含义,但通常用于和 Python 关键词区分开来,比如如果我们需