zabbix自带api
#!/usr/bin/python#coding:utf-8import requestsimport jsonurl = "http://192.168.99.14/zabbix/api_jsonrpc.php"headers = { "Content-Type": "application/json-rpc"}def login_zabbix(): data = { "jsonrpc":"2.0", "method":"user.login", "id":1, "auth":None, "params": { "user": "Admin", "password": "zabbix" } } r = requests.post(url, data = json.dumps(data), headers = headers) _content = json.loads(r.content) return _content['result']def create_hostgoup(): _auth = login_zabbix() data = { "jsonrpc": "2.0", "method": "hostgroup.create", "params": { "name": "reboot" }, "auth": _auth, "id": 1 } r = requests.post(url, data=json.dumps(data), headers=headers) _content = json.loads(r.content) print _contentdef get_goupid(): _auth = login_zabbix() data = { "jsonrpc": "2.0", "method": "hostgroup.get", "params": { "output": "extend", "filter": { "name": [ "reboot" ] } }, "auth": _auth, "id": 1 } r = requests.post(url, data=json.dumps(data), headers=headers) _content = json.loads(r.content) return _content['result'][0]['groupid']def get_templateid(): _auth = login_zabbix() data = { "jsonrpc": "2.0", "method": "template.get", "params": { "output": "extend", "filter": { "host": [ "Template OS Linux", ] } }, "auth": _auth, "id": 1 } r = requests.post(url, data=json.dumps(data), headers=headers) _content = json.loads(r.content) return _content['result'][0]['templateid']def create_host(_host_list): _auth = login_zabbix() _groupid = get_goupid() _templdateid = get_templateid() for _host in _host_list: data = { "jsonrpc": "2.0", "method": "host.create", "params": { "host": _host['host'], "interfaces": [ { "type": 1, "main": 1, "useip": 1, "ip": _host['ip'], "dns": "", "port": "10050" } ], "groups": [ { "groupid": _groupid } ], "templates": [ { "templateid": _templdateid } ], "inventory_mode": 0, "inventory": { "macaddress_a": "01234", "macaddress_b": "56768" } }, "auth": _auth, "id": 1 } r = requests.post(url, data=json.dumps(data), headers=headers) _content = json.loads(r.content) print _content['result']['hostids']if __name__ == "__main__": _host_list = [ { "ip": "192.168.99.10", "host": "reboot-devops-02"}, { "ip": "192.168.99.11", "host": "reboot-ms-web-01"}, { "ip": "192.168.99.12", "host": "reboot-ms-web-02"}, { "ip": "192.168.99.13", "host": "reboot-ms-web-03"} ] create_host(_host_list)
第三方插件
#!/usr/bin/python# coding:utf-8from flask import current_appfrom zabbix_client import ZabbixServerProxyfrom app.models import Zbhost, Serverfrom app import dbclass Zabbix(object): def __init__(self): self.url = current_app.config.get('ZABBIX_API_URL') self.username = current_app.config.get('ZABBIX_API_USER') self.password = current_app.config.get('ZABBIX_API_PASS') self._login() def _login(self): self.zb = ZabbixServerProxy(self.url) self.zb.user.login(user=self.username, password=self.password) def __del__(self): self.zb.user.logout() def get_hostgroup(self): return self.zb.hostgroup.get(output=['groupid', 'name']) def _create_host(self, params): try: return self.zb.host.create(**params) except Exception,e: return e.args def create_zb_host(self, hostname, ip, groupid = 2): """ 创建zabbix监控主机 :param hostname: :param ip: :param groupid: :return: """ data = { "host": hostname, "interfaces": [ { "type": 1, "main": 1, "useip": 1, "ip": ip, "dns": "", "port": "10050" } ], "groups": [ { "groupid": groupid } ] } return self._create_host(data) def get_hosts(self): return self.zb.host.get(output=["hostid", "host"]) def get_interfaces(self, ids): """ 获取host的ip :param ids: :return: """ interface = self.zb.hostinterface.get(hostids = ids, output = ["hostid", "ip"]) ret = {} for _it in interface: ret[_it['hostid']] = _it['ip'] return ret def get_templates(self, ids): return self.zb.template.get(hostids = ids, output = ["templateid", "name"]) # 接触模板绑定 def unlink_template(self, hostid, templateid): templates = [{ "templateid" : templateid}] return self.zb.host.update(hostid = hostid, templates_clear = templates) # 新增模板,就是查出原来有的模板,然后拼接最新的模板,一起更新为当前的模板 def replace_template(self, hostid, templateids): templates = [] for id in templateids: templates.append({ "templateid":id}) try: ret = self.zb.host.update(hostid=hostid,templates = templates) return ret except Exception as e: return e.argsdef rsync_zabbix_to_zbhost(): """ 将zabbix里的host信息同步到zbhost里 :return: """ zb = Zabbix() # 1 从zabbix里取出所有的host信息 zabbix_hosts = zb.get_hosts() zabbix_hosts_interface = zb.get_interfaces([z['hostid'] for z in zabbix_hosts]) commit = False for host in zabbix_hosts: h = db.session.query(Zbhost).filter_by(hostid = host['hostid']).all() if h: continue host['ip'] = zabbix_hosts_interface[host['hostid']] db.session.add(Zbhost(**host)) commit = True if commit: db.session.commit()def rsync_server_to_zbhost(): """ 同步cmdb server的数据到缓存表zbhost """ hosts = db.session.query(Zbhost).all() servers = db.session.query(Server).filter(Server.inner_ip.in_([h.ip for h in hosts])).all() server_info = {} for s in servers: server_info[s.inner_ip] = s.id for h in hosts: if not h.cmdb_hostid: db.session.query(Zbhost).filter(Zbhost.id == h.id).update({ "cmdb_hostid":server_info[h.ip]}) db.session.commit()""" 取出zabbix中主机和模板信息"""def get_zabbix_data(hosts): zabbix_data = db.session.query(Zbhost).filter(Zbhost.cmdb_hostid.in_([h['id'] for h in hosts])).all() zb = Zabbix() ret = [] for zb_host in zabbix_data: tmp = {} tmp["hostname"] = zb_host.host tmp["templates"] = zb.get_templates(zb_host.hostid) tmp["hostid"] = zb_host.hostid ret.append(tmp) return ret# 连接模板def zabbix_link_template(hostids, templateids): ret = [] zb = Zabbix() for hostid in hostids: linked_template_ids = [t['templateid'] for t in zb.get_templates(hostid)] linked_template_ids.extend(templateids) ret.append(zb.replace_template(hostid, linked_template_ids)) return ret
使用zabbix_api批量添加模板的脚本:template_massadd.py#!/usr/bin/python#-*- coding:utf8 -*-import json,sys,argparsefrom zabbix_api import ZabbixAPIserver = "http://10.11.0.212/api_jsonrpc.php"username = "Admin"password = "zabbix"zapi = ZabbixAPI(server=server, path="", log_level=0)zapi.login(username, password)'''1. 安装zabbix插件 D:\python\zabbix>pip install zabbix-api2. 使用 zabbix_getallhosts.py 脚本获取主机名,将需要的主机名筛选出来使用方法:cmd下:python template_massadd.py --host="chinasoft_cbs_frontend_web01,chinasoft_cbs_frontend_web02,chinasoft_cbs_backend_web1,chinasoft_cbs_backend_web2,chinasoft_cbs_backend_web3,chinasoft_cbs_backend_web4,web01,web02,chinasoft_store_web01,chinasoft_store_web02,chinasoft_apiser_web01,chinasoft_apiser_web02,chinasoft_payment_web01,chinasoft_payment_web02,chinasoft_platform_web01,chinasoft_platform_web02,chinasoft_platform_web03,chinasoft_platform_web04,chinasoft_apicms_backend_web01,chinasoft_apicms_backend_web02,eus-timed-task01,eus-store-pay01,eus-apiserver-web03,eus-apiserver-web04" --"templates"="Template process rsync"'''# 获取参数def get_args(): parser = argparse.ArgumentParser() parser.add_argument("-H", "--host", help="host name") parser.add_argument("-t", "--templates", help="template name") # 解析所传入的参数 args = parser.parse_args() if not args.host: args.host = raw_input('host: ') if not args.templates: args.templates = raw_input('templates: ') return argsdef get_host_id(host): get_host_id = zapi.host.get( { "output": "hostid", "filter": { "host":host.split(",") } } ) host_id = [] host_id.append([I['hostid'] for I in get_host_id]) return host_id[0]def get_templates_id(templates): templates_id = zapi.template.get( { "output": "templateid", "filter": { "host":templates.split(",") } } ) return templates_id def template_massadd(template_id,host_id): template_add = zapi.template.massadd( { "templates": template_id, "hosts": host_id } ) return "host add template success" # 程序入口if __name__ == "__main__": args = get_args() print 'args:%s' % args host_id = get_host_id(args.host) print 'host_id = %s' % host_id template_id = get_templates_id(args.templates) print 'template_id: %s' % template_id if len(host_id) == len(args.host.split(',')): if len(template_id) == len(args.templates.split(',')): print template_massadd(template_id,host_id) else: print "template not exist" else: print "host not exist"# 用法:# python template_massadd.py --host="chinasoft_apiser_web01,chinasoft_payment_web01" --"templates"="Template process rsync"# host add template success###########################批量获取主机名的脚本#!/usr/bin/evn python# coding=utf-8 import requestsimport json ZABIX_ROOT = "http://10.11.0.212"url = ZABIX_ROOT + '/api_jsonrpc.php' # user.loginpayload = { "jsonrpc" : "2.0", "method" : "user.login", "params": { 'user': 'Admin', 'password':'zabbix', }, "auth" : None, "id" : 0, }headers = { 'content-type': 'application/json',}req = requests.post(url, json=payload, headers=headers)auth = req.json() # host.get#主机显示名 'name'],# hosts是zabbix.conf文件中配置的主机名payload = { "jsonrpc" : "2.0", "method" : "host.get", "params": { 'output': [ 'hostid', 'host'], }, "auth" : auth['result'], "id" : 2, }res2 = requests.post(url, data=json.dumps(payload), headers=headers)res2 = res2.json()# f.write(host['name'] + '\n')for host in res2['result']: with open('host.txt', 'a+') as f: f.write(host['host'] + '\n')
#!/usr/bin/env python# -*- coding: utf-8 -*-# @Date : 2017-11-21 19:23:02# @Author : mihong (mihong@yixia.com)# @Link : ${link}# @Version : $Id$from aliyunsdkcore import clientfrom aliyunsdkcms.request.v20170301 import QueryMetricListRequestimport sys, json, time, random, redisaccess_key = '这个你不知道就不知道吧'access_secret = '这个你不知道就不知道吧'region_id = 'cn-beijing'def GetRdsId(): key_name = "instanceId" hosts_list = [] RdsIdList = [] FileName = '/workspace/zabbix/rds_monitor/rds_id.list' with open(FileName, 'r') as File: for DBInstanceId in File.readlines(): data_dict = {key_name:DBInstanceId.strip()} hosts_list.append(data_dict) RdsIdList = [hosts_list[i:i+50] for i in range(0,len(hosts_list),50)] return RdsIdListdef SetRdsValue(Metric, RdsIdList): clt = client.AcsClient(access_key, access_secret, region_id) request = QueryMetricListRequest.QueryMetricListRequest() request.set_accept_format('json') request.set_Project('acs_rds_dashboard') request.set_Metric(Metric) timestamp_start = int(time.time()-120) * 1000 request.set_StartTime(timestamp_start) request.set_Dimensions(RdsIdList) request.set_Period('60') request.set_Length('1') result = clt.do_action(request) ResValue = json.loads(result)['Datapoints'] return ResValuedef GetRdsValue(KeyName): return r.get(KeyName)if __name__ == '__main__': time.sleep(random.randint(1,5)) r = redis.Redis(host='localhost', port=7000, db=0) if sys.argv[1] == 'getAllValue': Metrics = ['CpuUsage','IOPSUsage','MemoryUsage','DiskUsage','ConnectionUsage','DataDelay'] for Metric in Metrics: for RdsIdList in GetRdsId(): KeyArray = SetRdsValue(Metric, RdsIdList) for i in KeyArray: RdsId = i['instanceId'] KeyName = i['instanceId'] + '_' + Metric RdsKeyValue = r.get(KeyName) try: KeyValue = round(i['Average'], 2) except IndexError: KeyValue = 0 if RdsKeyValue == None: r.set(KeyName, KeyValue, ex=3600) print Metric, RdsId, KeyValue, 'New set ok' continue if KeyValue != 0: r.set(KeyName, KeyValue, ex=3600) print Metric, RdsId, KeyValue, 'Update set ok' else: print Metric, RdsId, KeyValue, 'Value=0 Update set Fail' continue if sys.argv[1] == 'getRdsValue': Metric = sys.argv[2] RdsId = sys.argv[3] KeyName = RdsId + '_' + Metric print GetRdsValue(KeyName)