一、zabbix api介绍

1.Zabbix API允许以编程方式检索和修改Zabbix的配置,并提供对历史数据的访问。它广泛用于:

1)创建新的应用程序以使用Zabbix

2)将Zabbix与第三方软件集成

3)自动执行常规任务

2.Zabbix API是基于Web的API,作为Web前端的一部分提供。它使用JSON-RPC 2.0协议,这意味着两件事:

1)该API包含一组独立的方法;

2)客户端和API之间的请求和响应使用JSON格式进行编码。

3.Zabbix API由许多名义上分组的独立API方法组成。每个方法执行一个特定任务。例如,方法 host.create 隶属于 host 这个API分组 ,用于创建新主机。历史上,API分组有时被称为“类”。

大多数API至少包含四种方法: get, create, update 和 delete ,分别是检索,创建,更新和删除数据,但是某些API提供一套完全不同的一组方法。

根据单个或分布式平台上不同软件应用程序间的数据共享性能,可以将 API 分为四种类型:

1)远程过程调用(RPC):通过作用在共享数据缓存器上的过程(或任务)实现程序间的通信。

2)标准查询语言(SQL):是标准的访问数据的查询语言,通过通用数据库实现应用程序间的数据共享。

3)文件传输:文件传输通过发送格式化文件实现应用程序间数据共享。

4)信息交付:指松耦合或紧耦合应用程序间的小型格式化信息,通过程序间的直接通信实现数据共享。主机和主机组

一般来讲,Zabbix主机是指希望监控的那些设备,例如服务器、工作站、交换机等等。

创建主机是使用Zabbix过程中的一个首要任务。例如,如果想在一台服务器“X”上监控一些参数,必须首先创建一个主机称之为“服务器X”,然后就可以查看添加监控项到这台“服务器X”上。

主机组是由主机组成的

4.zabbix-api调用地址:http://zabbix服务器地址/zabbix/api_jsonrpc.php

5.获取监控项的步骤

1)获取token的值def getToken(self):

data = {
"jsonrpc":"2.0",  # API使用的JSON-RPC协议的版本
"method":"user.login",  # 被调用的API方法名,用于登录并获取身份验证令牌
"params": {# 将被传递给API方法的参数
"user":zabbix账号,
"password":
zabbix登录密码
},
"id":1,  # 请求的任意标识符
"auth":None  # 用户认证令牌; 因为我们还没有一个,它的设置null
}
r = requests.post(url=self.url, headers=headers, data=json.dumps(data))
token = json.loads(r.content).get("result")
return token

2)获取hostid(此处根据主机名只获取一个主机ID)def getHosts(self):

data = { "jsonrpc": "2.0", "method": "host.get", # 使用 host.get 方法检索所有已配置主机的ID,主机名
"params": { "output": [ "hostid", "host" ] },
"id": 2,
"auth": self.token }
r = requests.post(url=self.url, headers=headers, data=json.dumps(data))
# hostid = json.loads(r.content).get("result")[0] #获取zabbix-server的主机名,hostid
hostid = json.loads(r.content).get("result")[0].get("hostid") return hostid

3)获取内存总量def get_web_time(self,hostid):    #传入上一个方法反悔的hostid的值

data = {
"jsonrpc":"2.0",
"method":"item.get",
"params": {
"output":"extend",
"hostids": hostid,
"search": {
"key_":"vm.memory.size[total]"
}
},
"id":3,
"auth":self.token
}
r = requests.post(url=self.url, headers=headers, data=json.dumps(data))
memory=int(json.loads(r.content).get("result")[0]["lastvalue"])/1024 /1024 /1024
print 'total_memory:'+str(memory)+'GB'

6.目前为止使用过的方法

1)user.login    用来获取token值

2) host.get      用来获取主机信息

3)item.get       用来获取item的监控值

4)alert.get       用于获取告警信息

5)triggers,get   获取触发器信息

6)httptest.get   方法允许根据给定的参数检索Web场景