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'}]

  ●未完待续。。。

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

  1. 用Cython加速Python程序以及包装C程序简单测试

    用Cython加速Python程序 我没有拼错,就是Cython,C+Python=Cython! 我们来看看Cython的威力,先运行下边的程序: import time def fib(n): i ...

  2. 曾Python培训讲师-2年Python开发无包装简历-20191217-可公开

    目录 个人介绍 技能介绍 项目经历 自我评价 简历非完整版,需要完整版看下述信息,禁止任何一切私人用途.转发 我生日是27号,那就27元一份,有需求的来购买!只会涨价不会降价,大概卖10份涨1元:曾P ...

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

    使用python编写的脚本应用程序,在运行的时候需要有python的运行环境,但是我们肯定是希望整个python程序能够像应用程序一样打包生成一个包括其运行环境的exe文件包,这是第一步,但是要想使用 ...

  4. python学习-69 包装和授权

    包装 1.二次加工标准类型(包装) class List(list): def append(self, a_objcet): if type(a_objcet) is str: super().ap ...

  5. Python帮助文档中Iteration iterator iterable 的理解

    iteration这个单词,是循环,迭代的意思.也就是说,一次又一次地重复做某件事,叫做iteration.所以很多语言里面,循环的循环变量叫i,就是因为这个iteration. iteration指 ...

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

    在 python 中,下划线命名规则往往令初学者相当 疑惑:单下划线.双下划线.双下划线还分前后……那它们的作用与使用场景 到底有何区别呢?今天 就来聊聊这个话题. 1.单下划线(_) 通常情况下,单 ...

  7. [原]Python Web部署方式总结

    不要让服务器裸奔 学过PHP的都了解,php的正式环境部署非常简单,改几个文件就OK,用FastCgi方式也是分分钟的事情.相比起来,Python在web应用上的部署就繁杂的多,主要是工具繁多,主流服 ...

  8. Python自动化运维之12、面向对象进阶

    上一篇<面向对象基础>文章介绍了面向对象基本知识: 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使用(可以讲多函数中公 ...

  9. Python的下划线_

    1.单下划线(_) 通常情况下,单下划线(_)会在以下3种场景中使用: 1.1 在解释器中: 在这种情况下,"_"代表交互式解释器会话中上一条执行的语句的结果.这种用法首先被标准C ...

随机推荐

  1. python调试

    如果很简单的程序,建议还是pirnt打出来. 对于Linux环境,使用pdb/ipdb是一个不错的选择. 安装ipdb sudo pip install ipdb 开启调试 手动在需要调试的地方写入s ...

  2. 小说接入UC浏览器内核技术对话(二)

    质辛@灿岩 质辛跟我们说一下那个删除文件的逻辑吧质辛@灿岩  应该不是删除cache下所有文件吧?质辛质辛@智鹰  提供一下我们的临时文件完整路径给 灿岩吧质辛@智鹰  是负责我们ucsdk的 技术对 ...

  3. VBR与CBR的区别是什么?

    VBR是动态码率.CBR是静态码率. VBR(Variable Bitrate)动态比特率.也就是没有固定的比特率,压缩软件在压缩时根据音频数据即时确定使用什么比特率,这是以质量为前提兼顾文件大小的方 ...

  4. Unhandled event loop exception No more handles

    1.错误描述 2.错误原因 3.解决办法

  5. 芝麻HTTP:在阿里云上测试Gerapy教程

    1.配置环境 阿里云的版本是2.7.5,所以用pyenv新安装了一个3.6.4的环境,安装后使用pyenv global 3.6.4即可使用3.6.4的环境,我个人比较喜欢这样,切换自如,互不影响. ...

  6. Think with Google 京东如何玩转TensorFlow?

    2018 年 2 月 6 日,Think with Google 年度峰会在北京召开.在本次峰会上,我们分享了 Google 和我们的合作伙伴在 AI (人工智能) 方面取得的成绩,探讨如何利用人工智 ...

  7. 【转载】Spark运行架构

    1. Spark运行架构 1.1 术语定义 lApplication:Spark Application的概念和Hadoop MapReduce中的类似,指的是用户编写的Spark应用程序,包含了一个 ...

  8. canvas实现水波纹效果

    本文将会从水波的基本原理开始,详细讲解在canvas中模拟水波扩散,分析并计算水波的能量分布,并通过振幅模拟水波对图像的折射效果,最后实现水波特效. 水波基本原理 首先复习一波高中物理知识. 波是指振 ...

  9. #YCB#待做题目与填坑资料

    各种填坑资料(qwq) 主席树(by YL)戳 树套树(by ZSY)戳 不要问我这些题咋来的(查大佬的水表呗) 题目列表: [HDU5977]Garden of Eden [BZOJ2752][HA ...

  10. 【BZOJ1934】善意的投票(网络流)

    [BZOJ1934]善意的投票(网络流) 题面 Description 幼儿园里有n个小朋友打算通过投票来决定睡不睡午觉.对他们来说,这个问题并不是很重要,于是他们决定发扬谦让精神.虽然每个人都有自己 ...