阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

使用Python脚本创建zabbix screen(聚合图形)

463次阅读
没有评论

共计 4249 个字符,预计需要花费 11 分钟才能阅读完成。

最近测试了一篇文章《使用 zabbix api 创建 screen》,然后下载脚本进行测式,发现二个问题:

1. 不支持 3.x 版本。

2. 添加的 screen 的主机名称不是按顺序排列,不方便查询。

便自己修改了一下,让支持 zabbix3.x 版本,并输出的 screen(聚合图形) 按机器名称排列。

#!/bin/env Python
import json
import urllib2
import argparse
import re
 
re_digits = re.compile(r'(\d+)’)
 
def emb_numbers(s):
    pieces=re_digits.split(s)
    pieces[1::2]=map(int,pieces[1::2])
    return pieces
 
def sort_strings_with_emb_numbers2(alist):
    return sorted(alist, key=emb_numbers)
 
def 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 output
 
 
def 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’: [‘host’]
              },
              ‘auth’: auth,
              ‘id’: ‘2’
    }
    output = requestjson(url, values)
    for host in output[‘result’][0][‘hosts’]:
        host_list[host[‘host’]]=(host[‘hostid’])
 
    #return host_list
    hosts_sort = []
    for host in sort_strings_with_emb_numbers2(host_list.keys()):
        hosts_sort.append(host_list[host])
    return  hosts_sort
 
def 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’
 
    graphs = []
    for host in host_list:
        values = ({‘jsonrpc’: ‘2.0’,
                  ‘method’: ‘graph.get’,
                  ‘params’: {
                      select: [selecttype, ‘name’],
                      ‘output’: [‘graphid’, ‘name’],
                      ‘hostids’: host,
                      ‘filter’: {‘name’: name_list},
                      ‘sortfield’: ‘name’
                  },
                  ‘auth’: auth,
                  ‘id’: ‘3’
                  })
        output = requestjson(url, values)
        bb = sorted(output[‘result’])
        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’: ‘230’,
            ‘height’: ‘100’,
            ‘x’: str(x),
            ‘y’: str(y),
            ‘colspan’: ‘1’,
            ‘rowspan’: ‘1’,
        })
        x += 1
        if x == int(columns):
            x = 0
            y += 1
 
    return graph_list
 
def 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://ip/api_jsonrpc.php’
    username = ‘admin’
    password = ‘xxxxxxxxx’
    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 Hadoop  -G ‘Network traffic on bond0‘-c 4 -n ‘Hadoop bond0’

      -g    要显示 zabbix 的群组。

      -G  要显示的 zabbix 图形。
      -c    显示几列,注意要调整脚本里的:’width’:,’height’:  参数来设置大小。

      -n    在 screen 里面显示的名称。

上面的命令的意思就是:把 haddop 组里面每个服务器的 Network traffic on bond0 图形,接每列 4 个图形的显示在 Haddop bond0 的 screen 里。

本文永久更新链接地址 :http://www.linuxidc.com/Linux/2017-03/141926.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计4249字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19356
评论数
4
阅读量
8321251
文章搜索
热门文章
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
星哥带你玩飞牛NAS-7:手把手教你免费内网穿透-Cloudflare tunnel

星哥带你玩飞牛NAS-7:手把手教你免费内网穿透-Cloudflare tunnel

星哥带你玩飞牛 NAS-7:手把手教你免费内网穿透 -Cloudflare tunnel 前言 大家好,我是星...
星哥带你玩飞牛NAS-2:飞牛配置RAID磁盘阵列

星哥带你玩飞牛NAS-2:飞牛配置RAID磁盘阵列

星哥带你玩飞牛 NAS-2:飞牛配置 RAID 磁盘阵列 前言 大家好,我是星哥之前星哥写了《星哥带你玩飞牛 ...
星哥带你玩飞牛NAS-1:安装飞牛NAS

星哥带你玩飞牛NAS-1:安装飞牛NAS

星哥带你玩飞牛 NAS-1:安装飞牛 NAS 前言 在家庭和小型工作室场景中,NAS(Network Atta...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
让微信公众号成为 AI 智能体:从内容沉淀到智能问答的一次升级

让微信公众号成为 AI 智能体:从内容沉淀到智能问答的一次升级

让微信公众号成为 AI 智能体:从内容沉淀到智能问答的一次升级 大家好,我是星哥,之前写了一篇文章 自己手撸一...
支付宝、淘宝、闲鱼又双叕崩了,Cloudflare也瘫了连监控都挂,根因藏在哪?

支付宝、淘宝、闲鱼又双叕崩了,Cloudflare也瘫了连监控都挂,根因藏在哪?

支付宝、淘宝、闲鱼又双叕崩了,Cloudflare 也瘫了连监控都挂,根因藏在哪? 最近两天的互联网堪称“故障...
还在找免费服务器?无广告免费主机,新手也能轻松上手!

还在找免费服务器?无广告免费主机,新手也能轻松上手!

还在找免费服务器?无广告免费主机,新手也能轻松上手! 前言 对于个人开发者、建站新手或是想搭建测试站点的从业者...
240 元左右!五盘位 NAS主机,7 代U硬解4K稳如狗,拓展性碾压同价位

240 元左右!五盘位 NAS主机,7 代U硬解4K稳如狗,拓展性碾压同价位

  240 元左右!五盘位 NAS 主机,7 代 U 硬解 4K 稳如狗,拓展性碾压同价位 在 NA...
开源项目绝版游戏保护计划:重温一下经典游戏

开源项目绝版游戏保护计划:重温一下经典游戏

  开源项目绝版游戏保护计划:重温一下经典游戏 在数字时代,游戏作为一种文化载体,面临着前所未有的生...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Android 的最优解?

三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Android 的最优解?

  三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Andr...
每年0.99刀,拿下你的第一个顶级域名,详细注册使用

每年0.99刀,拿下你的第一个顶级域名,详细注册使用

每年 0.99 刀,拿下你的第一个顶级域名,详细注册使用 前言 作为长期折腾云服务、域名建站的老玩家,星哥一直...
零成本上线!用 Hugging Face免费服务器+Docker 快速部署HertzBeat 监控平台

零成本上线!用 Hugging Face免费服务器+Docker 快速部署HertzBeat 监控平台

零成本上线!用 Hugging Face 免费服务器 +Docker 快速部署 HertzBeat 监控平台 ...
300元就能买到的”小钢炮”?惠普7L四盘位小主机解析

300元就能买到的”小钢炮”?惠普7L四盘位小主机解析

  300 元就能买到的 ” 小钢炮 ”?惠普 7L 四盘位小主机解析 最近...
开源MoneyPrinterTurbo 利用AI大模型,一键生成高清短视频!

开源MoneyPrinterTurbo 利用AI大模型,一键生成高清短视频!

  开源 MoneyPrinterTurbo 利用 AI 大模型,一键生成高清短视频! 在短视频内容...