分布式监控系统Zabbix-批量添加聚合图形

之前部署了Zabbix(3.4.4版本)监控环境,由于主机比较多,分的主机组也比较多,添加聚合图形比较麻烦,故采用python脚本进行批量添加聚合图形。脚本下载地址:https://pan.baidu.com/s/1bpApIPp  (密码:wpts)脚本操作如下:

[[email protected] ~]# cd /opt/
[[email protected] opt]# ls
create_Disk_space_usage_screen.py  create_screen.py

======================================================================================
[[email protected] opt]# cat create_screen.py
#!/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‘: ‘600‘,
            ‘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://10.0.8.40/api_jsonrpc.php‘
    username = ‘Admin‘
    password = ‘[email protected]‘
    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()

======================================================================================
[[email protected] opt]# cat create_Disk_space_usage_screen.py
#!/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‘: ‘400‘,
            ‘height‘: ‘400‘,
            ‘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://10.0.8.40/api_jsonrpc.php‘
    username = ‘Admin‘
    password = ‘[email protected]‘
    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()

======================================================================================
上面两个脚本create_screen.py和create_Disk_space_usage_screen.py,脚本中只需要按照自己的实际zabbix访问情况修改三处:
url
username
password

前者用于批量生成负载、带宽、IO等监控的聚合图形,后者用于生成磁盘监控的聚合图形。
两个脚本唯一不同的就是width和height的值不一样。

批量生成聚合图形的操作如下:
[[email protected] opt]# python create_screen.py  -g ‘财务系统‘  -G ‘Network traffic on bond0‘ -c 2 -n ‘财务系统---Network traffic on bond0‘
[[email protected] opt]# python create_screen.py  -g ‘财务系统‘  -G ‘CPU load‘ -c 2 -n ‘财务系统---CPU load‘
[[email protected] opt]# python create_screen.py  -g ‘财务系统‘  -G ‘CPU utilization‘ -c 2 -n ‘财务系统---CPU utilization‘
[[email protected] opt]# python create_screen.py  -g ‘财务系统‘  -G ‘Memory usage‘ -c 2 -n ‘财务系统---Memory usage‘
[[email protected] opt]# python create_screen.py  -g ‘财务系统‘  -G ‘Read and Write speed on /‘ -c 2 -n ‘财务系统---Read and Write speed on /‘
[[email protected] opt]# python create_screen.py  -g ‘财务系统‘  -G ‘Read and Write speed on /data‘ -c 2 -n ‘财务系统---Read and Write speed on /data‘
[[email protected] opt]# python create_Disk_space_usage_screen.py  -g ‘财务系统‘  -G ‘Disk space usage /‘ -c 3 -n ‘财务系统---Disk space usage /‘
[[email protected] opt]# python create_Disk_space_usage_screen.py  -g ‘财务系统‘  -G ‘Disk space usage /data‘ -c 3 -n ‘财务系统---Disk space usage /data‘

对于以上命令中的参数解释:
-g    要显示zabbix的群组。
-G    要显示的zabbix图形。
-c    显示几列,注意要调整脚本里的:‘width‘: ,‘height‘:  参数来设置大小。
-n    在screen 里面显示的名称。

上面的命令的意思就是:把"财务系统"组里面每个服务器的bond0网卡、load负载、磁盘等监控图形,接每列4个图形(磁盘的按美3个图形)的显示在聚合图形里。

同理:如果添加其他主机组,即将上面的"财务系统" 统一替换掉即可!

原文地址:https://www.cnblogs.com/kevingrace/p/8129943.html

时间: 2024-11-08 20:58:37

分布式监控系统Zabbix-批量添加聚合图形的相关文章

分布式监控系统Zabbix使用percona监控MySQL

系统运维工程师 李超前面已经介绍了分布式监控系统Zabbix-自动发现-添加mysql多实例监控,但是没有提供可以直接使用的Key,太过简陋,监控效果不佳.要想更加仔细的监控Mysql,业内同学们都会选择采用Percona Monitoring Plugins监控MySQL.Percona有比较详细的监控Mysql的模版以及脚本,它提升了在高负载情况下的InnoDB的性能.为运维人员提供一些非常有用的性能诊断工具:另外它有更多的参数和命令来控制服务器行为.废话不多说,下面记录下使用Percona

zabbix批量创建聚合图形

#!/usr/bin/python #coding:utf-8 import urllib2 import json import argparse import xlrd def authenticate(url, username, password): values = {'jsonrpc': '2.0', 'method': 'user.login', 'params': { 'user': username, 'password': password }, 'id': '0' } da

企业级分布式监控系统Zabbix系列之01(Zabbix-Server安装)

本文以CentOS 6.7 x86_64系统为例,环境为刚做好的新系统. Zabbix-Server端环境监察 [[email protected] ~]# cat /etc/redhat-release CentOS release 6.7 (Final) [[email protected] ~]# uname -r 2.6.32-573.8.1.el6.x86_64 [[email protected] ~]# uname -m x86_64 [[email protected] ~]# 

CentOS7 企业级分布式监控系统Zabbix(01)

本次以CentOS 7.2 x64系统为例 系统环境 [[email protected] ~]# cat /etc/redhat-releaseCentOS Linux release 7.2.1511 (Core)[[email protected] ~]# uname -r3.10.0-327.el7.x86_64[[email protected] ~]# uname -mx86_64[[email protected] ~]# hostnamecentos72-node1.wangdo

【Zabbix】分布式监控系统Zabbix【一】

一.Zabbix功能及特性简介 Zabbix可以获取cpu,内存,网卡,磁盘,日志等信息 1.Zabbix数据收集方式: a.Agent客户端(Agent客户端支持多平台部署) b.如果是无法安装客户端的设备,例如网络设备,则可以通过SNMP(简单网络管理协议)获取监控数据 c.支持通过IPMI获取硬件的温度,风扇,硬盘,电源等 d.通过Zabbix自带的检测进行监控 2.Zabbix支持自定义监控: 可以通过shell,python,ruby等可执行的脚本收集监控数据 3.Zabbix可以通过

【Zabbix】分布式监控系统Zabbix【二】

一.Zabbix基本操作 1.主机群组.主机.模板.触发器 a.创建主机群组和主机的过程比较简单,不再介绍 b.配置模板: 创建一个模板,将其分组到Template组,添加配置应用: 给应用创建监控项:(如果没有存储时间则无法生成图表) 然后再在主机中添加相应的模板,可以查看是否成功监控 c.触发器设置:(可直接在items中修改,实际中,往往根据正常情况下的参数值设定告警值) 触发条件后告警如图: 2.用户组.用户权限.用户告警 Zabbix可以通过多种方式向用户发出告警通知,例如短信,微信,

企业级分布式监控系统Zabbix系列之02(Zabbix-Agent安装与配置)

本文以CentOS 6.7 x86_64系统为例,环境为刚做好的新系统. Zabbix-Agent端环境检查 [[email protected] ~]# cat /etc/redhat-release CentOS release 6.7 (Final) [[email protected] ~]# uname -r 2.6.32-573.8.1.el6.x86_64 [[email protected] ~]# uname -m x86_64 [[email protected] ~]# h

《Zabbix企业级分布式监控系统》预售

<Zabbix企业级分布式监控系统>预售 一.预售网站链接如下 网站名称 链接 亚马逊 http://www.amazon.cn/3/dp/B00MN6QEYK 当当 京东 二.书籍封面如下 三.该书相关信息如下 本书的读者QQ群: Zabbix企业级分布式监控 271659981 (可申请加入,验证码:Zabbix监控) 四.随书资料 随书所带的附件托管在github上面,完全开源. https://github.com/itnihao/zabbix-book 五.书籍目录如下 第一部分Za

zabbix专题:第七章 添加图像Graphs,添加聚合图形Screens

zabbix专题:第七章 添加图像Graphs,添加展示屏Screens 对Linux有兴趣的朋友加入QQ群:476794643 在线交流 本文防盗链:http://zhang789.blog.51cto.com 本节目录大纲 添加图像Graphs 添加聚合图形Screens 添加图像Graphs 如果我们想显示多个信息到一个图表上,那必须使用zabbix自定义图表功能,比如,我 们最常用的网卡流量监控,一张流量图上会包含进/出的流量信息.一个图表的数据可以来源一台主机,也可以来源于多台主机 创