1.什么是API
- API(Application Programming Interface,应用程序接口)是一些预先定义的函数,或指软件系统不同组成部分衔接的约定 。目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问原码,或理解内部工作机制的细节。
- Zabbix API允许你以编程方式检索和修改Zabbix的配置,并提供对历史数据的访问。它广泛用于:
- 创建新的应用程序以使用Zabbix;
- 将Zabbix与第三方软件集成;
- 自动执行常规任务。
- Zabbix API是基于Web的API,作为Web前端的一部分提供。它使用JSON-RPC 2.0协议,这意味着:
- 该API包含一组独立的方法;
- 客户端和API之间的请求和响应使用JSON格式进行编码。
Action 动作
这个类用于操作Action(动作)
可用方法:
- action.create - 创建动作
- action.delete - 删除动作
- action.get - 检索动作
- action.update - 更新动作
1.远程登陆
编写脚本查看 zabbix监控系统api接口
[root@server1 ~]# vim zabbix-api
curl -s -X POST -H 'Content-Type:application/json' -d ' #用curl命令模拟json格式的post请求
{
"jsonrpc": "2.0", #这是标准的JSON RPC参数以标示协议版本,所有的请求都保持不变
"method": "user.login", #用户登陆的方式获得API
"params": {
"user": "Admin", #zabbix监控系统的用户和密码
"password": "zabbix"
},
"id": 1, #请求的任意标识符,绑定JSON的请求和响应,响应会跟请求有相同的'id'
"auth": null #用户认证令牌; 因为我们还没有一个,它的设置null
}' http://172.25.40.1/zabbix/api_jsonrpc.php | python -m json.tool #采用POST方法向http://172.25.40.1/zabbix/api_jsonrpc.php发送JSON # http://172.25.40.1/zabbix是zabbix的前端地址
[root@server1 ~]# chmod +x zabbix-api #给脚本执行权限
[root@server1 ~]# ll zabbix-api
-rwxr-xr-x 1 root root 285 Jul 31 22:28 zabbix-api
[root@server1 ~]# ./zabbix-api #运行脚本,返回验证的值
{
"id": 1, #对应请求的标识符
"jsonrpc": "2.0", #JSON-RPC协议的版本
"result": "baf1ed6739c724d6557eaf88660ba840" #返回的数据;
}
注:请求的 Content-Type 头部必须设置为以下值之一: application/json-rpc, application/json 或 application/jsonrequest。
2. 检索主机
在上一个脚本的执行结果中,可以获得一个用户认证令牌,就可以使用该用户访问Zabbix中被监控的数据。可以使用 host.get 方法检索所有已配置主机ID,主机名和接口 。
curl -s -X POST -H 'Content-Type:application/json' -d '
{
"jsonrpc": "2.0",
"method": "host.get", #通过host.get方法
"params": {
"filter":{
"host":[
"Zabbix server" #获取Zabbix server主机参数信息
]
}
},
"id": 2,
"auth": "baf1ed6739c724d6557eaf88660ba840"
}' http://172.25.40.1/zabbix/api_jsonrpc.php | python -m json.tool
[root@server1 ~]# ./zabbix-api
{
"id": 2,
"jsonrpc": "2.0",
"result": [
{
"auto_compress": "1",
"available": "1",
"description": "",
"disable_until": "0",
"error": "",
"errors_from": "0",
"flags": "0",
"host": "Zabbix server", #主机名
"hostid": "10084", #主机id
"ipmi_authtype": "-1",
"ipmi_available": "0",
"ipmi_disable_until": "0",
"ipmi_error": "",
"ipmi_errors_from": "0",
"ipmi_password": "",
"ipmi_privilege": "2",
"ipmi_username": "",
"jmx_available": "0",
"jmx_disable_until": "0",
"jmx_error": "",
"jmx_errors_from": "0",
"lastaccess": "0",
"maintenance_from": "0",
"maintenance_status": "0",
"maintenance_type": "0",
"maintenanceid": "0",
"name": "Zabbix server", #被监控主机名
"proxy_address": "",
"proxy_hostid": "0",
"snmp_available": "0",
"snmp_disable_until": "0",
"snmp_error": "",
"snmp_errors_from": "0",
"status": "0",
"templateid": "0",
"tls_accept": "1",
"tls_connect": "1",
"tls_issuer": "",
"tls_psk": "",
"tls_psk_identity": "",
"tls_subject": ""
}
]
}
或者
[root@server1 ~]# vim zabbix.api
curl -s -XPOST -H 'Content-Type:application/json-rpc' -d '
{
"jsonrpc": "2.0",
"method": "host.get", #通过host.get方法
"params": {
"output": [
"hostid", #获得主机名
"host" #获得主机名
],
"selectInterfaces": [
"interfaceid", ##接口
"ip"
]
},
"id":2,
"auth":"baf1ed6739c724d6557eaf88660ba840" #用户认证码,上一个脚本认证得到的
}' http://172.25.40.1/zabbix/api_jsonrpc.php | python -m json.tool
[root@server1 ~]# ./zabbix.api #运行脚本
相应的消息:
{
"id": 2, ##请求标示符
"jsonrpc": "2.0",##版本号
"result": [
{
"host": "Zabbix server", ##主机名
"hostid": "10084", #监控的号
"interfaces": [
{
"interfaceid": "1", #api接口号
"ip": "127.0.0.1" ##监控的ip
}
]
},
{
"host": "server2", #主机名
"hostid": "10264",
"interfaces": [
{
"interfaceid": "5",##api接口号
"ip": "172.25.40.2" #被监控主机的ip
}
]
}
]
}
删除主机
[root@server1 ~]# vim zabbix-api
curl -s -X POST -H 'Content-Type:application/json' -d '
{
"jsonrpc": "2.0",
"method": "host.delete",
"params": [
"10264" #删除的server3的主机id
],
"id": 1,
"auth": "baf1ed6739c724d6557eaf88660ba840"
}' http://172.25.40.1/zabbix/api_jsonrpc.php | python -m json.tool
[root@server1 ~]# ./zabbix-api
{
"id": 1,
"jsonrpc": "2.0",
"result": {
"hostids": [
"10264"
]
}
}
server3被删除
添加主机:
curl -s -X POST -H 'Content-Type:application/json' -d '
{
"jsonrpc": "2.0",
"method": "host.create", #调用添加主机的方法
"params": {
"host": "server3",
"interfaces": [
{
"type": 1,
"main": 1,
"useip": 1,
"ip": "172.25.40.3", #添加的主机ip
"dns": "",
"port": "10050"
}
],
"groups": [
{
"groupid": "2" #Linux server 组id=2
}
],
"templates": [
{
"templateid": "10001" #要添加的模版的id
}
]
},
"id": 1,
"auth": "baf1ed6739c724d6557eaf88660ba840"
}' http://172.25.40.1/zabbix/api_jsonrpc.php | python -m json.tool
[root@server1 ~]# ./zabbix-api
{
"error": {
"code": -32602,
"data": "Host with the same name \"server3\" already exists.",
"message": "Invalid params."
},
"id": 1,
"jsonrpc": "2.0"
}
查看组id,模版id:
server3被添加到Linux server主机群组