调用zabbix API获取主机
Posted python运维技术
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了调用zabbix API获取主机相关的知识,希望对你有一定的参考价值。
zabbix 作为企业级的系统和网络监控方案,对于中小型公司来说基本可以很好的满足对机器的监控需求,因为其部署方便,操作简单深受现在各个互联网公司喜爱,所以现在基本互联网公司监控用zabbix的非常多,当你安装好zabbix服务端 后,如果启动自动注册功能,在所有客户机安装客户端后会自动在zabbix平台上被监控到,但这里有个问题,如果你机器数量非常少,如果还能数的过来那基本没什么问题,但如果你机器上千台了,这个时候那些机器被监控中,那些没被监控,查起来就没那么方便了,所以日常运维中经常发现的问题就是某台机器故障了但没报警,经查发现这台机器zabbix客户端因为某种原因导致没有被服务端监控到,像这种问题怎么办呢?其实最简单的方案就是从zabbix里获取所有被监控的服务器列表,然后跟运维资产数据库去比对,如果数量一致,那说明监控没漏机器,如果比对不上,就把对不上的IP发出来再报个警就可以了,整体逻辑就是这样,我们今天用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获取主机的主要内容,如果未能解决你的问题,请参考以下文章