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


相关文章
|
1月前
|
缓存 安全 测试技术
构建高效的RESTful API:后端开发的实践指南
【2月更文挑战第17天】在数字化转型的浪潮中,RESTful API已成为连接不同软件组件、实现数据交互的核心桥梁。本文将深入探讨如何构建一个高效、可扩展且安全的RESTful API,涉及设计原则、开发流程以及性能优化等关键方面。我们将透过实际案例,展示如何在保证简洁性和灵活性的同时,满足日益增长的业务需求和技术挑战。
|
1月前
|
API
uni-app 146朋友圈列表api开发
uni-app 146朋友圈列表api开发
18 0
|
3天前
|
API 开发者
免费邮箱API发送邮件测试调试的方法和步骤
本文介绍了使用免费邮箱API如aoksend、Mailgun、SMTP2GO发送邮件的测试调试步骤:选择合适的API,获取访问密钥,配置邮件参数,编写测试代码,调试和测试,查看发送日志,以及优化改进邮件发送功能,确保其稳定运行。
|
3天前
|
测试技术 API 网络架构
Python的api自动化测试 编写测试用例
【4月更文挑战第18天】使用Python进行API自动化测试,可以结合`requests`库发送HTTP请求和`unittest`(或`pytest`)编写测试用例。以下示例: 1. 安装必要库:`pip install requests unittest` 2. 创建`test_api.py`,导入库,定义基础URL。 3. 创建继承自`unittest.TestCase`的测试类,包含`setUp`和`tearDown`方法。 4. 编写测试用例,如`test_get_users`,检查响应状态码和内容。 5. 运行测试:`python -m unittest test_api.py`
12 2
|
3天前
|
JSON 测试技术 API
Python的Api自动化测试使用HTTP客户端库发送请求
【4月更文挑战第18天】在Python中进行HTTP请求和API自动化测试有多个库可选:1) `requests`是最流行的选择,支持多种请求方法和内置JSON解析;2) `http.client`是标准库的一部分,适合需要低级别控制的用户;3) `urllib`提供URL操作,适用于复杂请求;4) `httpx`拥有类似`requests`的API,提供现代特性和异步支持。根据具体需求选择,如多数情况`requests`已足够。
9 3
|
4天前
|
人工智能 机器人 API
【Python+微信】【企业微信开发入坑指北】3. 如何利用企业微信API给微信群推送消息
【Python+微信】【企业微信开发入坑指北】3. 如何利用企业微信API给微信群推送消息
7 0
|
4天前
|
缓存 人工智能 API
【Python+微信】【企业微信开发入坑指北】2. 如何利用企业微信API主动给用户发应用消息
【Python+微信】【企业微信开发入坑指北】2. 如何利用企业微信API主动给用户发应用消息
8 0
|
7天前
|
Java Go PHP
开发语言漫谈-PHP
PHP即“Hypertext Preprocessor”
|
9天前
|
安全 编译器 PHP
PHP 8.1版本发布:引领Web开发新潮流
PHP编程语言一直是Web开发的主力军,而最新发布的PHP 8.1版本则为开发者们带来了更多创新和便利。本文将介绍PHP 8.1版本的主要特性,包括更快的性能、新的语言功能和增强的安全性,以及如何利用这些功能来提升Web应用程序的质量和效率。
|
12天前
|
PHP
web简易开发——通过php与HTML+css+mysql实现用户的登录,注册
web简易开发——通过php与HTML+css+mysql实现用户的登录,注册

热门文章

最新文章

推荐镜像

更多