继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

zabbix利用API批量添加Screen

holdtom
关注TA
已关注
手记 1846
粉丝 240
获赞 991


公司服务器太多,如果要一个一个的手动添加Screen的话,那估计我早累死了,所以呢,懒人必备神器,使用Python写了个批量Screen添加和更新的脚本。

说下此脚本的功能和用处吧

1、如果Screen不存在,可以使用此脚本批量添加Screen

2、如果Screen存在,也可以使用此脚本批量更新Screen

3、此脚本会判断主机是否存在,不存在,会直接退出,然后列出可以使用的主机列表

好了,就这么多了,下面贴代码。

#!/usr/bin/python

# coding:utf-8

# 使用说明

# 脚本可以不接受参数,不接受参数则是全部主机更新

# 脚本接受一个或两个参数

# 第一个参数是主机,第二参数是Screen名称

# 省略第二个参数,Screen则与主机名称一样

# ./CUScreen.py 

# ./CUScreen.py 主机名称 Screen名称

# ./CUScreen.py Host_Name Screen_Name

# ./CUScreen.py web01 

# ./CUScreen.py web01 web01_screen

import urllib2,json,sys

def res(url="", values=""):        

    data = json.dumps(values)

    # 请求API

    res = urllib2.Request(url, data, {"Content-Type": "application/json"})

    resp = urllib2.urlopen(res, data)

    out = json.loads(resp.read())

    try:

        error = out["result"]

    except:

        error = out["error"]["data"]

        return error

    return out["result"]

def auth(url="", username="", password=""):

    values = {

                "jsonrpc": "2.0",

                "method": "user.login",

                "params": {

                        "user": username,

                        "password": password,

                },

                "id": 0,

    }

    id = res(url, values)

    return id

def gethosts(auth=""):

    values = {

                "jsonrpc":"2.0",

                "method":"host.get",

                "params":{

                        "output":{"hostid":"name"},

                },

                "auth":auth,

                "id": 1

             }

    out = res(url, values)

    print "Host Count :",len(out)

    for host in out:

        print "Host ID : %s Host Name : %s" % (host['hostid'],host['name'])

    return out

def getgraphs(auth="", hostname=""):

    values = {

                "jsonrpc":"2.0",

                "method":"graph.get",

                "params":{

                        # 过滤某个主机的Graph

                        "filter":{"host":hostname}

                },

                "auth":auth,

                "id": 1

    }

    out = res(url, values)

    # 判断主机是否存在

    if out == []:

        print hostname,"not is exists"

        print "以下是存在的主机:"

        gethosts(auth)

        sys.exit(1)

    # 定义Screenitem的参数,为空列表

    graphs_list = []

    y = 0

    for i in out:

        graphs_list.append(

             {

                "resourcetype": 0,

                # 添加graphid

                "resourceid": i["graphid"],

                # 定义宽度

                "width":1000,

                # 定义高度

                "height":100,

                # 是否为动态图形

                "dynamic":1,

                # 坐标x轴,向右

                "x": 0,

                # 坐标y轴,向下

                "y": y,

             }

        )

        y += 1

    return graphs_list

# C代表创建 U代表更新

def CUScreen(auth="", screen_name="", graphs_list=""):

    # 判断Screen是否存在

    values1 = {

                "jsonrpc": "2.0",

                "method": "screen.get",

                "params": {

                        "output": "extend",

                        # 过滤Screen

                        "filter":{"name":screen_name},

                },

                "auth": auth,

                "id": 1

    }

    # 定义创建Screen的数据体

    values2 = {

                "jsonrpc": "2.0",

                "method": "screen.create",

                "params": {

                        "name":screen_name,

                        # Screen的宽度

                        "hsize":1,

                        # Screen的长度

                        "vsize":len(graphs_list),

                        # Screen的item信息

                        "screenitems": graphs_list,

                },

                "auth": auth,

                "id": 1

    }

    # 使用values1进行判断

    out = res(url, values1)

    #进行ScreenID判断

    if out == []:

        # ScreenID不存在则创建ScreenID并添加item

        print screen_name,"Screen Name Not is exists, Create Screen Name :",screen_name

        # 使用values2

        out = res(url, values2)

        print screen_name,"Screen Name is Create OK, Screen Item Create OK"

        return out

    else:

        screen_id = out[0]['screenid']

        # 定义更新Screen的数据体

        values3 = {

                    "jsonrpc": "2.0",

                    "method": "screen.update",

                    "params": {

                            # ScreenID

                            "screenid":screen_id,

                            # 计算Screen的行数

                            "vsize":len(graphs_list),

                            # Screen的item

                            "screenitems":graphs_list,

                    },

                    "auth": auth,

                    "id": 1

        }

        # ScreenID存在则更新所有的item

        print screen_name,"Screen Name is exists, Screen ID :",screen_id

        # 使用values3

        out = res(url, values3)

        print screen_name,"Screen Item Update OK"

        return out

if __name__ == "__main__":

    # zabbix的API地址,不同环境的不一样

    url = "http://zabbix.xxx.com/api_jsonrpc.php"

    # zabbix的登陆账号

    username = "xxx"

    # zabbix的登陆密码

    password = "xxx"

    # 默认不输入参数则全部主机都进行更新

    if len(sys.argv) == 1:

        # 获取认证ID

        auth = auth(url,username,password)

        for i in gethosts(auth):

            # 获取GraphID

            graphs_list = getgraphs(auth,i['name'])

            # 使用主机名称(hostname变量)当Screen名称

            CUScreen(auth,i['name'],graphs_list)

    # 如果你输入一个参数,Screen名称与主机名称一样

    if len(sys.argv) == 2:

        # 主机名称,赋值为hostname变量

        hostname = sys.argv[1]

        # 获取认证ID

        auth = auth(url,username,password)

        # 获取GraphID

        graphs_list = getgraphs(auth,hostname)

        # 使用主机名称(hostname变量)当Screen名称

        CUScreen(auth,hostname,graphs_list)

    # 如果你输入二个参数,第一个为主机名称,第二个为Screen名称

    if len(sys.argv) == 3:

        # 主机名称,赋值为hostname变量

        hostname = sys.argv[1]

        # Screen名称,赋值为screen_name变量

        screen_name = sys.argv[2]

        # 获取认证ID

        auth = auth(url,username,password)

        # 获取GraphID

        graphs_list = getgraphs(auth,hostname)

        # 使用screen_name(screen_name变量)来当Screen名称

        CUScreen(auth,screen_name,graphs_list)

j_0003.gif

©著作权归作者所有:来自51CTO博客作者小疯魔的原创作品,如需转载,请注明出处,否则将追究法律责任


打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP