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的文档对事件确认的参数描述没有这么清晰
这里的目的是确认事件还可以添加自定义的消息,却出现一个问题还没有解决,就是调用一次接口,zabbix上面会出现两条记录,如果单单是确认事件就只有一条记录,但只要加上自定义消息就会出现两条,纳闷!!!
本作品采用《CC 协议》,转载必须注明作者和本文链接