之前部署了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. 洗礼灵魂,修炼python(47)--巩固篇—定义类的方法之@classmethod,@staticmethod

    定义类的方法,相信你会说,不就是在class语句下使用def () 就是定义类的方法了嘛,是的,这是定义的方法的一种,而且是最普通的方式 首先,我们已经知道有两种方式: 1.普通方法: 1)与类无关的 ...

  2. VS2015 无法启动 IIS Express Web 服务器 解决方案

    VS2015 IIS Express 无法启动Web 解决方案 [亲测已成功] 1.我的电脑—管理—事件查看器—Windows日志—应用程序: 详细信息会提示你:[模块 DLL C:\Program ...

  3. 4.2Python数据类型(2)之布尔类型

    返回总目录 目录: 1.布尔类型的概念和分类: 2.布尔类型的本质 3.布尔类型的应用 (一)布尔类型的概念和分类: (1)概念: 布尔类型(bool)就是用于判断真假的数据类型 (2)分类: Pyt ...

  4. Hadoop2.7.6_04_HDFS的Shell操作与常见问题

    1. HDFS的shell操作 1.1. 支持的命令及参数 [yun@mini05 zhangliang]$ hadoop fs Usage: hadoop fs [generic options] ...

  5. Team Dipper

    Team Dipper Dipper 来自追梦的7星,We Are From Now On! 说什么?图小了?没问题满足你! No.1 沉默深邃之境的术士,源自奥术之境的PHP探寻者 03150225 ...

  6. Java JDK1.5、1.6、1.7新特性整理

    转载请注明出处:http://www.cnblogs.com/tony-yang-flutter 一.Java JDK1.5的新特性 1.泛型: List<String> strs = n ...

  7. JS中=>,>>>是什么意思

    最近经常看到 JS中=>,符号,于是查了一下别人的博客 =>是es6语法中的arrow function 举例:(x) => x + 6 相当于   function(x){ ret ...

  8. Python解析器

    当我们编写Python代码时,我们得到的是一个包含Python代码的以.py为扩展名的文本文件.要运行代码,就需要Python解释器去执行.py文件. 由于整个Python语言从规范到解释器都是开源的 ...

  9. Rinkeby中测试币的申请

    https://www.rinkeby.io/#faucet 从这个页面可以看见测试币的请求是有要求的,下面说明怎么做: 之前使用的是google账号,即第二种方式来获取.后面gmail出现了问题,一 ...

  10. ORA-245: In RAC environment from 11.2 onwards Backup Or Snapshot controlfile needs to be in shared location (Doc ID 1472171.1)

    巡检时遇到错误如下: alert日志: Wed Dec 19 01:00:29 2018Errors in file /oracle/base/diag/rdbms/usap/usap1/trace/ ...