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

API 采用 JSON-RPC 实现。这意味着调用任何函数,都需要发送 POST 请求,输入输出数据都是以 JSON 格式。

Zabbix API由许多名义上分组的独立API方法组成。每个方法执行一个特定任务。例如,方法 host.create 隶属于 host 这个API分组 ,用于创建新主机。历史上,API分组有时被称为“类”。
大多数API至少包含四种方法: get, create, update 和 delete ,分别是检索,创建,更新和删除数据,但是某些API提供一套完全不同的一组方法。

API分类

根据单个或分布式平台上不同软件应用程序间的数据共享性能,可以将 API 分为四种类型:

    远程过程调用(RPC):通过作用在共享数据缓存器上的过程(或任务)实现程序间的通信。
    标准查询语言(SQL):是标准的访问数据的查询语言,通过通用数据库实现应用程序间的数据共享。
    文件传输:文件传输通过发送格式化文件实现应用程序间数据共享。
    信息交付:指松耦合或紧耦合应用程序间的小型格式化信息,通过程序间的直接通信实现数据共享。

zabbix常用的API

user.login,用户登录
host.get(create|delete|update),主机操作
hostgroup.get(create|delete|update),主机组操作
item.get(create|delete|update),监控项目操作
history.get,历史数据查询
event.get,事件查询
trigger.get,触发器查询

实战

获取token

[root@zabbix5-server ~]# curl -X POST http://10.0.0.71/api_jsonrpc.php -H
'Content-Type: application/json-rpc' -d '
{
"jsonrpc": "2.0",
"method": "user.login",
"params": {
"user": "Admin",
"password": "zabbix"
},
"id": 1,
"auth": null
}'
## 获取Token
{
"jsonrpc": "2.0",
"result": "29766afc0e1cfcf4a7f8a16ace058b76",
"id": 1
}

image-20240806165814691

创建主机

[root@zabbix5-server ~]# curl -X POST http://10.0.0.71/api_jsonrpc.php -H
'Content-Type: application/json-rpc' -d '
{
"jsonrpc": "2.0",
"method": "host.create",
"params": {
"host": "abc111-10.0.0.1",        ##Hostname
"interfaces": [
{
"type": 1,e
"main": 1,
"useip": 1,
"ip": "10.0.0.111",              #### ip地址
"dns": "",
"port": "10050"
}
],
"groups": [
{
"groupid": "2"
}
],
"tags": [
{
"tag": "Host name",
"value": "Linux server"
}
],
"templates": [
{
"templateid": "10001"  #### 模板id
},
{
"templateid": "10439"  #### 模板id
}
],
"macros": [
{
"macro": "{$USER_ID}",
"value": "123321"
},
{
"macro": "{$USER_LOCATION}",
"value": "0:0:0",
"description": "latitude, longitude and altitude coordinates"
}
],
"inventory_mode": 0,
"inventory": {
"macaddress_a": "01234",
"macaddress_b": "56768"
}
},
"auth": "29766afc0e1cfcf4a7f8a16ace058b76",
"id": 1
}'

自动化脚本

[root@zabbix5 ~]# cat 3.sh
#!/bin/bash

# Zabbix服务器URL和API端点
ZABBIX_URL="http://10.0.0.71/api_jsonrpc.php"

# 提示用户输入Zabbix API用户名和密码
read -p "请输入Zabbix API用户名: " ZABBIX_USER
read -s -p "请输入Zabbix API密码: " ZABBIX_PASS

# 解决不换行问题
echo

# 将代码写入一个文件中
cat >/tmp/zabbix.txt<<EOF
{
"jsonrpc": "2.0",
"method": "user.login",
"params": {
"user": "$ZABBIX_USER",
"password": "$ZABBIX_PASS"
},
"id": 1,
"auth": null
}  
EOF


# 获取Zabbix API认证令牌并写入文件中(opt下1.txt)
curl -o /opt/1.txt  -s -X POST $ZABBIX_URL -H 'Content-Type: application/json-rpc' \
    -d "$(cat /tmp/zabbix.txt)" 

# 获取token 辅助给TOKEN
TOKEN=$(awk -F'"' '{print $8}' /opt/1.txt)

# 检查是否成功获取认证令牌
if [ -z "$TOKEN" ]; then
    echo "认证失败,请检查您的凭据。"
    exit 1
fi
echo "认证成功。令牌: $TOKEN"


# 这里可以添加更多使用获取的令牌进行其他API操作的代码
cat <<EOF
--------------
添加主机  1
--------------
添加用户  2
--------------
删除主机  3
--------------
EOF