Zabbix API允许你以编程方式检索和修改Zabbix的配置,并提供对历史数据的访问;同时,它基于Web的API,使用JSON-RPC 2.0协议,客户端和API之间的请求和响应使用JSON格式进行编码。
执行请求完成了前端的安装配置后,向 api_jsonrpc.php 位于前端目录中的文件发送HTTP POST请求,使用远程HTTP请求来调用API。
例如,Zabbix前端安装在 http://test.com/zabbix, 方法如下面:
http://test.com/zabbix/api_jsonrpc.php HTTP/1.1
Content-Type: application/json-rpc
{"jsonrpc":"2.0","method":"apiinfo.version","id":1,"auth":null,"params":{}}
其中,请求的 Content-Type 头部必须设置为以下值之一: application/json-rpc, application/json 或 application/jsonrequest。
封装函数的类中,使用 u s e r 、 user、 user、password、$url次数较多,且为了方便和重复使用,此处将常用的三个参数作为常量配置。
//参数配置;
$user = 'Admin';//用户名
$password = 'poleung****';//登录密码
$url = 'http://test.com/zabbix/api_jsonrpc.php';//服务器地址
Curl跨域爬取
/*
* 爬取Zabbix
* $url,服务器地址;
* $header,文件头;
* $data,数据,array();
*/
function getZabbix($url, $data)
{
$header = array("Content-type: application/json-rpc");
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
$response = curl_exec($ch);
curl_close($ch);
return json_decode($response);
}
验证获取token
在访问Zabbix中的任何数据之前,你需要登录并获取身份验证令牌。这可以使用该 user.login 方法完成。
/*
* 获取token
* 爬取Zabbix
* $url,服务器地址
* $header,文件头
* $user,用户名
* $password,登录密码
*/
function getToken($user, $password, $url)
{
$token = array(
'jsonrpc' => '2.0',
'method' => 'user.login',
'params' => array(
'user' => $user,
'password' => $password,
),
'id' => 1,
'auth'=> null
);
$data = json_encode($token);
$result = getZabbix($url, $data);
return $result->result;
}
jsonrpc - API使用的JSON-RPC协议的版本; Zabbix API实现的JSON-RPC版本是2.0; method - 被调用的API方法名; params - 将被传递给API方法的参数; id - 请求的任意标识符; auth -用户认证令牌; 因为我们还没有一个,它的设置null。
//获取$token
$token = getToken($user, $password, $url);
获取主机列表
// 获取主机信息列表
function get_hostid($token, $url)
{
$gethostid = array(
'jsonrpc' => '2.0',
'method' => 'host.get',
"params" => array(
"output" => ["name"],
// "groupids" => $group_id,
),
"auth" => $token,
"id" => 1
);
$data = json_encode($gethostid);
$result = getZabbix($url, $data);
$hostinfo = $result->result;
if (empty($hostinfo)) {
$hostid = '';
} else {
$hostid = array($hostinfo);
}
return json_encode($hostid);
}
项目信息
/*
* 获取项目信息
* 获取指定主机,切监控项名称包含 “System uptime” 的监控项,包括触发器
*/
function get_item($token, $url)
{
$getgroupid = array(
"jsonrpc" => "2.0",
"method" => "item.get",
"params" => array(
"output" => ["name"],
"sortfield" => ["itemid"],
"groupids" => "4", # 指定主机组id,数组或者单个id
"hostids" => "10084", # 指定主机id,数组或者单个id
"with_triggers" => True,
"tags" => array(
[
"tag" => "设备归属",
"value" => "",
"operator" => "4"
]
),
"selectItemDiscovery" => "extend",
"selectHosts" => "extend",
"selectTriggers" => "extend",
"selectTags" => "extend"
),
"auth" => $token,
"id" => 1
);
$data = json_encode($getgroupid);
$result = getZabbix($url, $data);
$groupinfo = $result->result;
if (empty($groupinfo)) {
$groupid = 'null';
} else {
$groupid = array($groupinfo);
}
return json_encode($groupid);
}
告警信息
/*
* 获取项目信息
*/
function get_item($token, $url)
{
$getgroupid = array(
"jsonrpc" => "2.0",
"method" => "item.get",
"params" => array(
"output" => ["name"],
"sortfield" => ["itemid"],
"groupids" => "4", # 指定主机组id,数组或者单个id
"hostids" => "10084", # 指定主机id,数组或者单个id
"with_triggers" => True,
"tags" => array(
[
"tag" => "设备归属",
"value" => "",
"operator" => "4"
]
),
"selectItemDiscovery" => "extend",
"selectHosts" => "extend",
"selectTriggers" => "extend",
"selectTags" => "extend"
),
"auth" => $token,
"id" => 1
);
$data = json_encode($getgroupid);
$result = getZabbix($url, $data);
$groupinfo = $result->result;
if (empty($groupinfo)) {
$groupid = 'null';
} else {
$groupid = array($groupinfo);
}
return json_encode($groupid);
}
封装API接口
$act = $_GET['act'];
switch ($act) {
//获取token
case "getToken";
$rows = getToken($user, $password, $url);
die($rows);
break;
//获取主机id
case "getHostid";
$rows = get_hostid($token, $url);
die($rows);
break;
//获取主机组名和id
case "getGroupid";
$rows = get_groupid($token, $url);
die($rows);
break;
//获取项目信息;
case "getItem";
@$rows = get_item($token, $url);
die($rows);
break;
//告警信息;
case "getAlert";
@$rows = get_alert($token, $url);
die($rows);
break;
//默认数据;
default:
echo "";
}
Zabbix API常用方法
- Item 监控项
item.create - creating new items item.create - 创建新监控项 item.delete - deleting items item.delete - 删除监控项 item.get - retrieving items item.get - 检索监控项 item.update - updating items item.update - 更新监控项
- host 主机
host.create - 创建新的主机 host.delete - 删除主机 host.get - 获取主机信息 host.massadd - 给主机添加相关对象 host.massremove - 删除主机相关对象 host.massupdate - 替换或移除主机相关对象 host.update - 更新主机
- Host group 主机组
hostgroup.create - 创建新的主机组 hostgroup.delete - 删除主机组 hostgroup.get - 获取主机组 hostgroup.massadd - 给主机组添加相关的对象 hostgroup.massremove - 删除主机组相关对象 hostgroup.massupdate - 替换或删除主机组相关对象 hostgroup.update - 更新主机组
- History(历史)检索由Zabbix监控流程收集的历史值,以便于进行呈现或进一步处理。
history.get - 获取历史数据.
- Alert-告警
alert.get - 获取告警
@lockdata.cn