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

[root@zabbix01 ~]# cd /opt/
[root@zabbix01 opt]# ls
create_Disk_space_usage_screen.py create_screen.py ======================================================================================
[root@zabbix01 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 = 'qwkg@monitor'
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() ======================================================================================
[root@zabbix01 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 = 'qwkg@monitor'
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的值不一样。 批量生成聚合图形的操作如下:
[root@zabbix01 opt]# python create_screen.py -g '财务系统' -G 'Network traffic on bond0' -c 2 -n '财务系统---Network traffic on bond0'
[root@zabbix01 opt]# python create_screen.py -g '财务系统' -G 'CPU load' -c 2 -n '财务系统---CPU load'
[root@zabbix01 opt]# python create_screen.py -g '财务系统' -G 'CPU utilization' -c 2 -n '财务系统---CPU utilization'
[root@zabbix01 opt]# python create_screen.py -g '财务系统' -G 'Memory usage' -c 2 -n '财务系统---Memory usage'
[root@zabbix01 opt]# python create_screen.py -g '财务系统' -G 'Read and Write speed on /' -c 2 -n '财务系统---Read and Write speed on /'
[root@zabbix01 opt]# python create_screen.py -g '财务系统' -G 'Read and Write speed on /data' -c 2 -n '财务系统---Read and Write speed on /data'
[root@zabbix01 opt]# python create_Disk_space_usage_screen.py -g '财务系统' -G 'Disk space usage /' -c 3 -n '财务系统---Disk space usage /'
[root@zabbix01 opt]# python create_Disk_space_usage_screen.py -g '财务系统' -G 'Disk space usage /data' -c 3 -n '财务系统---Disk space usage /data' 对于以上命令中的参数解释:
-g 要显示zabbix的群组(注意这个是在zabbix界面的"图形"里显示的"群组"选项,不能随便写,必须是存在zabbix里的)。
-G 要显示的zabbix图形(注意这个是在zabbix界面的"图形"里显示的"图形"选项,不能随便写,必须是存在zabbix里的)。
-c 显示几列,注意要调整脚本里的:'width': ,'height': 参数来设置大小。
-n 在screen 里面显示的名称。 上面的命令的意思就是:把"财务系统"组里面每个服务器的bond0网卡、load负载、磁盘等监控图形,接每列4个图形(磁盘的按美3个图形)的显示在聚合图形里。 同理:如果添加其他主机组,即将上面的"财务系统" 统一替换掉即可!

如果后续zabbix监控的主机群组里又追加了新机器,那么就把之前生产的该群组的聚合图形删除,然后再按照上面的脚本命令再次重新生成聚合图形,这样新加入到主机群组内机器的聚合图形就会显示出来了。

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

  1. zabbix 批量添加聚合图形

    环境为centos 脚本要在centos zabbix服务器上运行,zabbix server上运行 1.先把脚本部署到zabbix客户端,把脚本保存为nic.sh 存放路径确保zabbix可以访问 ...

  2. zabbix 批量生成聚合图形

    通过插入数据库的方式批量生成 zabbix 聚合图形 原型图形 聚合的 sql 批量操作 .在聚合图形创建好一个聚合图形A.找出图形A的ID (创建图形的时候记得填写好行数和列数) select sc ...

  3. 分布式监控系统Zabbix--使用Grafana进行图形展示

      今天介绍一款高颜值监控绘图工具Grafana,在使用Zabbix监控环境中,通常我们会结合Grafana进行图形展示.Grafana默认没有zabbix作为数据源,需要手动给zabbix安装一个插 ...

  4. 企业级分布式监控系统-Zabbix基础

    1.基础分部 1.1Zabbix简介 Zabbix 是一个企业级的分布式开源监控方案. 1.2监控系统架构 C/S架构 客户端/服务器端,这种架构适合规模较小,处于同一地域的环境 C/P/S 客户端/ ...

  5. 分布式监控系统--zabbix

    1Zabbix简介 Zabbix 是一个企业级的分布式开源监控方案. 2.监控系统架构 C/S架构 客户端/服务器端,这种架构适合规模较小,处于同一地域的环境 C/P/S 客户端/代理端/服务器端/, ...

  6. 企业级分布式监控系统--zabbix

    目录 1.Zabbix简介 2.zabbix安装 3.工作原理 4.监控功能 5.监控系统架构 6.Zabbix系统架构 7.Zabbix组件构成 8.zabbix监控环境中基本概念 正文 回到顶部 ...

  7. 分布式监控系统Zabbix3.2添加自动发现磁盘IO并注册监控

     zabbix并没有给我们提供这么一个模板来完成在Linux中磁盘IO的监控,所以我们需要自己来创建一个,在此还是在Linux OS中添加. 由于一台服务器中磁盘众多,如果只一两台可以手动添加,但服务 ...

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

    一.Zabbix基本操作 1.主机群组.主机.模板.触发器 a.创建主机群组和主机的过程比较简单,不再介绍 b.配置模板: 创建一个模板,将其分组到Template组,添加配置应用: 给应用创建监控项 ...

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

    一.Zabbix功能及特性简介 Zabbix可以获取cpu,内存,网卡,磁盘,日志等信息 1.Zabbix数据收集方式: a.Agent客户端(Agent客户端支持多平台部署) b.如果是无法安装客户 ...

随机推荐

  1. 第七章 鼠标(CHECKER4)

    /*--------------------------------------------- CHECKER4.C -- Mouse Hit-Test Demo Program No.4 (c) C ...

  2. Windows服务器搭建Redis

    1.下载安装Redis https://github.com/MicrosoftArchive/redis/releases 可以下载安装版(.msi)也可以下载解压版(.zip). 我直接下载的安装 ...

  3. .NET Core launch.json 简介

    1.环境 Windows,.NET Core 2.0,VS Code dotnet> dotnet new console -o myApp 2.launch.json配置文件 { // Use ...

  4. kafka 配置文件参数详解

    kafka的配置分为 broker.producter.consumer三个不同的配置 一 BROKER 的全局配置 最为核心的三个配置 broker.id.log.dir.zookeeper.con ...

  5. 类装载器-ClassLoader

    类装载器的工作机制 类装载器就是寻找类的字节码文件并构造出类在JVM内部表示对象的组件.在Java中,类装载器把一个类装入JVM中,需要经过以下步骤: 装载:查找和导入Class文件. 链接:执行校验 ...

  6. 基础数据类型之AbstractStringBuilder

    String内部是一个private final char value[]; 也就意味着每次调用的各种处理方法,返回的字符串都是一个新的,性能上,显然.... 所以,对于可变字符序列的需求是很明确的 ...

  7. golang的reflection(转)

    作者:BGbiao 链接:https://www.jianshu.com/p/42c19f88df6c 來源:简书 反射reflection 可以大大提高程序的灵活性,使得interface{}有更大 ...

  8. Source Insight4 破解安装

    首先确保你在官网下载了原版4.0并安装好了. 1,下载如下的sourceinsight4.exe文件,替换安装文件夹下的sourceinsight4.exe. 链接:http://pan.baidu. ...

  9. pb数据窗口之间的传参

    问题描述: 通过一个窗口打开一个子窗口并传递指定参数查询详细信息 解决方法: 在前者窗体的user object下的itemchanged事件中,相应位置加入openwithparm函数 :   op ...

  10. 添加Nginx为系统服务(设置开机启动)

    在本节中,我们将创建一个脚本,将Nginx守护进程转换为实际的系统服务. 这有两个作用:守护程序可以使用标准命令控制,更重要的是,它可以在系统启动时自动启动,并在系统关闭时停止. System V s ...