????身为一个API调用工程师 / 脚本工程师,本次调用zabbix api提取zabbix内所有IP。基本思路是先完成认证,再执行调用,使用Python语言,一共2个脚本文件。 ????zabbix_base.py用于完成基本的认证。
import json
from urllib.request import Request,urlopen
zabbix_url = "http://XXX/zabbix/api_jsonrpc.php"
zabbix_header = {"Content-Type":"application/json"}
def zabbix_api_common(data):
data = json.dumps(data).encode('utf-8')
req = Request(zabbix_url, headers=zabbix_header, data=data)
result = urlopen(req).read()
return json.loads(result)
def get_token():
zabbix_user = "xxx"
zabbix_pass = "xxx"
data = {
"jsonrpc":"2.0",
"method":"user.login",
"params":{
"user":zabbix_user,
"password":zabbix_pass
},
"id":0
}
result = zabbix_api_common(data)
return (result["result"])
if __name__ == "__main__":
result = get_token()
????zabbix_ip.py需与zabbix_base.py脚本放在统一目录下,用于提取zabbix内所有设备IP,然后将结果写入文件。
import zabbix_base
token = zabbix_base.get_token()
data = {
"jsonrpc": "2.0",
"method": "host.get",
"params": {
"output": [
"host",
],
"selectInterfaces": [
"ip",
]
},
"auth": token,
"id": 0
}
result = zabbix_base.zabbix_api_common(data)
print(len(result["result"]))
with open('zabbix_ip.txt','a+') as ip_out:
for ip_number in range(len(result["result"])):
ip_out.write(result["result"][ip_number]['interfaces'][0]['ip'] + ' ' + result["result"][ip_number]['host'] + '\n')
ip_out.flush()
ip_out.close()
????执行脚本,下方结果中的5表示测试环境中有5台主机:
# python3 zabbix_ip.py
5
????查询执行结果:
# cat zabbix_ip.txt
127.0.0.1 Zabbix server
192.168.1.2 host_test2
192.168.1.3 host_test3
192.168.1.4 host_test4
192.168.1.5 host_test5
参考资料
[1] summer_zhou. Python调用Zabbix Api入门实战[EB/OL]. [2022年1月12日]. https://www.jianshu.com/p/c76f357b2973.
|