【www.bbyears.com--python】
Zabbix api可以很方便的管理监控项,功能强大,非常适合二次开发。本文主要实现的功能是django资产管理的更新能够同步到Zabbix监控平台,统一平台功能,保证数据一致性。
Zabbix API
Zabbix API中主要用到host.create,host.delete,host.update,host.get和hostinterface.update方法。下面已create为例做下简单使用说明。
代码如下 {"jsonrpc": "2.0",
"method": "host.create",
"params": {
"host": "Linux server",
"interfaces": [
{
"type": 1,
"main": 1,
"useip": 1,
"ip": "192.168.3.1",
"dns": "",
"port": "10050"
}
],
"groups": [
{
"groupid": "50"
}
],
"templates": [
{
"templateid": "20045"
}
],
"inventory": {
"macaddress_a": "01234",
"macaddress_b": "56768"
}
},
"auth": "038e1d7b1735c6a5436ee9eae095879e",
"id": 1
}
参数
jsonrpc:默认2.0,不用修改
method:指定api的方法
params:请求的参数。其中host是主机名称,即zabbix页面上显示的名字。interfaces是主机的真实信息,包括类型、ip地址和端口等。groups主机添加时加入的组,这个必须指定。templates表示添加主机时使用的zabbix模板id,可选,建议添加常用模板id号 。inventory资产管理,这个我没有添加。
auth:登陆后的sessionid号
id:操作的id号,这个具体什么作用没有深入研究。请求id是什么号,返回时显示什么号。
创建成功后返回内容如下:
代码如下 {"jsonrpc": "2.0",
"result": {
"hostids": [
"107819"
]
},
"id": 1
}
python调用
了解zabbix的api后,用python实现还是比较简单,输入参数,发起请求,返回结果。
用户登陆退出代码类似如下:
代码如下 def login():url = settings.ZABBIX_URL+"/api_jsonrpc.php"
data = json.dumps(
{
"jsonrpc": "2.0",
"method": "user.login",
"params": {
"user": settings.ZABBIX_USERNAME,
"password": settings.ZABBIX_PASSWORD
},
"id": 0
})
result = requestUrl(url, data)
return result
def logout(sessionid):
url = settings.ZABBIX_URL+"/api_jsonrpc.php"
data=json.dumps(
{
"jsonrpc": "2.0",
"method": "user.logout",
"params": [],
"id": 1,
"auth": sessionid
}
)
return requestUrl(url, data)
创建主机的代码类似如下:
代码如下 def genHost(sessionid,ip,groupids):url = settings.ZABBIX_URL+"/api_jsonrpc.php"
groups_list=[]
for groupid in groupids:
groups_list.append({"groupid":groupid})
params_dict={
"host": ip,
"interfaces": [
{
"type": 1,
"main": 1,
"useip": 1,
"ip": ip,
"dns": "",
"port": "10050"
}
],
"groups": groups_list,
"templates": [
{
"templateid": "10114"
}
],
}
data=json.dumps(
{
"jsonrpc": "2.0",
"method": "host.create",
"params": params_dict,
"auth": sessionid,
"id" : 3
})
return requestUrl(url, data)
更新IP的时候写的比较麻烦,需要先分别获取hostid和hostinterfaceid,然后再分别调用host.update和hostinterfa.update方法修改。