前言
今天写了一个zabbix api,这里整理一下,过程中自己也学习了一些东西。
需求
我们需要查一个文件内容如下:
cat /ops/flume_hosts
node1
node2
需要把这个文件里面的host添加到flume的group里面并且关联flume的template做监控,以后我们部署flume的机器只需要改这个文件,然后一执行这个命令就OK了
部署与实施
写了小一天,又把代码该删删该减减,做成了如下样子(用了一个requests模块,python版本是3.6):
#!/opt/python3/bin/python3
# -*- coding: utf-8 -*-
# Copyright (c) 2017 - hongzhi.wang
'''
Author: hongzhi.wang
Create Date: 2017/10/16
Modify Date: 2017/10/16
'''
import json
import requests
REQUEST_URL = "https://192.168.3.3/api_jsonrpc.php"
FLUME_GROUP_ID = 322
FLUME_TEMPLATE_ID = 108
LOGIN_INFO = {
"user": "admin",
"password": "admin"
}
FLUME_HOST_FILE = "/ops/flume_hosts"
def zabbix_post(method, params, auth=None):
res = requests.post(
url=REQUEST_URL,
json={
"jsonrpc": "2.0",
"method": method,
"params": params,
"id": 1,
"auth": auth
}
)
print(method, res.status_code)
return json.loads(res.text)
with open(FLUME_HOST_FILE) as f:
host_list = [host.strip() for host in f]
auth_key = zabbix_post(method="user.login", params=LOGIN_INFO)["result"]
try:
host_id_dict_list = zabbix_post(
method="host.get",
params={
"output": ["hostid"],
"filter": {
"host": host_list
}
},
auth=auth_key,
)["result"]
host_id_list = [item.get("hostid") for item in host_id_dict_list]
zabbix_post(
method="hostgroup.massupdate",
params={
"groups": [
{
"groupid": FLUME_GROUP_ID
}
],
"hosts": host_id_dict_list
},
auth=auth_key
)
zabbix_post(
method="template.update",
params={
"templateid": FLUME_TEMPLATE_ID,
"hosts": host_id_list
},
auth=auth_key
)
finally:
zabbix_post(
method="user.logout",
params=[],
auth=auth_key
)
总结
这次开始遇到的问题是登录进去,就会有authkey(用postman测试的,每个接口都测试了几次,发现半个月前的authkey还能用。。。),如果不logout的话,会存很多,仔细查了一下网上的资料,这个authkey是存在数据库的sessions表里面,程序会定期清除一年前的authkey,所以如果量不大的话可以等着自动删除,这个没有去看源码确认。