zabbix官方创建screen脚本

下面是创建screen的脚本,可以把一个主机的所有graphs放在一个screen里查看。

#!/usr/bin/env python
import urllib2
import json
import argparse
 
 
def authenticate(url, username, password):
    values = {‘jsonrpc‘: ‘2.0‘,
              ‘method‘: ‘user.login‘,
              ‘params‘: {
                  ‘user‘: username,
                  ‘password‘: password
              },
              ‘id‘: ‘0‘
              }
 
    data = json.dumps(values)
    req = urllib2.Request(url, data, {‘Content-Type‘: ‘application/json-rpc‘})
    response = urllib2.urlopen(req, data)
    output = json.loads(response.read())
 
    try:
        message = output[‘result‘]
    except:
        message = output[‘error‘][‘data‘]
        print message
        quit()
 
    return output[‘result‘]
 
 
def getGraph(hostname, url, auth, graphtype, dynamic, columns):
    if (graphtype == 0):
        selecttype = [‘graphid‘]
        select = ‘selectGraphs‘
    if (graphtype == 1):
        selecttype = [‘itemid‘, ‘value_type‘]
        select = ‘selectItems‘
 
    values = {‘jsonrpc‘: ‘2.0‘,
              ‘method‘: ‘host.get‘,
              ‘params‘: {
                  select: selecttype,
                  ‘output‘: [‘hostid‘, ‘host‘],
                  ‘searchByAny‘: 1,
                  ‘filter‘: {
                      ‘host‘: hostname
                  }
              },
              ‘auth‘: auth,
              ‘id‘: ‘2‘
              }
 
    data = json.dumps(values)
    req = urllib2.Request(url, data, {‘Content-Type‘: ‘application/json-rpc‘})
    response = urllib2.urlopen(req, data)
    host_get = response.read()
 
    output = json.loads(host_get)
    # print json.dumps(output)
 
    graphs = []
    if (graphtype == 0):
        for i in output[‘result‘][0][‘graphs‘]:
            graphs.append(i[‘graphid‘])
 
    if (graphtype == 1):
        for i in output[‘result‘][0][‘items‘]:
            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": "500",
            "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 == columns:
            x = 0
            y += 1
 
    return graph_list
 
 
def screenCreate(url, auth, screen_name, graphids, columns):
    # print graphids
    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)
 
    data = json.dumps(values)
    req = urllib2.Request(url, data, {‘Content-Type‘: ‘application/json-rpc‘})
    response = urllib2.urlopen(req, data)
    host_get = response.read()
 
    output = json.loads(host_get)
 
    try:
        message = output[‘result‘]
    except:
        message = output[‘error‘][‘data‘]
 
    print json.dumps(message)
 
 
def main():
    # 修改下面三行
    url = ‘http://<zabbix url>/zabbix/api_jsonrpc.php‘
    username = "Your API Users Username"
    password = "Your API Users Username"
 
    parser = argparse.ArgumentParser(description=‘Create Zabbix screen from all of a host Items or Graphs.‘)
    parser.add_argument(‘hostname‘, metavar=‘H‘, type=str,
                        help=‘Zabbix Host to create screen from‘)
    parser.add_argument(‘screenname‘, metavar=‘N‘, type=str,
                        help=‘Screen name in Zabbix.  Put quotes around it if you want spaces in the name.‘)
    parser.add_argument(‘-c‘, dest=‘columns‘, type=int, default=3,
                        help=‘number of columns in the screen (default: 3)‘)
    parser.add_argument(‘-d‘, dest=‘dynamic‘, action=‘store_true‘,
                        help=‘enable for dynamic screen items (default: disabled)‘)
    parser.add_argument(‘-t‘, dest=‘screentype‘, action=‘store_true‘,
                        help=‘set to 1 if you want item simple graphs created (default: 0, regular graphs)‘)
 
    args = parser.parse_args()
    hostname = args.hostname
    screen_name = args.screenname
    columns = args.columns
    dynamic = (1 if args.dynamic else 0)
    screentype = (1 if args.screentype else 0)
 
    auth = authenticate(url, username, password)
    graphids = getGraph(hostname, url, auth, screentype, dynamic, columns)
 
    print "Screen Name: " + screen_name
    print "Total Number of Graphs: " + str(len(graphids))
 
    screenCreate(url, auth, screen_name, graphids, columns)
 
if __name__ == ‘__main__‘:
    main()

    脚本使用方法:

    效果图:

脚本官方地址:https://www.zabbix.org/wiki/Python_script_to_create_Screen_from_all_Items/Graphs_of_a_host

时间: 2024-11-09 17:16:02

zabbix官方创建screen脚本的相关文章

16.使用zabbix api创建screen

zabbix的screen功能可以把graph聚合起来,统一进行展示, 我们的需求是把同一个主机组的同一个item聚合起来,比如一个screen显示同一个组的所有主机的内存使用率,达到类似ganglia的效果, 由于服务器较多,所以我们调用zabbix api来进行创建. 参考地址如下:谢谢各位大牛 https://www.zabbix.org/wiki/Python_script_to_create_Screen_from_all_Items/Graphs_of_a_host http://c

Zabbix 快速创建screen

#!/usr/bin/env python import urllib2 import json import argparse def authenticate(url, username, password): values ={'jsonrpc':'2.0', 'method':'user.login', 'params':{ 'user': username, 'password': password }, 'id':'0' } data = json.dumps(values) req

zabbix使用自己编写脚本模板和zabbix自带模板两种方法添加对指定进程和端口的监控

zabbix使用自己编写脚本模板和zabbix自带模板两种方法添加对指定进程和端口的监控 1.自带监控模板进行os的监控 进入/usr/local/zabbix/etc/zabbix_agentd.conf 配置文件修改 LogRemoteCommands=1     ###开启脚本功能 Server=192.168.5.129     ##修改zabbix指向的服务器: 重启zabbix_agentd.zabbix_server服务 在配置-->主机-->添加主机--> 配置主机信息主

Nagios中官方iptables监控脚本调整

在Nagios的官方网站上有提供一个用于监控iptables的状态的脚本,但是官方提供的脚本直接是不能使用的需要修改才能使用,在这里就大致所以下,因为Nagios的中命令机制是使用Nagios用户运行的,所以在官网上提供的脚本没有做出调整前是无法正常使用的,官网提供的iptables监控脚本很简单,是使用iptables的指令统计出INPUT上实时的条数的有多少,如果条数-1小于0就告警.但是在普通用户是无法正常使用iptables的命令,如果没有做出调整在Nagios中会出现NRPE:Unab

Zabbix监控 之sendEmail脚本邮件报警配置【5】

本次zabbix邮件报警时通过sendEmail这一个轻量级的命令行的smtp电子邮件客户端,使用脚本的方式实现邮件报警. 此次使用的Linux发行版是CentOS 6.5,zabbix版本为3.0.3 Zabbix监控之不发送邮件异常[附属] 一.下载sendEmail wget http://caspian.dotconf.net/menu/Software/SendEmail/sendEmail-v1.56.tar.gz sendEmail安装方法: 1 2 3 shell# tar xv

zabbix 自动出图脚本

#!/bin/bash #不配置字符集,脚本放到crontab里发出的中文E-MAIL乱码 export LANG=en_US.UTF-8 #有点强迫症,习惯什么东西在什么地方干 ^_^ cd /home/zabbix/graph #保存cookie文件名 COOKIE=zbx_cookie.txt > $COOKIE #我是在zbx上开一个组,弄一个只读账号,把想出图的主机放进去. NAME="reader" PASSWD="123456789" #EMAI

Zabbix 配置钉钉脚本告警(4)

title: Zabbix 配置钉钉脚本告警(4) date: 2018-12-10 11:50:21 tags: Zabbix categories: Zabbix copyright: true --- Zabbix是一个非常强大的监控系统,是企业级的软件,来监控IT基础设施的可用性和性能.它是一个能够快速搭建起来的开源的监控系统,Zabbix能监视各种网络参数,保证服务器系统的安全运营,并提供灵活的通知机制以让系统管理员快速定位解决存在的各种问题,Zabbix系统几乎可用于任何系统的监控过

如何在zabbix执行远程主机的脚本或指令

场景需求 我们可以通过zabbix_server的web界面的脚本功能实现对已经安装了zabbix_agent主机实现远程关机而不用手动登陆然后输入关机指令 我们可以通过zabbix_server的web界面的脚本功能实现某个服务的启动关闭和重启 实验配置过程 创建脚本 打开zabbix_server的web配置界面,选择管理,接着选择蓝色导航条中的脚本选项,最后点击创建脚本. 脚本名称:自定义 类型:如果是window或者linux主机类型都是选择脚本.IPMI类型(暂且不讨论) 执行在:有三

经典实用的自动创建Bash脚本文件头的脚本

今天给大家展示一下,我自己写的一个自动创建Bash脚本文件头的脚本(名为create),希望能对初学脚本者带来一定的思维提示.毕竟对于一个经常写脚本的运维人员来说,每次写脚本的时候都需要重复的去写一遍文件头,也是一件很累赘的事情,既然我们学了脚本,为什么不让它来为我们减轻一下负担了.所以一个自动创建Bash脚本文件头的想法在我脑海里面产生了. 本脚本所需要实现的功能: 1,能够自动创建一个标准的Bash脚本文件头,带有详细注释信息 2,能够给新建完成的Bash脚本文件自动添加执行权限 [[ema