Zabbix API请求应用

一、Zabbix API简介

API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节
Zabbix API开始扮演着越来越重要的角色,尤其是在集成第三方软件和自动化日常任务时。很难想象管理数千台服务器而没有自动化是多么的困难。Zabbix API为批量操作、第三方软件集成以及其他作用提供可编程接口。Zabbix API是在1.8版本中开始引进并且已经被广泛应用。所有的Zabbix移动客户端都是基于API,甚至原生的WEB前端部分也是建立在它之上。Zabbix API 中间件使得架构更加模块化也避免直接对数据库进行操作。它允许你通过JSON RPC协议来创建、更新和获取Zabbix对象并且做任何你喜欢的操作【当然前提是你拥有认证账户】。

Zabbix API提供两项主要功能:
远程管理Zabbix配置
远程检索配置和历史数据

使用JSON
API 采用JSON-RPC实现。这意味着调用任何函数,都需要发送POST请求,输入输出数据都是以JSON格式。大致工作流如下:
准备JSON对象,它描述了你想要做什么(创建主机,获取图像,更新监控项等)。
采用POST方法向http://example.com/zabbix/api_jsonrpc.php发送此JSON对象. http://example.com/zabbix/是Zabbix前端地址。api_jsonrpc.php是调用API的PHP脚本。可在安装可视化前端的目录下找到。
获取JSON格式响应。
注:请求除了必须是POST方法之外,HTTP Header Content-Type必须为【application/jsonrequest,application/json-rpc,application/json】其中之一。
可以采用脚本或者任何"手动"支持JSON RPC的工具来使用API。而首先需要了解的就是如何验证和如何使用验证ID来获取想要的信息。后面的演示会以Python脚本和基于Curl的例子来呈现API的基本使用。

基本请求格式
Zabbix API 简化的JSON请求如下:

{
    "jsonrpc": "2.0",
    "method": "method.name", 
    "params": {
        "param_1_name": "param_1_value",
        "param_2_name": "param_2_value" 
    },
    "id": 1,
    "auth": "159121b60d19a9b4b55d49e30cf12b81",
}

下面一行一行来看:
“jsonrpc”: “2.0”-这是标准的JSON RPC参数以标示协议版本。所有的请求都会保持不变。
“method”: “method.name”-这个参数定义了真实执行的操作。例如:host.create、item.update等等
“params”-这里通过传递JSON对象来作为特定方法的参数。如果你希望创建监控项,"name"和"key_“参数是需要的,每个方法需要的参数在Zabbix API文档中都有描述。
“id”: 1-这个字段用于绑定JSON请求和响应。响应会跟请求有相同的"id”。在一次性发送多个请求时很有用,这些也不需要唯一或者连续
“auth”: “159121b60d19a9b4b55d49e30cf12b81”-这是一个认证令牌【authentication token】用以鉴别用户、访问API。这也是使用API进行相关操作的前提-获取认证ID。

二、基本操作

环境介绍:
zabbix server:192.168.120.128
调用api地址:http://192.168.120.128/api_jsonrpc.php

1、user.login方法获取token
使用curl命令模拟登录获取到一个token
参数说明:
在这里插入图片描述

curl -s -X POST -H 'Content-Type:application/json' -d '
{
"jsonrpc": "2.0",
"method": "user.login",
"params": {
"user": "Admin",
"password": "123456"
},
"id": 1,
"auth": null
}' http://192.168.120.128/api_jsonrpc.php

在这里插入图片描述
这里获取到的token值为8d540d8514f784d02572ad98118ca7f5
或者执行以下shell脚本获取token

vim zabbix-get-token.sh
#!/bin/bash
admin=Admin                          #zabbix用户
pass=123456                          #密码
ZBX='192.168.120.128'          #zabbix-server的地址

curl -s -X POST -H 'Content-Type:application/json' -d'
{
"jsonrpc": "2.0",
"method": "user.login",
"params": {
"user": "'$admin'",
"password": "'$pass'"
},
"id": 1
"auth": null
}' http://$ZBX/api_jsonrpc.php|grep -Po 'result[" :]+\K[^"]+'

2、hostgroup.get方法获取所有主机组ID
参数说明:
在这里插入图片描述

curl -i -X POST -H 'Content-Type:application/json' -d '{"jsonrpc": "2.0","method":"hostgroup.get","params":{"output":["groupid","name"]},"auth":"37d34c356bbd648b358954d2648fae4c","id": 0}' http://192.168.120.128/api_jsonrpc.php

在这里插入图片描述

3、host.get方法获取单个主机组下所有的主机ID
参数说明:
在这里插入图片描述

curl -i -X POST -H'Content-Type: application/json' -d '{"jsonrpc":"2.0","method":"host.get","params":{"output":["hostid","name"],"groupids":"7"},"auth":"37d34c356bbd648b358954d2648fae4c","id": 0}' http://192.168.120.128/api_jsonrpc.php

在这里插入图片描述
在这里插入图片描述

4、itemsid.get方法获取单个主机下所有的监控项ID
参数说明:
在这里插入图片描述

curl -i -X POST -H 'Content-Type:application/json' -d '{"jsonrpc":"2.0","method":"item.get","params":{"output":"itemids","hostids":"10309"},"auth":"37d34c356bbd648b358954d2648fae4c","id": 0}' http://192.168.120.128/api_jsonrpc.php

在这里插入图片描述

5、history.get方法获取单个监控项的历史数据
参数说明:
在这里插入图片描述

curl -i -X POST -H 'Content-Type:application/json' -d '{"jsonrpc":"2.0","method":"history.get","params":{"history":0,"itemids":"29163","output":"extend","limit":10},"auth":"37d34c356bbd648b358954d2648fae4c","id": 0}' http://192.168.120.128/api_jsonrpc.php

在这里插入图片描述

6、get方法的通用参数
在这里插入图片描述

7、创建主机

curl -s -X POST -H "Content-Type: application/json" -d '
{
"jsonrpc": "2.0",
"method": "host.create",        #指定方法创建主机
"params": {
"host": "1.1.1.1",        #主机ip
"interfaces": [
{
"type": 1,        #接口类型1代表agent接口
"main": 1,
"useip": 1,        #1表示使用ip
"ip": "1.1.1.1",    #ip地址
"dns": "",
"port": "10050"    #端口
}
],
"groups": [
{
"groupid": "2"    #组id
}
],
"templates": [
{
"templateid": "10265"        #模板id
}
]
},
"auth": "37d34c356bbd648b358954d2648fae4c",
"id": 1
}' http://192.168.120.128/api_jsonrpc.php

在这里插入图片描述
在这里插入图片描述
执行上述命令即可在命令行添加一台监控主机,可以进一步编写shell脚本批量创建主机

# vim hostadd.sh
#/bin/bash
for n in `seq -f 10.0.0.%0g 60 100`
do
curl -s -X POST -H "Content-Type: application/json" -d '
{
"jsonrpc": "2.0",
"method": "host.create",    
"params": {
"host": "'$n'",
"interfaces": [
{
"type": 1,
"main": 1,
"useip": 1,
"ip": "'$n'",
"dns": "",
"port": "10050"    
}
],
"groups": [
{
"groupid": "9"
}
],
"templates": [
{
"templateid": "10001"    
}
]
},
"auth": "37d34c356bbd648b358954d2648fae4c",
"id": 1
}' http://192.168.120.128/api_jsonrpc.php
done

8、删除主机

curl -s -X POST -H "Content-Type: application/json" -d '
{
"jsonrpc": "2.0",
"method": "host.delete",
"params": [
"10319"                                #主机id
],
"auth": "37d34c356bbd648b358954d2648fae4c",
"id": 1
}' http://192.168.120.128/api_jsonrpc.php

已删除上面创建的主机
在这里插入图片描述
执行上述命令即可在命令行删除一台监控主机,可以进一步编写shell脚本批量删除上面创建的主机

vim hostdel.sh
#/bin/bash
curl -s -X POST -H "Content-Type: application/json" -d '
{
"jsonrpc": "2.0",
"method": "host.get",    #利用host.get方法得到主机id
"params": {
"output": "hostid",
"selectGroups": "groupid"
},
"auth": "37d34c356bbd648b358954d2648fae4c",
"id": 1
}' http://192.168.120.128/api_jsonrpc.php >/tmp/a.txt
for n in `seq 2 43`
do
hostid=`cat /tmp/a.txt|jq '.result['$n'].hostid'|sed 's#"##g'`        #过滤出上面批量添加的主机id
curl -s -X POST -H "Content-Type: application/json" -d '
{
"jsonrpc": "2.0",
"method": "host.delete",        #利用host.delete方法批量删除主机
"params": [
"'$hostid'"
],
"auth": "37d34c356bbd648b358954d2648fae4c",
"id": 1
}' http://192.168.120.128/api_jsonrpc.php
done

9、创建一个用户

curl -s -X POST -H 'Content-Type:application/json' -d '
{
"jsonrpc": "2.0"
"method": "user.create",        #利用user.create方法创建用户
"params": {
"alias": "test",                #用户名
"passwd": "123456",            #密码
"usrgrps": [
{
"usrgrpid": "7"                #用户所属组id
}
]
},
"auth": "37d34c356bbd648b358954d2648fae4c",
"id": 1
}' http://192.168.120.128/api_jsonrpc.php

10、删除一个用户

curl -s -X POST -H 'Content-Type:application/json' -d '
{
"jsonrpc": "2.0",
"method": "user.delete",        #利用user.delete方法删除用户
"params": [
"3"                            #用户id
],
"auth": "37d34c356bbd648b358954d2648fae4c",
"id": 1
}' http://192.168.120.128/api_jsonrpc.php
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue.js是一种流行的JavaScript框架,用于构建用户界面。Zabbix是一款开源的网络监控系统,提供了API接口用于与其进行交互。接入Zabbix API可以让你在Vue.js应用中获取和展示监控数据。 要在Vue.js中接入Zabbix API,你可以按照以下步骤进行操作: 1. 安装axios库:在Vue.js项目中使用axios库可以方便地进行HTTP请求。你可以通过npm安装axios,运行以下命令: ``` npm install axios ``` 2. 创建API服务文件:在Vue.js项目中,你可以创建一个单独的文件来处理与Zabbix API的通信。在该文件中,你可以定义各种方法来发送请求和处理响应。例如,你可以创建一个名为`zabbixService.js`的文件,并在其中编写以下代码: ```javascript import axios from 'axios'; const apiBaseUrl = 'http://your-zabbix-api-url/api_jsonrpc.php'; const username = 'your-username'; const password = 'your-password'; export default { async login() { const response = await axios.post(apiBaseUrl, { jsonrpc: '2.0', method: 'user.login', params: { user: username, password: password, }, id: 1, }); return response.data.result; }, async getHosts() { const token = await this.login(); const response = await axios.post(apiBaseUrl, { jsonrpc: '2.0', method: 'host.get', params: { output: ['hostid', 'name'], }, auth: token, id: 2, }); return response.data.result; }, // 其他方法... }; ``` 3. 在Vue组件中使用API服务:在需要获取Zabbix数据的Vue组件中,你可以导入`zabbixService.js`文件,并调用其中的方法来获取数据。例如,你可以在一个名为`Dashboard.vue`的组件中编写以下代码: ```javascript <template> <div> <h1>Dashboard</h1> <ul> <li v-for="host in hosts" :key="host.hostid">{{ host.name }}</li> </ul> </div> </template> <script> import zabbixService from '@/services/zabbixService.js'; export default { data() { return { hosts: [], }; }, async mounted() { this.hosts = await zabbixService.getHosts(); }, }; </script> ``` 这样,当`Dashboard.vue`组件被加载时,它会调用`zabbixService.getHosts()`方法来获取主机列表,并将结果存储在`hosts`属性中。然后,你可以在模板中使用`v-for`指令来遍历主机列表并展示出来。 希望以上内容对你有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值