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常用方法
1.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 - 更新监控项
2.host 主机
host.create - 创建新的主机
host.delete - 删除主机
host.get - 获取主机信息
host.massadd - 给主机添加相关对象
host.massremove - 删除主机相关对象
host.massupdate - 替换或移除主机相关对象
host.update - 更新主机
3.Host group 主机组
hostgroup.create - 创建新的主机组
hostgroup.delete - 删除主机组
hostgroup.get - 获取主机组
hostgroup.massadd - 给主机组添加相关的对象
hostgroup.massremove - 删除主机组相关对象
hostgroup.massupdate - 替换或删除主机组相关对象
hostgroup.update - 更新主机组
4.History(历史)检索由Zabbix监控流程收集的历史值,以便于进行呈现或进一步处理。
history.get - 获取历史数据.
5.Alert-告警
alert.get - 获取告警
@lockdata.cn