import pymysql as MySQLdb
import time
import datetime
import xlsxwriter # zabbix数据库信息:
zdbhost = 'xxx.xxx.xxx.xxx'
zdbuser = 'MySQL-username'
zdbpass = MySQL-PassWord'
zdbport = 3306
zdbname = 'zabbix-DBName' # 生成文件名称:
xlsfilename = 'Group_Production_Server.xlsx' # 需要查询的key列表 [名称,表名,key值,取值,格式化,数据整除处理]
keys = [
['CPU空闲率(%)', 'trends', 'system.cpu.util[,idle]', 'avg', '%.2f', 1],
['内存使用率(G)', 'trends_uint', 'vm.memory.size[total]', 'avg', '%.2f', 1],
['磁盘使用率(%)', 'trends', 'system.cpu.util[,iowait]', 'avg', '%.2f', 1],
] class ReportForm(object): def __init__(self):
"""打开数据库连接"""
self.conn = MySQLdb.connect(host=zdbhost, user=zdbuser, passwd=zdbpass, port=zdbport, db=zdbname)
self.cursor = self.conn.cursor()
# 生成zabbix哪个分组报表
self.groupname = 'Mysql'
# 获取IP信息:
self.IpInfoList = self.__getHostList() def __getHostList(self):
"""根据zabbix组名获取该组所有IP"""
# 查询组ID:
sql = '''select groupid from groups where name = '%s' ''' % self.groupname
self.cursor.execute(sql)
groupid = self.cursor.fetchone()[0]
# 根据groupid查询该分组下面的所有主机ID(hostid):
sql = '''select hostid from hosts_groups where groupid = '%s' ''' % groupid
self.cursor.execute(sql)
hostlist = self.cursor.fetchall()
# 生成IP信息字典:结构为{'119.146.207.19':{'hostid':10086L,},}
IpInfoList = {}
for i in hostlist:
hostid = i[0]
sql = '''SELECT ip from interface WHERE hostid = '%s' ''' % hostid
ret = self.cursor.execute(sql)
if ret:
IpInfoList[self.cursor.fetchone()[0]] = {'hostid': hostid}
return IpInfoList def __getItemid(self, hostid, itemname):
"""获取itemid""" sql = '''select itemid from items where hostid = '%s' and key_ = '%s' ''' % (hostid, itemname)
self.cursor.execute(sql)
itemid = self.cursor.fetchone()[0]
# print('hostid --> ', hostid)
# print('itemid --> ', itemid)
return itemid def getTrendsValue(self, type, itemid, start_time, stop_time):
"""查询trends_uint表的值,type的值为min,max,avg三种""" sql = '''select %s(value_%s) as result from trends where itemid = '%s' and clock >= '%s' and clock <= '%s' ''' % (
type, type, itemid, start_time, stop_time)
# print('trends --> ', sql)
self.cursor.execute(sql)
result = self.cursor.fetchone()[0]
if result == None:
result = 0
# print('trends - result --> ', result)
return result def getTrends_uintValue(self, type, itemid, start_time, stop_time):
"""查询trends_uint表的值,type的值为min,max,avg三种""" sql = '''select %s(value_%s) as result from trends_uint where itemid = '%s' and clock >= '%s' and clock <= '%s' ''' % (
type, type, itemid, start_time, stop_time)
# print('trends_uint --> ', sql)
self.cursor.execute(sql)
result = self.cursor.fetchone()[0] / 1073741824
if result:
result = int(result)
else:
result = 0
# print('trends_uint - result--> ', result)
return result def getLastMonthData(self, type, hostid, table, itemname):
"""根据hostid,itemname获取该监控项的值""" # 获取上个月的第20天和最后1天
ts_first = int(
time.mktime(datetime.date(datetime.date.today().year, datetime.date.today().month - 1, 20).timetuple()))
lst_last = datetime.date(datetime.date.today().year, datetime.date.today().month, 1) - datetime.timedelta(1)
ts_last = int(time.mktime(lst_last.timetuple()))
itemid = self.__getItemid(hostid, itemname)
function = getattr(self, 'get%sValue' % table.capitalize())
return function(type, itemid, ts_first, ts_last) def getInfo(self): # 循环读取IP列表信息
for ip, resultdict in zabbix.IpInfoList.items():
print("正在查询 IP:%-15s hostid:%5d 的信息!" % (ip, resultdict['hostid']))
# 循环读取keys,逐个key统计数据:
for value in keys:
print("\t正在统计 key_:%s" % value[2])
if not value[2] in zabbix.IpInfoList[ip]:
zabbix.IpInfoList[ip][value[2]] = {}
data = zabbix.getLastMonthData(value[3], resultdict['hostid'], value[1], value[2])
zabbix.IpInfoList[ip][value[2]][value[3]] = data def writeToXls2(self):
"""生成xls文件""" # 创建文件
workbook = xlsxwriter.Workbook(xlsfilename)
# 创建工作薄
worksheet = workbook.add_worksheet()
# 写入第一列:
worksheet.write(0, 0, "主机")
i = 1
for ip in self.IpInfoList:
worksheet.write(i, 0, ip)
i = i + 1
# 写入其他列:
for i in range(1, 5):
i = 1
for value in keys:
worksheet.write(0, i, value[0])
# 写入该列内容:
j = 1
for ip, result in self.IpInfoList.items():
if value[4]:
worksheet.write(j, i, value[4] % result[value[2]][value[3]])
else:
worksheet.write(j, i, result[value[2]][value[3]] / value[5])
j = j + 1
i = i + 1
workbook.close() def __del__(self):
"""关闭数据库连接""" self.cursor.close()
self.conn.close() if __name__ == "__main__":
zabbix = ReportForm()
zabbix.getInfo()
zabbix.writeToXls2()

参考: https://www.jb51.net/article/167771.htm

获取Zabbix 中资源的使用率的更多相关文章

  1. linux中使用top获取进程的资源占用信息

    在linux中使用top获取进程的资源占用信息: Cpu(s):  1.0%us,  0.0%sy,  0.0%ni, 98.3%id,  0.7%wa,  0.0%hi,  0.0%si,  0.0 ...

  2. Zabbix中获取各用户告警媒介分钟级统计

    任务内容: 获取Zabbix各用户告警媒介分钟级统计,形成趋势图,便于观察各用户在每分钟收到的告警数量,在后续处理中,可以根据用户在某时间段内(例如3分钟内)收到的邮件总数,来判断是否有告警洪水的现象 ...

  3. Spring core resourc层结构体系及JDK与Spring对classpath中资源的获取方式及结果对比

    1. Spring core resourc层结构体系 1.1. Resource相关结构体系 1.2. ResourceLoader相关体系 2. JDK与Spring对classpath中资源的获 ...

  4. 从加载DLL的中获取放置于Resources文件夹中资源字典的几种方法

    原文:从加载DLL的中获取放置于Resources文件夹中资源字典的几种方法 主程序 为 Main_Test.exe 被加载的DLL 为 Load_Test.dll  此DLL 中 有一个 文件夹Re ...

  5. linux下获取占用CPU资源最多的10个进程

    linux下获取占用CPU资源最多的10个进程,可以使用如下命令组合: ps aux|head -1;ps aux|grep -v PID|sort -rn -k +3|head linux下获取占用 ...

  6. linux下获取占用CPU资源最多的10个进程,可以使用如下命令组合:

    linux下获取占用CPU资源最多的10个进程,可以使用如下命令组合: ps aux|head -1;ps aux|grep -v PID|sort -rn -k +3|head linux下获取占用 ...

  7. zabbix 中监控windows 的typepref中的值

    监控项:typepref -qx在zabbix中实现: 1.测试zabbix-get 获取数据: /usr/local/zabbix/bin/zabbix_get -s 192.168.1.3 -p1 ...

  8. SpringMVC核心——参数获取与Servlet资源获取问题

    一.SpringMVC 使用 @PathVariable.@RequestParam.@RequestHeader.@CookieValue 等来解决参数获取问题. 1. @PathVariable: ...

  9. Yii中使用PHPexcel获取excel中数据

    1.view中代码如下: <form name="frmBatchSettle" id="" action="" method=&qu ...

随机推荐

  1. 【长期维护】C++休闲(修仙)躲方块小游戏

    左右键控制小球左右移动,上键加速,Esc退出. 一个‘@’20分 #include <windows.h> #include <bits/stdc++.h> #include ...

  2. [考试反思]1102csp-s模拟测试98:苟活

    好像没有什么粘文件得分的必要(本来就没多少分了也丢不了多少了) 而且从这次开始小绿框不代表首杀而代表手速了2333 其实我挺菜的,牛一个frepoen送掉100分才跟我并列%%%milkfun mik ...

  3. Scrapy爬取豆瓣图书数据并写入MySQL

    项目地址 BookSpider 介绍 本篇涉及的内容主要是获取分类下的所有图书数据,并写入MySQL 准备 Python3.6.Scrapy.Twisted.MySQLdb等 演示 代码 一.创建项目 ...

  4. 掌握git命令的正确使用姿势

    前言 最近在团队内部发起了一个小的python项目(用tkinter实现一个小工具),但是发现大家对git的使用还不太熟悉,不知道怎么同步代码.解决冲突等等.因为我觉得对测试工程师来说,git应该是必 ...

  5. 模拟示例raid 5(5块磁盘 3块做raid 2块做备份 ) raid 10(5块磁盘) 修改版

    RAID5:需要至少三块(含)硬盘,兼顾存储性能.数据安全和储存成本. RAID10:需要至少四块(含)硬盘,兼具速度和安全性,但成本很高. raid 10(5块磁盘) 1.添加硬盘设备(添加5块) ...

  6. Vue基础系列(四)——Vue中的指令(上)

    写在前面的话: 文章是个人学习过程中的总结,为方便以后回头在学习. 文章中会参考官方文档和其他的一些文章,示例均为亲自编写和实践,若有写的不对的地方欢迎大家和我一起交流. VUE基础系列目录 < ...

  7. vue的路由安全验证

    在传统的网页中: view层是由后端控制的,用户的请求到达后端的控制器中,只有当安安全全没有丝毫异常的情况下,后端才会将完成数据的渲染,返回给前端视图 前后端分离的项目: view层的切换权,转交给了 ...

  8. linux系统LNMP环境部署

    源码安装 nginx# yum -y install gcc openssl-devel# useradd -s /sbin/nologin nginx# tar xf nginx-1.14.0.ta ...

  9. 021.掌握Pod-Pod调度策略

    一 Pod生命周期管理 1.1 Pod生命周期 Pod在整个生命周期过程中被系统定义了如下各种状态. 状态值 描述 Pending API Server已经创建该Pod,且Pod内还有一个或多个容器的 ...

  10. hdu 5495 LCS (置换群)

    Sample Input231 2 33 2 161 5 3 2 6 43 6 2 4 5 1  Sample Output24 C/C++: #include <map> #includ ...