zabbix 操作 API 用例小记

有时候使用zabbix需要另外调用zabbix的接口执行一些操作,这里记下使用的小demo

  • 公用 helper 文件
<?php

namespace tSDK\application\helpers;
use tSDK\application\exceptions\InfoException;

class ZabbixHelper
{
    public static $method = '';
    protected static $access_token = '';
    public static $query = '';
    protected static $host = '';

    protected static function connect($query){
        $http = curl_init(self::$host);
        curl_setopt($http, CURLOPT_CUSTOMREQUEST, 'POST');
        curl_setopt($http, CURLOPT_POSTFIELDS, $query);
        curl_setopt($http, CURLOPT_RETURNTRANSFER, TRUE);
        curl_setopt($http, CURLOPT_SSL_VERIFYPEER, TRUE);
        curl_setopt($http, CURLOPT_SSL_VERIFYHOST, TRUE);
        curl_setopt($http, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
        $response = curl_exec($http);
        curl_close($http);
        return json_decode($response, true);
    }

    public static function call(){
        $data['jsonrpc'] = '2.0';
        $data['method'] = self::$method;
        $data['params'] = self::$query;
        if (!$data) {
            throw new InfoException('缺少method参数');
        }
        if (!$data['params']) {
            throw new InfoException('缺少params参数');
        }
        self::$query = '';
        self::$method = '';
        if(!empty(self::$access_token)) $data['auth'] = self::$access_token;
        if (!self::$access_token) {
            self::login();
        }
        $data['id'] = rand(1,100);
        $data['auth'] = self::$access_token;
        $data = json_encode($data, JSON_PRETTY_PRINT);
        return self::connect($data);
    }

    protected static function login()
    {
        $zabbixConfig = ENV_DATA['zabbix_config'];
        if (!$zabbixConfig['host'] || !$zabbixConfig['name'] || !$zabbixConfig['pwd']) {
            throw new InfoException('缺少zabbix配置');
        }
        self::$host = $zabbixConfig['host'] . '/api_jsonrpc.php';
        $data = [
            'jsonrpc' => '2.0',
            'method' => 'user.login',
            'params' => ['user' => $zabbixConfig['name'], 'password' => $zabbixConfig['pwd']],
            'id' => rand(1, 100),
        ];
        $data = json_encode($data, JSON_PRETTY_PRINT);
        $result = self::connect($data);
        if ($result['result']) {
            self::$access_token = $result['result'];
        } else {
            throw new InfoException('zabbix登录失败');
        }
    }

}

当然,如果需要引用的话 namespace tSDK\application\helpers;use tSDK\application\exceptions\InfoException; 以及 类里的InfoException需要去掉,只需引用类即可,ENV_DATA为设置的全局数据,存储zabbix账号,可根据自己需要设置

  • 接口调用 demo
public function actionTest()
    {
        ZabbixHelper::$method = 'event.acknowledge';
        ZabbixHelper::$query = ['eventids' => [123456], 'message' => 'hello world', 'action' => 14, 'severity' => 1];
        $resutl = ZabbixHelper::call();

        print_r($resutl);exit;
    }

这里使用记得先引用 ZabbixHelper,这个测试 demo 的功能是事件确认,zabbix4.0文档 https://www.zabbix.com/documentation/4.0/z... ,zabbix3.4的文档对事件确认的参数描述没有这么清晰
file
这里的目的是确认事件还可以添加自定义的消息,却出现一个问题还没有解决,就是调用一次接口,zabbix上面会出现两条记录,如果单单是确认事件就只有一条记录,但只要加上自定义消息就会出现两条,纳闷!!!

本作品采用《CC 协议》,转载必须注明作者和本文链接
雪花飘
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!