zabbix常用的python类api

zabbix自带api

#!/usr/bin/python
#coding:utf-8

import requests
import json

url = "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 _content

def 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-8
from flask import current_app
from zabbix_client import ZabbixServerProxy
from app.models import Zbhost, Server
from app import db

class 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.args

def 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,argparse
from zabbix_api import ZabbixAPI
server = "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-api
2. 使用 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 args

def 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 requests
import json
  
ZABIX_ROOT = "http://10.11.0.212"
url = ZABIX_ROOT + '/api_jsonrpc.php'
  
# user.login
payload = {
     "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 client
from aliyunsdkcms.request.v20170301 import QueryMetricListRequest
import sys, json, time, random, redis

access_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 RdsIdList


def 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 ResValue

def 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)

 

posted @ 2018-08-23 20:26  reblue520  阅读(1297)  评论(0编辑  收藏  举报