Skip to end of metadata
Go to start of metadata

        Zabbix 优势在于其丰富的api功能,可以高度定制化、扩展。在cmdb资产管理功能、微信操作控制Zabbix功能、获取Zabbix数据制作报表等都利用到了Zabbix api。Zabbix API开始扮演着越来越重要的角色,尤其是在集成第三方软件和自动化日常任务时。很难想象管理数千台服务器而没有自动化是多么的困难。Zabbix API为批量操作、第三方软件集成以及其他作用提供可编程接口。

        Zabbix API是在1.8版本中开始引进并且已经被广泛应用。所有的Zabbix移动客户端都是基于API,甚至原生的WEB前端部分也是建立在它之上。Zabbix API 中间件使得架构更加模块化也避免直接对数据库进行操作。它允许你通过JSON RPC协议来创建、更新和获取Zabbix对象并且做任何你喜欢的操作(当然前提是你拥有认证账户)。

Zabbix API提供两项主要功能:

  1. 远程管理Zabbix配置

  2. 远程检索配置和历史数据


        API 采用JSON-RPC实现。这意味着调用任何函数,都需要发送POST请求,输入输出数据都是以JSON格式。大致工作流如下:

  1. 准备JSON对象,它描述了你想要做什么(创建主机,获取图像,更新监控项等)。

  2. 采用POST方法向http://example.com/zabbix/api_jsonrpc.php发送此JSON对象,http://example.com/zabbix/是Zabbix前端地址。api_jsonrpc.php是调用API的PHP脚本。可在安装可视化前端的目录下找到。

  3. 获取JSON格式响应。

基本请求格式

Zabbix API简化的JSON请求如下:

{
    "jsonrpc": "2.0",
    "method": "method.name",
    "params": {
        "param_1_name": "param_1_value",
        "param_2_name": "param_2_value"
    },
    "id": 1,
    "auth": "159121b60d19a9b4b55d49e30cf12b81",
}

        现在制作Zabbix报表,都会手动去制作报表或直接在数据库里抽取数据,第一种方法过于麻烦,要是一天两天还可以,日子多了就会很烦,第二种方法直接在数据库中抽取,很不安全,有可能会人为泄露数据,现在是信息化时代,数据比钱还要重要,所以两种方法都不可行,本篇文章主要介绍了通过Zabbix的API端口来获取数据来自动生成报表。

        脚本的编程语言是Python语言,版本Python2.7.5,Python语言的使用在于对模块和语法的使用,要想实现此项功能,需要安装模块xlrd(对数据的读取),xlwt(数据的写入),openpyxl(读写Excel 2010文档的Python库),jdcal,et_xmlfile(是安装openpyxl模块的依赖模块),模块下载地址https://pypi.org/project/Openpyxl/#files模块安装完毕后,就可以直接上代码了。

        首先第一个脚本,是登录Zabbix的api端口脚本login.py,这里需要修改的地方是请求的IP(注意:是zabbix-server的IP),登录Zabbix的用户和密码,如果不是脚本内的,也是需要修改的,详细脚本请看附件。

第二个脚本,是定义函数脚本 function.py(这里获取的history.get),如果你想获取其他值,可参考https://www.zabbix.com/documentation/4.0/manual/api,可根据自己需求修改脚本,详细脚本请看附件。

第三个脚本,是传参调用函数脚本zabbix.py,通过在此目录下创建ip.txt文件(如下图),读取文件内的ip来抽取出对应ip的cpu和内存的历史数据,详细脚本请看附件。

第四个脚本,是定义取值时间函数脚本time.py,实现的功能是可以让用户可以取出不同时间段的值,更利于用户使用,详细脚本请看附件。

第五个脚本,是写入excel表格脚本excel.py,主要定义了生成excel表格,并将数据写入excel表格的方法和写入格式,详细脚本请看附件。

在该目录下会生成一个test.xls文件,导入到Windows系统内,打开后就能看到生成excel表格了,具体图如下:

利用excel,即可以图表方式展现服务器的性能报表。

后期规划,excel的需要手动出图,而python有一pandas模块,可以进行绘图。目前正在研究中。