什么是API
API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。可以说是简化运维人员复杂操作的一个好帮手。
API在zabbix中的应用
学习zabbix API的必要性
1.Zabbix API开始扮演着越来越重要的角色,尤其是在集成第三方软件和自动化日常任务时。很难想象管理数千台服务器而没有自动化是多么的困难。Zabbix API为批量操作、第三方软件集成以及其他作用提供可编程接口。
2.Zabbix API是在1.8版本中开始引进并且已经被广泛应用。所有的Zabbix移动客户端都是基于API,甚至原生的WEB前端部分也是建立在它之上。Zabbix API 中间件使得架构更加模块化也避免直接对数据库进行操作。它允许你通过JSON RPC协议来创建、更新和获取Zabbix对象并且做任何你喜欢的操作【当然前提是你拥有认证账户】
关于API的几个实验
实验环境:
在server1上下载了zabbix-server,配置好了mariadb,开启了服务,可以进入到zabbix监控管理界面(详情可以见zabbix分布式监控系统的安装部署与基础配置)
因为前面我已经做过了,所以我直接开启服务
[root@server1 ~]# systemctl start zabbix-server
[root@server1 ~]# systemctl start zabbix-agent
[root@server1 ~]# systemctl start mariadb
[root@server1 ~]# systemctl start httpd
在sever2上下载zabbix-agent,开启zabbix-agent服务[root@server2 ~]# systemctl start zabbix-agent
在server3进行和server2一样的操作
实验步骤:
(一)实验一:获取身份验证令牌
在访问Zabbix中的任何数据之前,你需要登录并获取身份验证令牌。这可以使用该 user.login 方法完成。让我们假设你想要以标准Zabbix Admin用户身份登录。然后,你的JSON请求将如下所示
[root@server1 ~]# vim zabbix-api
文件中的内容如下:
curl -s -X POST -H 'Content-Type:application/json' -d ' #-s表示禁用curl命令的输出信息 (隐藏不必要的输出信息); -d 表示上传内容
{
"jsonrpc": "2.0",
"method": "user.login", ##用户登陆
"params": {
"user": "Admin", #zabbix登陆用户
"password": "zabbix" #用户密码
},
"id": 1,
"auth": null
}' http://172.25.15.1/zabbix/api_jsonrpc.php | python -m json.tool#上传地址 转换输出格式
给脚本一个可执行权限
[root@server1 ~]# chmod +x zabbix-api
调用脚本
[root@server1 ~]# ./zabbix-api
(二)实验二:通过名称获取数据
现在有一个有效的用户身份验证令牌,可以用来访问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": fcd0074feeb02f41c1b8aa5f8f42d289"#这个是上一个实验得到的身份验证令牌
}' http://172.25.66.1/zabbix/api_jsonrpc.php | python -m json.tool
运行一下查看效果
我们也可以在params下直接写主机名,查询所有信息 不过出于性能原因,我们建议始终列出要检索的对象属性,避免检索所有内容
其中的auth是在上一个实验中得到的用户认证令牌
(三)实验三:删除主机
object host.delete(array hosts) 该方法允许删除主机
我尝试删除的是server2
刚才那个实验结果可以查看到server2的hostid
把他写进zabbix-api里,内容如下:
curl -s -XPOST -H "Content-Type: application/json-rpc" -d '
{
"jsonrpc": "2.0",
"method": "host.delete",
"params": [
"10271"#想要删除主机的hostid
],
"id": 2,
"auth": "d05eafbd2b11cfc6283d84abebaf2883"
}' http://172.25.27.1/zabbix/api_jsonrpc.php | python -m json.tool
我们可以从zabbix配置主机上看到实验效果:
删除前
运行zabbix-api
vim zabbix-api
./zabbix-api
删除后
(四)实验四:创建主机
创建一个具有IP接口的“Linux Server”主机,将其添加到主机组中,链接一个模板并且把MAC地址设置到主机资产清单里(注意:在实验开始之前需要将之前做的自动发现和自动注册取消,否则会报错,而且在实验开始之前需要将添加的主机进行删除,否则无法成功添加)
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.15.2",
"dns": "",
"port": "10050"
}
],
"groups": [
{
"groupid": "2"
}
],
"templates": [
{
"templateid": "10001"
}
]
},
"id": 2,
"auth": "d05eafbd2b11cfc6283d84abebaf2883"
}' http://172.25.27.1/zabbix/api_jsonrpc.php | python -m json.tool
这里面的groupid有一个简单的获得方法,选择主机群组,找到Linux sevrer就是server2所在的组,点击查看上面会显示groupid(templateid的获取方式同理,找到对应的模板,上面就会显示)
实验效果:
vim zabbix-api
./zabbix-api
发现server2又添加回来了