当前位置: 首页 > 编程笔记 >

详解如何调用zabbix API获取主机

张亦
2023-03-14
本文向大家介绍详解如何调用zabbix API获取主机,包括了详解如何调用zabbix API获取主机的使用技巧和注意事项,需要的朋友参考一下

前言

zabbix 作为企业级的系统和网络监控方案,对于中小型公司来说基本可以很好的满足对机器的监控需求,因为其部署方便,操作简单深受现在各个互联网公司喜爱,所以现在基本的互联网公司监控用zabbix的非常多,当你安装好zabbix服务端 后,如果启动自动注册功能,在所有客户机安装后会自动在zabbix平台上被监控到,但这里有个问题,如果你机器数量非常少,如果还能数的过来那基本没什么问题,但如果你机器上千台了,这个时候那些机器被监控中,那些没被监控,查起来就没那么方便了,所以日常运维中经常发现的问题就是某台机器故障了但没报警,经查发现这台机器zabbix客户端因为某种原因导致没有被服务端监控到,像这种问题怎么办呢?其实最简单的方案就是从zabbix里获取所有被监控的服务器列表,然后跟运维资产数据库去比对,如果数量一致,那说明监控没漏机器,如果比对不上,就把对不上的IP发出来再报个警就可以了,整体逻辑就是这样。

Zabbix API是在1.8版本中开始引进并且已经被广泛应用。所有的Zabbix移动客户端都是基于API,甚至原生的WEB前端部分也是建立在它之上。Zabbix API 中间件使得架构更加模块化也避免直接对数据库进行操作。它允许你通过JSON RPC协议来创建、更新和获取Zabbix对象并且做任何你喜欢的操作【当然前提是你拥有认证账户】。

Zabbix API提供两项主要功能:

  • 远程管理Zabbix配置
  • 远程检索配置和历史数据

我们今天用zabbix api获取被监控的所有机器列表

代码如下

#!/usr/bin/evn python
 
import requests
import json
 
ZABIX_ROOT = 'http://10.0.1.29/zabbix'
url = ZABIX_ROOT + '/api_jsonrpc.php'
 
# user.login
payload = {
 "jsonrpc" : "2.0",
 "method" : "user.login",
 "params": {
 'user': 'Admin',
 'password':'',
 },
 "auth" : None,
 "id" : 0,
}
headers = {
 'content-type': 'application/json',
}
req = requests.post(url, json=payload, headers=headers)
auth = req.json()
 
# host.get
payload = {
 "jsonrpc" : "2.0",
 "method" : "host.get",
 "params": {
 'output': [
 'hostid',
 'name'],
 },
 "auth" : auth['result'],
 "id" : 2,
}
res2 = requests.post(url, data=json.dumps(payload), headers=headers)
res2 = res2.json()
 
for host in res2['result']:
 with open('host.txt', 'a+') as f:
 f.write(host['name'] + '\n)

脚本一共分二部分,第一部分是用户登录,登录后然后获取主机列表,最后写到一个文件里去,所以脚本运行的结果是生成一个所有被监控的IP列表,通过这个列表你就可以去跟你的资产库信息去对比了,还有这个脚本用的requests,所以看起来要清爽很多,代码比较简单,就是二个post就不做太多解释了。

总结

以上就是关于调用zabbix API获取主机的全部内容了,喜欢的小伙伴可以在此基础上修改成合适自己业务的脚本,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。

 类似资料:
  • 本文向大家介绍JAVA如何调用wsdl过程详解,包括了JAVA如何调用wsdl过程详解的使用技巧和注意事项,需要的朋友参考一下 前提:① 已经提供了一个wsdl接口② 该接口能正常调用 总体分为两种方式: 1.使用cxf的wsdl2java工具生成本地类(使用方式就是本地类的使用)。 2.调用远程的web service方法:创建client来远程调用接口。 因为第二种方式,需要熟悉wsdl,没深

  • 本文向大家介绍StackTraceElement获取方法调用栈信息实例详解,包括了StackTraceElement获取方法调用栈信息实例详解的使用技巧和注意事项,需要的朋友参考一下 本文研究的主要是StackTraceElement获取方法调用栈信息的相关内容,具体介绍和实例如下。 一、什么是StackTrace StackTrace(堆栈轨迹)存放的就是方法调用栈的信息,异常处理中常用的pri

  • 问题内容: 有没有办法从mysql-database获取主键字段的名称?例如: 我有一张这样的桌子: 其中字段ID是主键(它具有自动递增功能,但我不能使用它)。如何在php中检索字段名称“ id”? 问题答案: 一种更好的方法是使用,因为您并不总是可以访问information_schema。以下作品: Column_name将包含主键的名称。

  • 本文向大家介绍利用Golang如何调用Linux命令详解,包括了利用Golang如何调用Linux命令详解的使用技巧和注意事项,需要的朋友参考一下 本文介绍的是Golang使用 os/exec 来执行 Linux 命令,分享出来供大家参考学习,下面来看看详细的介绍: 下面是一个简单的示例: 或者创建一个缓冲读取器按行读取: 输出结果: 在写这句 if err.Error() != "EOF" 时,

  • 本文向大家介绍学习SpringMVC——如何获取请求参数详解,包括了学习SpringMVC——如何获取请求参数详解的使用技巧和注意事项,需要的朋友参考一下 @RequestParam,你一定见过;@PathVariable,你肯定也知道;@QueryParam,你怎么会不晓得?!还有你熟悉的他(@CookieValue)!她(@ModelAndView)!它(@ModelAttribute)!没错

  • 我在做一个数独游戏,我有“cell”类型的9x9对象(类扩展了JTextField),我想防止在用户不符合游戏规则的情况下关注其他JTextField对象——他的输入(1-9)不会在同一行或同一个“块”。要做到这一点,我需要知道他关注的具体对象。 我正在考虑这样做的一种方法是使用DocumentFilter。我已经将输入过滤为数字和1长度,但我不知道如何获取他关注的“单元格”对象,我很确定Docu