一、 Zabbix API认证实战
Zabbix Api
Zabbix具有丰富的Api功能
可通过Api添加主机组、主机、获取监控数据等
使用Python操作Zabbix Api
API使用帮助文档
(https://www.zabbix.com/documentation/3.0/manual/api)
登录认证说明zabbix_base.py
import json
from urllib.request import Request,urlopen
zabbix_url="http://192.168.67.132/zabbix/api_jsonrpc.php"
zabbix_header = {"Content-Type":"application/json"}
zabbix_user = "Admin"
zabbix_pass = "xxxxxx"
data = {
"jsonrpc":"2.0",
"method":"user.login",
"params":{
"user":zabbix_user,
"password":zabbix_pass
},
"id":0 #任意
}
data = json.dumps(data).encode('utf-8')
req = Request(zabbix_url, headers=zabbix_header, data=data)
#print(req) #
result = urlopen(req).read()
print(result) #获取到的Token值
登录结果说明
#{"jsonrpc":"2.0","result":"xxx","id":0}
#{"jsonrpc":"2.0","error":{"code":-32602,"message":"Invalid params.","data":"Login name or password is incorrect."},"id":0}
请求Zabbix进行封装
import json
from urllib.request import Request,urlopen
zabbix_url = "http://192.168.67.132/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)
# print(req) #
result = urlopen(req).read()
return json.loads(result)
zabbix_user = "Admin"
zabbix_pass = "xxxxxx"
data = {
"jsonrpc":"2.0",
"method":"user.login",
"params":{
"user":zabbix_user,
"password":zabbix_pass
},
"id":0
}
if __name__ == "__main__":
result = zabbix_api_common(data)
print(result["result"])
对Zabbix登录进行封装
import json
from urllib.request import Request,urlopen
zabbix_url = "http://192.168.67.132/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)
# print(req) #
result = urlopen(req).read()
return json.loads(result)
def get_token():
zabbix_user = "Admin"
zabbix_pass = "xxxxxx"
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()
print(result)
二、Zabbix Api获取主机信息
API参考手册:(https://www.zabbix.com/documentation/3.0/manual/api/reference/hostgroup/get)
Zabbix Api获取主机组zabbix_group.py
import zabbix_base
token = zabbix_base.get_token()
data = {
"jsonrpc": "2.0",
"method": "hostgroup.get",
"params": {
"output": "extend",
},
"auth": token,
"id": 0
}
result = zabbix_base.zabbix_api_common(data)
print(result)
只获取组ID+组名字
import zabbix_base
token = zabbix_base.get_token()
data = {
"jsonrpc": "2.0",
"method": "hostgroup.get",
"params": {
"output": ['name'],
},
"auth": token,
"id": 0
}
result = zabbix_base.zabbix_api_common(data)
print(result)
for i in result['result']:
print(i)
加入过滤,官方文档
data = {
"jsonrpc": "2.0",
"method": "hostgroup.get",
"params": {
"output": ['name'],
"filter": {
"name": [
"shijiange"
]
}
},
"auth": token,
"id": 0
查询主机组及主机信息zabbix_group.py
data = {
"jsonrpc": "2.0",
"method": "hostgroup.get",
"params": {
"output": ['name'],
"selectHosts": ["host"],
},
"auth": token,
"id": 0
}
三、Zabbix Api获取模板信息
Zabbix Api获取模板信息
import zabbix_base
token = zabbix_base.get_token()
data = {
"jsonrpc": "2.0",
"method": "template.get",
"params": {
"output": ["host"],
},
"auth": token,
"id": 1
}
result = zabbix_base.zabbix_api_common(data)
for i in result['result']:
print(i)
四、Zabbix Api创建监控主机
Api添加主机组
groupname = "shijiangeapigroup"
data={
"jsonrpc": "2.0",
"method": "hostgroup.create",
"params": {
"name": groupname
},
"auth": token,
"id": 1
}
Api添加主机,如果是Linux建议大家还是自动注册
hostname='zabbixapihost'
hostip = '1.1.1.1'
groupid = 24
templateid="10001"
data = {
"jsonrpc": "2.0",
"method": "host.create",
"params": {
"host": hostname,
"interfaces": [{
"type": 1,
"main": 1,
"useip": 1,
"ip": hostip,
"dns": "",
"port": "10050"
}],
"groups": [{
"groupid": groupid
}],
"templates": [{
"templateid": templateid
}],
},
"auth": token,
"id": 1
}
interfaces接口解析.png