1.API简介
API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。
根据单个或分布式平台上不同软件应用程序间的数据共享性能,可以将 API 分为四种类型:
远程过程调用(RPC):通过作用在共享数据缓存器上的过程(或任务)实现程序间的通信。
标准查询语言(SQL):是标准的访问数据的查询语言,通过通用数据库实现应用程序间的数据共享。
文件传输:文件传输通过发送格式化文件实现应用程序间数据共享。
信息交付:指松耦合或紧耦合应用程序间的小型格式化信息,通过程序间的直接通信实现数据共享。
关于zabbixzpi的调用可以查看官方文档:https://www.zabbix.com/documentation/4.0/zh/manual/api
2.api调用示例
(1)查看zabbix监控系统的api接口:(验证)
在可以访问Zabbix内部的任何数据之前,需要登录并获得身份验证令牌。这可以使用user.login方法来完成。假想以标准Zabbix Admin用户登录。那么JSON请求将是这样的
[root@server1 ~]# vim zabbix-api
curl -s -XPOST -H "Content-Type: application/json-rpc" -d '
{
"jsonrpc": "2.0",
"method": "user.login",
"params": {
"user": "Admin",
"password": "zabbix"
},
"id": 1,
"auth": null
}' http://172.25.1.4/zabbix/api_jsonrpc.php | python -m json.tool
[root@server1 ~]# chmod +x zabbix-api
脚本第一句是请求头,最后一句是发向那台主机,这个脚本中还具有以下属性:
jsonrpc API :使用的JSON-RPC协议的版本; Zabbix API实现的JSON-RPC版本是2.0;
method :被调用的API方法名;
params :将被传递给API方法的参数;
id :请求的任意标识符;
auth :用户认证令牌; 因为我们还没有一个,它的设置null。
运行该脚本:
[root@server1 ~]# ./zabbix-api
{
"id": 1,
"jsonrpc": "2.0",
"result": "0175c00c05963ab1e610923de33e5ed6"
}
(2)查看主机信息:(检索主机)
现在,我们有一个有效的用户认证令牌,可以用来访问Zabbix中的数据。例如,让我们使用host.get方法检索所有配置主机的ID、主机名和接口:
[root@server1 ~]# vim zabbix-api
curl -s -XPOST -H "Content-Type: application/json-rpc" -d '
{
"jsonrpc": "2.0",
"method": "host.get",
"params": {
"output": [
"hostid",
"host"
],
"selectInterfaces": [
"interfaceid",
"ip"
]
},
"id": 2,
"auth": "0175c00c05963ab1e610923de33e5ed6"
}' http://172.25.1.1/zabbix/api_jsonrpc.php | python -m json.tool
脚本中auth后的一串数字是上个实验的result显示的数字
运行该脚本:
[root@server1 ~]# ./zabbix-api
{
"id": 2,
"jsonrpc": "2.0",
"result": [
{
"host": "Zabbix server",
"hostid": "10084",
"interfaces": [
{
"interfaceid": "1",
"ip": "127.0.0.1"
}
]
},
{
"host": "server3",
"hostid": "10309",
"interfaces": [
{
"interfaceid": "6",
"ip": "172.25.1.3"
}
]
},
{
"host": "server2",
"hostid": "10310",
"interfaces": [
{
"interfaceid": "7",
"ip": "172.25.1.2"
}
]
}
]
}
可以看到当前集群中的所有主机。
(3)删除zabbix监控中的主机:
通过host.delete方法
[root@server1 ~]# vim zabbix-api
curl -s -XPOST -H "Content-Type: application/json-rpc" -d '
{
"jsonrpc": "2.0",
"method": "host.delete",
"params": [
"10309"
],
"id": 2,
"auth": "cb8a40a5ad96b9d9cad676ef9c994862"
}' http://172.25.63.4/zabbix/api_jsonrpc.php | python -m json.tool
其中params中的10309需要注意,这个数字是上个实验得到的结果中,要删除的主机(这里删除server3)对应的"hostid" 。运行该脚本:
[root@server1 ~]# ./zabbix-api
{
"id": 2,
"jsonrpc": "2.0",
"result": {
"hostids": [
"10309"
]
}
}
刷新web界面,发现server3已经被删除:
(4)在zabbix监控中创建被监控主机:(创建主机)
首先在web界面删除server2主机,在进行测试
通过host.create方法
[root@server4 ~]# vim zabbix-api
curl -s -XPOST -H "Content-Type: application/json-rpc" -d '
{
"jsonrpc": "2.0",
"method": "host.create",
"params": {
"host": "server2",
"interfaces": [
{
"type": 1,
"main": 1,
"useip": 1,
"ip": "172.25.1.2",
"dns": "",
"port": "10050"
}
],
"groups": [
{
"groupid": "2"
}
],
"templates": [
{
"templateid": "10001"
}
]
},
"auth": "cb8a40a5ad96b9d9cad676ef9c994862",
"id": 2
}' http://172.25.1.1/zabbix/api_jsonrpc.php | python -m json.tool
host:那里为要创建的主机的名字
ip:为创建的主机对应的ip地址
groupid:要添加的组对应的组id(根据组而定)
templateid:要添加的模板对应的模板的id号(根据模板而定)
host:同上
id:同上
[root@server1 ~]# ./zabbix-api
{
"id": 2,
"jsonrpc": "2.0",
"result": {
"hostids": [
"10312"
]
}
}