Zabbix API一个JSON-RPC HTTP API

Zabbix API 本质上是一个 JSON-RPC HTTP API,允许你用程序方式控制整个监控系统:创建主机、获取监控数据、管理告警、自动化运维等。


一、Zabbix API 工作原理

Zabbix API 采用 JSON-RPC 2.0 协议,所有请求都发送到:

http://<zabbix-server>/api_jsonrpc.php

请求结构:

1
2
3
4
5
6
7
{
"jsonrpc": "2.0",
"method": "method.name",
"params": {},
"auth": "token",
"id": 1
}

核心字段:

字段 说明
jsonrpc 协议版本
method 调用方法
params 参数
auth 认证 token
id 请求 ID

二、API 调用流程

典型流程:

flowchart LR
A[Client / Script] --> B[调用 user.login]
B --> C[获取 Auth Token]
C --> D[调用其他 API]
D --> E[Zabbix Server]
E --> F[返回 JSON 数据]

步骤:

  1. 登录获取 token
  2. 调用 API
  3. 使用 token 认证
  4. 获取返回 JSON

三、获取 API Token(登录)

示例:

1
2
3
4
5
6
7
8
9
10
11
curl -X POST http://zabbix/api_jsonrpc.php \
-H "Content-Type: application/json-rpc" \
-d '{
"jsonrpc": "2.0",
"method": "user.login",
"params": {
"username": "Admin",
"password": "zabbix"
},
"id": 1
}'

返回:

1
2
3
4
5
{
"jsonrpc": "2.0",
"result": "0424bd59b807674191e7d77572075f33",
"id": 1
}

这个字符串就是:

auth token

四、常用 API

1 获取主机列表

1
2
3
4
5
6
7
8
9
10
11
curl -X POST http://zabbix/api_jsonrpc.php \
-H "Content-Type: application/json-rpc" \
-d '{
"jsonrpc":"2.0",
"method":"host.get",
"params":{
"output":["hostid","host"]
},
"auth":"TOKEN",
"id":1
}'

返回:

1
2
3
4
5
6
7
8
{
"result":[
{
"hostid":"10084",
"host":"Linux server"
}
]
}

2 创建主机

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
{
"jsonrpc": "2.0",
"method": "host.create",
"params": {
"host": "linux-test",
"interfaces": [
{
"type": 1,
"main": 1,
"useip": 1,
"ip": "192.168.1.100",
"dns": "",
"port": "10050"
}
],
"groups": [
{
"groupid": "2"
}
],
"templates": [
{
"templateid": "10001"
}
]
},
"auth": "TOKEN",
"id": 1
}

3 获取监控数据

1
2
3
4
5
6
7
{
"method": "item.get",
"params": {
"output": ["itemid","name","lastvalue"],
"hostids": "10084"
}
}

返回示例:

CPU load
Memory usage
Disk usage

五、Python 调用 Zabbix API

自动化通常用 Python。

安装:

pip install requests

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import requests
import json

url = "http://zabbix/api_jsonrpc.php"

payload = {
"jsonrpc": "2.0",
"method": "user.login",
"params": {
"username": "Admin",
"password": "zabbix"
},
"id": 1
}

r = requests.post(url, json=payload)
token = r.json()['result']

print(token)

六、API 方法分类

Zabbix API 方法非常多,核心几类:

类型 方法
用户 user.login user.get
主机 host.get host.create
监控项 item.get item.create
模板 template.get
触发器 trigger.get
告警 event.get
历史数据 history.get

官方 API 文档: