项目(一)设备监控:通过PHP调用zabbix的api接口获取主机信息(内存、磁盘、cpu、ip地址、状态)以及报警信息

本文介绍了一个项目,通过PHP调用Zabbix API获取主机内存、磁盘、CPU、IP地址和状态等监控信息,以及报警信息。详细讲解了Zabbix的表结构,包括host、item、history和alter表,并展示了如何进行PHP认证和数据获取。项目中,PHP与JS(jQuery)交互,将数据展示在网页上。
摘要由CSDN通过智能技术生成

项目背景介绍:zabbix已经在服务器搭建好了,只是需要远程调用zabbix的监控数据。通过php调用访问配置zabbix的服务器,获取监控数据,PHP在于Js交互(jQuery框架),将监控的数据显示在网页之上,网页已经写好,只需要修改部分Js文件以及编写php文件即可。获取要监控的设备是通过配置文件的方式,配置文件中写的是要监控的主机名

有两种方式获取监控数据,第一种是通过直接访问zabbix数据库的方式获取指定数据,第二种就是通过zabbix的自带的api接口直接获取目标数据。前者访问速度快,但是zabbix的表结构较为复杂,直接访问数据库需要对数据库的表结构有较为清楚的认识;后者访问速度慢,但是有现成的接口,不需要除了复杂的表结构关系,省时省力。

一、zabbix表结构

host表

  • hostid:主机的 id

  • proxy_hostid:代理主机的 id

  • host:这里代表主机的 ip

  • status:代表主机的状态:数据库存储有三个值:0 代表被监控,1 代表未监控,3 代表该主机是模板主机 (通过 zabbix 的 api 的 host.get 只能获取到状态为 0 的主机,通过 template.get 能获取到状态为 3 的主机)

  • name:主机的别名 / 昵称

  • flags:这个主机是否启用:0 代表启用,1 代表未启用

  • templateid:模板 id(有点像自关联)

  • description:对主机的描述

item表

  • itemid:监控项的 id

  • type:监控项的类型:常见的有 agent,SNMP,agent (active) 等

  • hostid:监控项关联的主机 id

  • name:监控项的名称

  • key_ : 监控项 item 的 key 值,(数据库中存储的这个 key_的内容大概就是监控表达式比如:system.swap.size [,free] 这种

  • delay:配置 item 时候配置的 “Update Interval”,开发中没用到,不清楚。

  • history:监控项数据在历史表中保留的时间天数

  • trends:监控项数据在 trends 表中保留的天数

  • status:监控项的状态:0 代表能够使用,1 代表不能够使用

  • value_type:重点中的重点:有五个值:0,1,2,3,4,代表监控项不同的返回类型,这个值决定了监控项的数据会存储在哪张历史表中
    0 - numeric float;
    1 - character;
    2 - log;
    3 - numeric unsigned;
    4 - text.

  • units:监控项数据的单位

history表

  • itemid:监控项的 id

  • clock:时间戳,监控项采集数据的触发时间

  • value:监控项采集数据的值

  • ns:纳秒

  • 注意:历史表与监控表的关系:使用history.get来获取历史数据,需要传入的参数不止 一个监控项的id,还需传入监控项的value_type,因为如果不传入value_type,history.get方法默认取 history这个表的数据,如果itemid对应不上,就取不到数据。我们要获取的值,内存和磁盘都是numeric unsigned也就说 value_type=3cpu是numeric float,value_type=0

alter表

  • alertid:报警的id
  • alerttype:报警的类型
  • clock:报警触发的时间
  • message:报警的信息

二、php调用zabbix的api

zabbix的官方文档:
zabbix接口文档

(一)php获取zabbix的认证

php利用自身的开源框架curl,发送http请求,获取zabbix的认证auth

$url = 'http://xxx/zabbix/api_jsonrpc.php';//xxx是配置zabbix的ip地址
$header = array("Content-type: application/json-rpc");

// get token 
function Curl($url, $header, $info)
{
   
    $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, $info);
    $response = curl_exec($ch);
    curl_close($ch);
    return json_decode($response);
}

function get_token($url, $header)
{
   
    $user = 'xxx';//配置的zabbix的用户名
    $password = 'xxx';//配置的zabbix的密码
    $logininfo = array(
        'jsonrpc' => '2.0',
        'method' => 'user.login',//调用的zabbix的api,用于远程登录
        'params' => array(
            'user' => $user,
            'password' => 
  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
要使用Python调用Zabbix API批量查询主机信息,您需要进行以下步骤: 1. 安装 `zabbix-api` 模块:您可以使用 `pip` 命令安装该模块,例如:`pip install zabbix-api` 2. 导入必要的库和模块: ```python from pyzabbix import ZabbixAPI import json ``` 3. 创建 `ZabbixAPI` 对象并登录: ```python zabbix_server = "http://zabbix.example.com" zabbix_user = "username" zabbix_password = "password" zapi = ZabbixAPI(url=zabbix_server, user=zabbix_user, password=zabbix_password) zapi.login() ``` 4. 使用 `host.get` 方法批量查询主机信息: ```python hosts = zapi.host.get(output=['hostid', 'host', 'name', 'status', 'ip']) ``` 此时,变量 `hosts` 将包含所有主机信息。在这个示例中,我们查询了每个主机的 `hostid`、`host`、`name`、`status` 和 `ip` 信息。 5. 处理查询结果: ```python for host in hosts: print("Host ID:", host['hostid']) print("Host Name:", host['name']) print("Host Status:", host['status']) print("Host IP:", host['ip']) print("------------------------") ``` 以上代码将遍历每个主机,并打印出其 ID、名称、状态和 IP 地址。 完整代码示例: ```python from pyzabbix import ZabbixAPI import json zabbix_server = "http://zabbix.example.com" zabbix_user = "username" zabbix_password = "password" zapi = ZabbixAPI(url=zabbix_server, user=zabbix_user, password=zabbix_password) zapi.login() hosts = zapi.host.get(output=['hostid', 'host', 'name', 'status', 'ip']) for host in hosts: print("Host ID:", host['hostid']) print("Host Name:", host['name']) print("Host Status:", host['status']) print("Host IP:", host['ip']) print("------------------------") ``` 注意:在实际使用中,您可能需要根据具体情况修改查询的参数和返回结果的处理方式。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员世杰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值