Zabbix监控系统PHP-API开发测试实录

简介: Zabbix监控系统PHP-API开发测试实录

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


相关文章
|
20天前
|
XML JSON API
ServiceStack:不仅仅是一个高性能Web API和微服务框架,更是一站式解决方案——深入解析其多协议支持及简便开发流程,带您体验前所未有的.NET开发效率革命
【10月更文挑战第9天】ServiceStack 是一个高性能的 Web API 和微服务框架,支持 JSON、XML、CSV 等多种数据格式。它简化了 .NET 应用的开发流程,提供了直观的 RESTful 服务构建方式。ServiceStack 支持高并发请求和复杂业务逻辑,安装简单,通过 NuGet 包管理器即可快速集成。示例代码展示了如何创建一个返回当前日期的简单服务,包括定义请求和响应 DTO、实现服务逻辑、配置路由和宿主。ServiceStack 还支持 WebSocket、SignalR 等实时通信协议,具备自动验证、自动过滤器等丰富功能,适合快速搭建高性能、可扩展的服务端应用。
80 3
|
23天前
|
设计模式 API 开发者
探索现代后端开发:微服务架构与API设计
【10月更文挑战第6天】探索现代后端开发:微服务架构与API设计
|
3天前
|
前端开发 关系型数据库 API
深入浅出后端开发——从零到一构建RESTful API
本文旨在为初学者提供一个关于后端开发的全面指南,特别是如何从零开始构建一个RESTful API。我们将探讨后端开发的基本概念、所需技术栈、以及通过实际案例展示如何设计和实现一个简单的RESTful API。无论你是完全的新手还是有一定编程基础的开发者,这篇文章都将为你提供实用的知识和技巧,帮助你在后端开发的道路上迈出坚实的一步。
|
4天前
|
缓存 负载均衡 安全
后端开发的艺术:构建高效、可扩展的API
在现代软件开发中,后端开发扮演着至关重要的角色。它不仅负责处理数据存储、业务逻辑和安全性,还需要提供高效、可扩展的API供前端和其他服务使用。本文将深入探讨后端开发的关键概念和技术,帮助读者了解如何构建高效、可扩展的API,并提供一些实用的建议和最佳实践。
|
4天前
|
缓存 负载均衡 测试技术
‌API开发的基础概念和作用‌
API(Application Programming Interface)是一组定义了软件组件之间交互规则的接口。它提供了一种标准化的方式,让不同的软件组件之间可以进行通信和交互。
|
4天前
|
缓存 API 网络架构
掌握现代API开发:GraphQL vs REST
【10月更文挑战第24天】本文深入探讨了现代API开发中两种主流技术——GraphQL和REST的设计理念、技术特点及实际开发中的对比分析。GraphQL通过声明式数据请求和强类型系统提供更高的灵活性和性能,而REST则以其无状态特性和成熟的生态系统见长。文章还讨论了两者在客户端-服务器交互、安全性和工具支持方面的优劣,帮助开发者根据项目需求做出明智选择。
|
11天前
|
Java 大数据 API
别死脑筋,赶紧学起来!Java之Steam() API 常用方法使用,让开发简单起来!
分享Java Stream API的常用方法,让开发更简单。涵盖filter、map、sorted等操作,提高代码效率与可读性。关注公众号,了解更多技术内容。
|
8天前
|
存储 XML API
探索后端开发中的RESTful API设计哲学
【10月更文挑战第21天】在数字化时代,后端开发是构建强大、可靠和可扩展应用程序的基石。本文将深入探讨RESTful API的设计原则,并展示如何通过这些原则来提升API的质量和性能。我们将从基础概念出发,逐步深入到实际案例分析,揭示高效API设计的秘诀。无论你是初学者还是有经验的开发者,这篇文章都将为你提供宝贵的见解和实用的技巧,帮助你在后端开发的道路上更进一步。
|
15天前
|
人工智能 监控 测试技术
云应用开发平台测试
云应用开发平台测试
32 2
|
18天前
|
缓存 监控 前端开发
利用GraphQL提升API开发效率
【10月更文挑战第10天】本文介绍了GraphQL的核心概念、优势及其实现步骤,探讨了其在现代开发中的应用,包括动态数据需求、单页应用和微服务架构。通过缓存策略、批处理、安全性和监控等实战技巧,提升API开发效率和用户体验。

推荐镜像

更多