PHP通过Zabbix API获取服务器监控信息

开源监控系统Zabbix提供了丰富的API,供第三方系统调用。

基本步骤如下:

1、获取合法认证;连接对应Zabbix URL,并提供用户名和密码,HTTP方法为“POST”,HTTP头部类型为“application/json”

 1 public function zabbixJsonRequest($uri, $data) {
 2         try{$json_data = json_encode($data);
 3             $c = curl_init();
 4             curl_setopt($c, CURLOPT_URL, $uri);
 5             curl_setopt($c, CURLOPT_CUSTOMREQUEST, "POST");
 6             curl_setopt($c, CURLOPT_RETURNTRANSFER, true);
 7             curl_setopt($c, CURLOPT_POST, $json_data);
 8             curl_setopt($c, CURLOPT_POSTFIELDS, $json_data);
 9             curl_setopt($c, CURLOPT_HTTPHEADER, array(
10                     ‘Content-Type: application/json‘,
11                     ‘Content-Length: ‘ . strlen($json_data))
12             );
13             curl_setopt($c, CURLOPT_SSL_VERIFYPEER, false);
14             $result = curl_exec($c);
15
16             return json_decode($result, true);
17         }catch(Exception $e) {
18             CCLog::LogErr(‘ZabbixInfoLogic: zabbixJsonRequest Err ->‘ . $e->getMessage());
19             return array();
20         }
21     }
 1     /**
 2      * @Zabbix鉴权
 3      * @param  $uri Zabbix地址
 4      * @param  $username Zabbix用户名
 5      * @param  $password Zabbix密码
 6      * @return 权限
 7      */
 8     public function zabbixAuth($uri, $username, $password) {
 9         try{$data = array(
10             ‘jsonrpc‘ => "2.0",
11             ‘method‘ => "user.login",
12             ‘params‘ => array(
13                 ‘user‘ => $username,
14                 ‘password‘ => $password
15             ),
16             ‘id‘ => "1"
17         );
18             $response = $this->zabbixJsonRequest($uri, $data);
19             return $response[‘result‘];
20         }catch(Exception $e) {
21             CCLog::LogErr(‘ZabbixInfoLogic: zabbixAuth Err ->‘ . $e->getMessage());
22             return array();
23         }
24     }

2、调用API获取数据;取得认证后,根据需要POST封装好的data,格式为json,配置不同的方法获取需要的数据。方法列表可在官方网站(https://www.zabbix.com/documentation/3.0/manual/api/reference)查阅。以下实例根据主机IP地址获取主机ID

 1     /**
 2      * @根据IP获取hostid
 3      * @param  $uri Zabbix地址
 4      * @param  $authtoken 认证信息 可通过上述zabbixAuth方法获取
 5      * @param  $ip 主机IP地址
 6      * @return hostid 获取主机ID
 7      */
 8     public function zabbixGetHostIdByIp($uri, $authtoken,$ip) {
 9         try{$data = array(
10             ‘jsonrpc‘ => "2.0",
11             ‘method‘ => "host.get",
12             ‘params‘ => array(
13                 "output"=>[ "host" ],
14                 "filter" => array(
15                     "ip" => $ip,
16
17                 )
18             ),
19             ‘id‘ => "1",
20             ‘auth‘ => $authtoken
21         );
22             $response = $this->zabbixJsonRequest($uri, $data);
23             return $response[‘result‘][0][‘hostid‘];
24         }catch(Exception $e) {
25             CCLog::LogErr(‘ZabbixInfoLogic: zabbixGetHostIdByIp Err ->‘ . $e->getMessage());
26             return array();
27         }
28     }
时间: 2024-09-28 15:59:46

PHP通过Zabbix API获取服务器监控信息的相关文章

PHP通过ZABBIX API获取主机信息 VS 直接从数据库获取主机信息

最近项目需要获取linux主机的一些信息,如CPU使用率,内存使用情况等.由于我们本身就装了zabbix系统,所以我只用知道如何获取信息即可,总结有两种方法可以获取. 一.通过ZABBIX API获取主机信息 这种方式获取的主机信息相对是比较新的(每分钟更新一次).但因为每次都需要请求接口,所以相对比较慢,如果并发查询的主机数量比较多,就会非常慢. 开源监控系统ZABBIX的官方文档提供了丰富的API.我这里http请求是用的Guzzle 6.当然你也可以用php内置的curl函数自己写一个ht

借助Sigar API获取CPU相关信息

Sigar(全称System Information Gatherer And Reporter,即系统信息收集报表器),它提供了一个开源的跨平台的收集计算机硬件和操作系统信息的API(该API底层接口用C语言编写),本文将演示如何借助Sigar API获取CPU相关信息: package com.ghj.packageoftest; import org.hyperic.sigar.Cpu; import org.hyperic.sigar.CpuInfo; import org.hyperi

reuqest获取服务器一些信息方法集合 java

request.getServletContext().getRealPath("/")  获取项目所在服务器的全路径,如:D:\Program Files\apache-tomcat-7.0.25\webapps\TestSytem\ request.getServletPath()    获取客户端请求的路径名,如:/object/delObject request.getServerName()    获取服务器地址,如:localhost request.getServerPo

利用Zabbix API 获取各个分组下的服务器列表以及详细信息

现在越来越多的公司选择使用开源软件Zabbix来做服务器业务监控,其高逼格的用户管理是个亮点,所以可以通过调用它的接口将权限管理应用到很多地方,比如说堡垒机权限.以下是用python简单写了个小脚本,通过定义分组名便可以得到分组下的服务器信息. #coding=utf-8 __author__ = 'Perling' from urllib import urlencode import urllib2 import json def post(post_data):     api_url =

zabbix API 获取CPU 信息

curl -i -X POST -H 'Content-Type: application/json' -d '{"jsonrpc":"2.0","method":"user.login","params":{"user":"william","password":"[email protected]#"},"auth

python 调用zabbix api实现查询主机信息,输出所有主机ip

之前发现搜索出来的主机调用zabbix api信息都不是那么明确,后来通过zabbix官方文档,查到想要的api信息,随后写一篇自己这次项目中用到的api. #!/usr/bin/env python #coding:utf8 import requests import json headers = {'Content-Type': 'application/json-rpc'} server_ip = '10.37.149.109' url = 'http://%s/zabbix/api_j

使用zabbix API估算服务器磁盘空间可用天数

代码github位置. 主要功能:获取zabbix某个分组下的所有机器,计算这些机器的磁盘剩余空间按照"自然"增长还可以使用多少天. 主要流程: 获取某个group下所有机器.     def host_get_by_groupid(self,groupid):         data = json.dumps(                 {                     "jsonrpc": "2.0",           

.Net Web Api——获取客户端浏览器信息

第一次接触到web api,发现这个东西是REST风格的:---- 微软的web api是在vs2012上的mvc4项目绑定发行的,它提出的web api是完全基于RESTful标准的,完全不同于之前的(同是SOAP协议的)wcf和webService,它是简单,代码可读性强的,上手快的,如果要拿它和web服务相比,我会说,它的接口更标准,更清晰,没有混乱的方法名称,有的只有几种标准的请求,如get,post,put,delete等,它们分别对应的几个操作,下面讲一下: GET:生到数据列表(默

PHP 获取系统信息,PHP 获取服务器详细信息

获取系统类型及版本号:    php_uname()                                   (例:Windows NT COMPUTER 5.1 build 2600)只获取系统类型:          php_uname('s')                                (或:PHP_OS,例:Windows NT)只获取系统版本号:        php_uname('r')                                (