分布式监控系统Zabbix-批量添加聚合图形
之前部署了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-批量添加聚合图形的更多相关文章
- zabbix 批量添加聚合图形
环境为centos 脚本要在centos zabbix服务器上运行,zabbix server上运行 1.先把脚本部署到zabbix客户端,把脚本保存为nic.sh 存放路径确保zabbix可以访问 ...
- zabbix 批量生成聚合图形
通过插入数据库的方式批量生成 zabbix 聚合图形 原型图形 聚合的 sql 批量操作 .在聚合图形创建好一个聚合图形A.找出图形A的ID (创建图形的时候记得填写好行数和列数) select sc ...
- 分布式监控系统Zabbix--使用Grafana进行图形展示
今天介绍一款高颜值监控绘图工具Grafana,在使用Zabbix监控环境中,通常我们会结合Grafana进行图形展示.Grafana默认没有zabbix作为数据源,需要手动给zabbix安装一个插 ...
- 企业级分布式监控系统-Zabbix基础
1.基础分部 1.1Zabbix简介 Zabbix 是一个企业级的分布式开源监控方案. 1.2监控系统架构 C/S架构 客户端/服务器端,这种架构适合规模较小,处于同一地域的环境 C/P/S 客户端/ ...
- 分布式监控系统--zabbix
1Zabbix简介 Zabbix 是一个企业级的分布式开源监控方案. 2.监控系统架构 C/S架构 客户端/服务器端,这种架构适合规模较小,处于同一地域的环境 C/P/S 客户端/代理端/服务器端/, ...
- 企业级分布式监控系统--zabbix
目录 1.Zabbix简介 2.zabbix安装 3.工作原理 4.监控功能 5.监控系统架构 6.Zabbix系统架构 7.Zabbix组件构成 8.zabbix监控环境中基本概念 正文 回到顶部 ...
- 分布式监控系统Zabbix3.2添加自动发现磁盘IO并注册监控
zabbix并没有给我们提供这么一个模板来完成在Linux中磁盘IO的监控,所以我们需要自己来创建一个,在此还是在Linux OS中添加. 由于一台服务器中磁盘众多,如果只一两台可以手动添加,但服务 ...
- 【Zabbix】分布式监控系统Zabbix【二】
一.Zabbix基本操作 1.主机群组.主机.模板.触发器 a.创建主机群组和主机的过程比较简单,不再介绍 b.配置模板: 创建一个模板,将其分组到Template组,添加配置应用: 给应用创建监控项 ...
- 【Zabbix】分布式监控系统Zabbix【一】
一.Zabbix功能及特性简介 Zabbix可以获取cpu,内存,网卡,磁盘,日志等信息 1.Zabbix数据收集方式: a.Agent客户端(Agent客户端支持多平台部署) b.如果是无法安装客户 ...
随机推荐
- 使用NPOI导入导出Excel(xls/xlsx)数据到DataTable中
using System; using System.Collections.Generic; using System.Text; using System.IO; using NPOI.SS.Us ...
- Linux文件和目录的粘滞位(sticky bit)
今天维护系统时发现一个非常诡异的问题:AAA用户和BBB用户同属AAA组,但用AAA用户创建的文件,权限设置为777后,还是不能用BBB用户删除.诡异! 几经周转,发现AAA用户创建文件位置的上层目录 ...
- 用Python做股市数据分析(一)
本文由 伯乐在线 - 小米云豆粥 翻译.未经许可,禁止转载!英文出处:Curtis Miller.欢迎加入翻译组. 这篇博文是用Python分析股市数据系列两部中的第一部,内容基于我犹他大学 数学39 ...
- Nginx实现页面缓存
页面缓存 1.缓存指令 Nginx的缓存配置比较直观简单,具体有下面几个指令需要知道: A.proxy_cache_path 格式:proxy_cache_path path [levels=numb ...
- Hbase-2.0.0_04_Hbase原理
参考博客:Hadoop HBase概念学习系列 参考博客:Hadoop HBase概念学习系列之HBase里的Zookeeper(二十一) 参考博客:Hadoop HBase概念学习系列之HBase里 ...
- Hadoop第一阶段总结
来自为知笔记(Wiz)
- 20个最常用的Windows命令行
1. 中断命令执行Ctrl + Z 2. 文件/目录cd 切换目录例:cd // 显示当前目录例:cd .. // 进入父目录 3.创建目录md d:\mp3 // 在C:\建立mp3文件夹md d: ...
- Linux 小知识翻译 - 「端口和端口号」
这次说说「端口」和「端口号」. 平时经常会听人说「打开了80号端口」,为了安全「不要打开多余的端口」等等.那么,这里的端口或者端口号是什么呢? 首先,「端口」是TCP或者UDP上使用的概念,经常被比喻 ...
- 理解LSTM
本文基于Understanding-LSTMs进行概括整理,对LSTM进行一个简单的介绍 什么是LSTM LSTM(Long Short Term Memory networks)可以解决传统RNN的 ...
- 【转】玩玩你的Windows防火墙——穿透与防御
前言:在防火墙专区,我经常看见朋友们讨论,“某某防火墙的性能如何”,亦或是,“某某防火墙的防御能力如何”.实际上,一个防火墙所履行的基本职责便是“网络访问控制”,即放行我们允许的通信,阻止我们未允许的 ...