zabbix-api 获取监控值的简单介绍
一、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
官网地址:https://www.zabbix.com/documentation/4.0/zh/manual/api
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场景
其他方法请参考官方文档:https://www.zabbix.com/documentation/4.0/zh/manual/api