什么是api
zabbix-api可以做什么
如何使用zabbix-api
1.什么是api
api全称是(Application Programming Interface,应用程序接口)是一些预先定义的函数,或指软件系统不同组成部分衔接的约定。目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问原码,或理解内部工作机制的细节。
以上来源百度百科;
个人理解就是程序对外开放的一个窗口,用户可以在不了解内部程序的情况下通过执行程序给定的函数,获得程序的返回结果。
2.zabbix api可以做什么
zabbix api属于web的api,通过http协议请求zabbix-server服务器,来控制你的zabbix服务。
官方文档说明如下:
https://www.zabbix.com/documentation/4.0/zh/manual/api
Zabbix API允许你以编程方式检索和修改Zabbix的配置,并提供对历史数据的访问。它广泛用于:
创建新的应用程序以使用Zabbix;
将Zabbix与第三方软件集成;
自动执行常规任务。
Zabbix API是基于Web的API,作为Web前端的一部分提供。它使用JSON-RPC 2.0协议,这意味着两件事:
该API包含一组独立的方法;
客户端和API之间的请求和响应使用JSON格式进行编码。
3.用法
首先基于web的api,在请求的时候当然是通过http协议请求,关于http协议的请求方式大概有8种,get、post、put、delete、options、trace、connect、head,常用的有get,post,head等。
这里的请求方式为post,即向zabbix-server提交请求数据,返回结果。(常用的get方式只能向上提交数据,所以这里选用post方式)
4.认证(获取token)
获取token是调用zabbix api的第一步,就像是一把钥匙。打开新世界的大门,token是zabbix api认证的必要条件。
具体获取方式如下:
[root@test ~]# curl -s -X POST -H "Content-Type: application/json-rpc" -d '{"jsonrpc":"2.0","method": "user.login","params": {"user": "Admin", # zabbix登录用户名"password": "zabbix" # 登录密码},"id": 1 # id号}' http://zabbix-server-ip/zabbix/api_jsonrpc.php
返回结果如下,这里的result就是我们要的结果,token
{"jsonrpc":"2.0","result":"e8a1c8f0962eaacf2edab6c8110d0513","id":1}
当然,也可以在请求的结尾加上
| python -m json.tool来使输出格式更好看
[root@os7 ~]# curl -s -X POST -H "Content-Type: application/json-rpc" -d '{"jsonrpc":"2.0","method": "user.login","params": {"user": "Admin","password": "zabbix"},"id": 1}' http://192.168.0.194/zabbix/api_jsonrpc.php | python -m json.tool#返回结果如下{"id": 1,"jsonrpc": "2.0","result": "dddfa7ead038f786dec8aa62a20ec2a2"}
相关解释:
curl命令,常用来请求url的工具,这里使用curl来执行http协议
-s 参数,安静模式,不显示进度表或者错误信息。如果不加可能会出现以下信息,正常情况下这些显示是可有可无的。
% Total % Received % Xferd Average Speed Time Time Time CurrentDload Upload Total Spent Left Speed100 202 0 68 100 134 2074 4088 --:--:-- --:--:-- --:--:-- 4187
-X 参数,http请求的方式,默认get,当前环境下也可以不加,此时后面有-d参数,不加-X 也会调用其他的方式。
-H 参数,http请求头参数。
在zabbix api中请求的 Content-Type 头部必须设置为以下值之一:
application/json-rpc,
application/json 或
application/jsonrequest
-d 参数,发送post请求的数据体。加上-d参数后curl会将请求自动转换成post方式,所以此时可以不加前面的 -X POST参数。
此请求体最为重要。在zabbix api中请求体格式为标准json格式.
jsonrpc
- API使用的JSON-RPC协议的版本; Zabbix API实现的JSON-RPC版本是2.0;
method
- 被调用的API方法名;
params
- 将被传递给API方法的参数;
id
- 请求的任意标识符;
更多使用方法直接man curl 或者 curl --help就好啦~
5.使用token获取主机信息
获取到了token之后就可以进行后面的操作了,因为没有token就如同没有大门钥匙,至于为什么使用token认证而不是直接使用账户名密码认证,网上也有好多解释,不用频繁查询数据库,服务端负载更轻等等,这个话题属于前端开发的范畴了。
[root@os7 ~]# curl -s -XPOST -H "Content-Type: application/json-rpc" -d '{"jsonrpc": "2.0","method": "host.get","params": {"output":"extend" },"auth": "dddfa7ead038f786dec8aa62a20ec2a2","id": 1}' http://192.168.0.194/zabbix/api_jsonrpc.php | python -m json.tool
auth
-用户认证令牌;就是前面的token。返回结构如下:这里就有zabbix中一个主机的所有信息了。
{"id": 1,"jsonrpc": "2.0","result": [{"auto_compress": "1","available": "1","description": "","disable_until": "0","error": "","errors_from": "0","flags": "0","host": "Zabbix server","hostid": "10084","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": ""}]}
5.5获取指定主机的某些信息
前面的信息太多太杂,可以设置筛选条件,查询某些主机的某些信息;
[root@os7 ~]# curl -s -XPOST -H "Content-Type: application/json-rpc" -d '{"jsonrpc": "2.0","method": "host.get","params": {"output": ["hostid","name"] , # 输出的值,host id和name"selectInterfaces":["ip"], # 主机网络接口,ip地址"filter":{"host":["OS6"]} }, # 查询条件,host为OS6的主机"auth": "dddfa7ead038f786dec8aa62a20ec2a2","id": 1}' http://192.168.0.194/zabbix/api_jsonrpc.php | python -m json.tool#返回结果如下:{"id": 1,"jsonrpc": "2.0","result": [{"hostid": "10273","interfaces": [{"ip": "192.168.0.111"}],"name": "OS6"}]}
6.对主机进行相关操作
比如删除主机,
curl -s -XPOST -H "Content-Type: application/json-rpc" -d '{"jsonrpc": "2.0","method": "host.delete","params": ["10275"], # 这里必须为host id"auth": "dddfa7ead038f786dec8aa62a20ec2a2","id": 1}' http://192.168.0.194/zabbix/api_jsonrpc.php | python -m json.tool#返回值如下:{"id": 1,"jsonrpc": "2.0","result": {"hostids": ["10275"]}}
在web界面上查看,相应的主机已经删除了。
查看主机host id的简单方式,web界面查看配置--->主机--->选中对应的主机,此时的URL有主机的host id,

但是你此时已经打开了新世界的大门,轮子已经造好,快快用起来吧~~~




