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


相关文章
|
9天前
|
敏捷开发 前端开发 安全
【测试开发】概念篇 · 测试相关基础概念 · 常见开发模型 · 常见测试模型
【测试开发】概念篇 · 测试相关基础概念 · 常见开发模型 · 常见测试模型
19 0
【测试开发】概念篇 · 测试相关基础概念 · 常见开发模型 · 常见测试模型
|
3天前
|
JSON 测试技术 API
pyhttptest 与 RESTful API 测试的完全指南
现在,无论是开发还是使用服务,我们每个人都面临着 REST API 的挑战。同时,我们正处于微服务的流行时代,我们将业务逻辑拆分为多个独立的小服务。这些服务大多遵循 RESTful 原则,并使用 JSON 格式进行通信,因为其简单性使其成为最广泛使用的格式。
|
4天前
|
缓存 测试技术 API
构建高效可扩展的RESTful API:后端开发的实践指南
【5月更文挑战第21天】 在现代Web开发领域,构建一个高效、可扩展且易于维护的RESTful API是至关重要的任务。本文将深入探讨如何利用最佳实践和先进技术栈来设计和实现一个健壮的后端服务。我们将讨论API设计原则、数据库优化策略、缓存机制、负载均衡以及容器化部署等方面,旨在为后端开发者提供一套全面的指导方案。
|
7天前
|
内存技术
(3)(3.4) 使用测试版和开发版
(3)(3.4) 使用测试版和开发版
11 2
|
7天前
|
运维 监控 关系型数据库
【Zabbix 6(1),Linux运维组件化开发教程
【Zabbix 6(1),Linux运维组件化开发教程
|
8天前
|
SQL Oracle 关系型数据库
实时计算 Flink版产品使用合集之是否可以使用 DataStream API 或 Flink SQL 开发任务
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
18 0
|
8天前
|
安全 测试技术 API
API 渗透测试 4 个关键步骤
【5月更文挑战第17天】API渗透测试的四个关键步骤:信息收集、漏洞发现、漏洞利用和报告撰写。
|
8天前
|
缓存 负载均衡 安全
探索API接口开发(定制与开发接口)
在当今数字化、互联互通的时代,API(应用程序编程接口)已经成为连接不同软件、服务和应用的关键桥梁。API接口开发,作为软件架构和系统设计的重要组成部分,不仅影响着数据交换的效率,更决定了整个系统的灵活性和可扩展性。本文将深入探讨API接口开发的各个方面,包括其重要性、开发流程、最佳实践以及面临的挑战。
|
10天前
|
存储 缓存 API
构建高效的RESTful API:后端开发的实践指南
【5月更文挑战第14天】 在现代Web开发领域,构建可靠且易于维护的后端服务至关重要。本文将详细探讨如何通过最佳实践和常用技术栈来构建一个高效的RESTful API。我们将涵盖API设计原则、数据库交互优化、缓存策略、安全性考虑以及性能监控等关键方面。通过本文的指导,读者将能够理解并实现一个符合工业标准且响应迅速的后端系统。
|
10天前
|
安全 前端开发 PHP
采用PHP开发的医院安全(不良)事件系统源码 医院不良事件有哪些?又该怎样分类呢?也许这篇文章能给予你答案。
医疗安全不容忽视! 医疗不良事件有哪些?又该怎样分类呢?也许这篇文章能给予你答案。
26 1
采用PHP开发的医院安全(不良)事件系统源码 医院不良事件有哪些?又该怎样分类呢?也许这篇文章能给予你答案。

推荐镜像

更多