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 数据]
步骤:
- 登录获取 token
- 调用 API
- 使用 token 认证
- 获取返回 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 文档: