zabbix的screen功能可以把graph聚合起来,统一进行展示,

  我们的需求是把同一个主机组的同一个item聚合起来,比如一个screen显示同一个组的所有主机的内存使用率,达到类似ganglia的效果,

  由于服务器较多,所以我们调用zabbix api来进行创建。

参考地址如下:谢谢各位大牛

脚本如下:适用于v2.2.11

import jsonimport urllib2import argparsedef requestjson(url, values):    data = json.dumps(values)    req = urllib2.Request(url, data, {'Content-Type': 'application/json-rpc'})    res = urllib2.urlopen(req, data)    output = json.loads(res.read())    return outputdef authenticate(url, username, password):    values = {'jsonrpc': '2.0',              'method': 'user.login',              'params': {                  'user': username,                  'password': password              },              'id': '0'    }    output = requestjson(url, values)    return output['result']def gethosts(groupname, url, auth):    host_list = []    values = {'jsonrpc': '2.0',              'method': 'hostgroup.get',              'params': {                  'output': 'extend',                  'filter': {'name': groupname},                  'selectHosts': ['hostid']              },              'auth': auth,              'id': '2'    }    output = requestjson(url, values)    for host in output['result'][0]['hosts']:        host_list.append(host['hostid'])    return host_listdef getgraphs(host_list, name_list, url, auth, columns, graphtype=0, dynamic=0):    if (graphtype == 0):        selecttype = ['graphid']        select = 'selectGraphs'    if (graphtype == 1):        selecttype = ['itemid', 'value_type']        select = 'selectItems'    values = ({'jsonrpc': '2.0',               'method': 'graph.get',               'params': {                   select: [selecttype, 'name'],                   'output': ['graphid', 'name'],                   'hostids': host_list,                   'filter': {'name': name_list},                   'sortfield': 'name'               },               'auth': auth,               'id': '3'               })    output = requestjson(url, values)    bb = sorted(output['result'])    graphs = []    if (graphtype == 0):        for i in bb:            graphs.append(i['graphid'])    if (graphtype == 1):        for i in bb:            if int(i['value_type']) in (0, 3):                graphs.append(i['itemid'])    graph_list = []    x = 0    y = 0    for graph in graphs:        graph_list.append({            'resourcetype': graphtype,            'resourceid': graph,            'width': '300',            'height': '100',            'x': str(x),            'y': str(y),            'colspan': '0',            'rowspan': '0',            'elements': '0',            'valign': '0',            'halign': '0',            'style': '0',            'url': '',            'dynamic': str(dynamic)        })        x += 1        if x == int(columns):            x = 0            y += 1    return graph_listdef screencreate(url, auth, screen_name, graphids, columns):    columns = int(columns)    if len(graphids) % columns == 0:        vsize = len(graphids) / columns    else:        vsize = (len(graphids) / columns) + 1    values = {'jsonrpc': '2.0',              'method': 'screen.create',              'params': [{                  'name': screen_name,                  'hsize': columns,                  'vsize': vsize,                  'screenitems': []              }],              'auth': auth,              'id': 2              }    for i in graphids:        values['params'][0]['screenitems'].append(i)    output = requestjson(url, values)def main():    url = 'http://10.0.0.141/zabbix/api_jsonrpc.php'    username = 'admin'    password = '__Q&(0sH1zNAdD'    auth = authenticate(url, username, password)    host_list = gethosts(groupname, url, auth)    graph_ids = getgraphs(host_list, graphname, url, auth, columns)    screencreate(url, auth, screen_name, graph_ids, columns)if __name__ == '__main__':    parser = argparse.ArgumentParser()    parser.add_argument('-g', dest='groupname', nargs='+', metavar='groupname', type=str, help='which group you want to select')    parser.add_argument('-G', dest='graphname', nargs='+', metavar='graphname', type=str, help='which graph you want to select')    parser.add_argument('-c', dest='columns', metavar='columns', type=int, help='the screen columns')    parser.add_argument('-n', dest='screen_name', metavar='screen_name', type=str, help='the screen name')    args = parser.parse_args()    groupname = args.groupname    graphname = args.graphname    columns = args.columns    screen_name = args.screen_name    main()

使用方法:

python create_screen.py -g servers -G 'Network traffic on em1' -c 4 -n 'servers Network traffic on em1'