准备做一个每周自动的巡检报告,数据来源于zabbix,通过python读取zabbix数据库获取数据并制作成excel表格,

本来打算直接邮件发送到指定邮箱,但是都被SMTP过滤掉了,试过126和QQ的,其他的不知道。

操作系统:Cenos 6.7

python版本: python3.5

以下代码是亲测并生产环境使用的:

#!/usr/local/python/bin/python3.5
import pymysql
import time, datetime
import smtplib
import os
from email.mime.text import MIMEText
from email.header import Header
# zabbix数据库信息 zdbhost = 'zabbix服务器ip'
zdbuser = 'zabbix数据库用户名'
zdbpass = 'zabbix数据库密码'
zdbport = 3306
zdbname = 'zabbix' d = datetime.datetime.now()
day = datetime.date.today()
keys = {
'trends_uint': [
'net.if.in[eth0]',
'net.if.out[eth0]',
'vfs.fs.size[/,used]',
'vm.memory.size[available]',
],
'trends': [
'system.cpu.load[percpu,avg5]',
'system.cpu.util[,idle]',
],
}
class ReportForm: def __init__(self):
self.conn = pymysql.connect(host=zdbhost, user=zdbuser, passwd=zdbpass, port=zdbport, db=zdbname)
self.cursor = self.conn.cursor()
self.groupname = 'Linux servers'
self.IpInfoList = self.__getHostList()
# return self.IpInfoList def __getHostList(self):
sql = '''select groupid from groups where name = '%s' ''' % self.groupname
self.cursor.execute(sql)
groupid = self.cursor.fetchone()[0]
print(groupid) sql = '''select hostid from hosts_groups where groupid = %s''' % groupid
self.cursor.execute(sql)
hostlist = self.cursor.fetchall() IpInfoList = {}
for i in hostlist:
hostid = i[0]
sql = '''select host from hosts where status = 0 and hostid = %s''' % hostid
ret = self.cursor.execute(sql)
if ret:
IpInfoList[self.cursor.fetchone()[0]] = {'hostid': hostid}
return IpInfoList def __getItemid(self, hostid, itemname):
sql = '''select itemid from items where hostid = %s and key_ = '%s' ''' % (hostid, itemname)
if self.cursor.execute(sql):
itemid = self.cursor.fetchone()[0]
else:
itemid = None
return itemid def getTrendsValue(self, itemid, start_time, stop_time):
resultlist = {}
for type in ['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)
self.cursor.execute(sql)
result = self.cursor.fetchone()[0]
if result == None:
result = 0
resultlist[type] = result
return resultlist def getTrends_uintValue(self, itemid, start_time, stop_time):
resultlist = {}
for type in ['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)
self.cursor.execute(sql)
result = self.cursor.fetchone()[0]
if result:
resultlist[type] = int(result)
else:
resultlist[type] = 0
return resultlist def get_week(self, d):
dayscount = datetime.timedelta(days=d.isoweekday())
dayto = d - dayscount
sixdays = datetime.timedelta(days=6)
dayfrom = dayto - sixdays
date_from = datetime.datetime(dayfrom.year, dayfrom.month, dayfrom.day, 0, 0, 0)
date_to = datetime.datetime(dayto.year, dayto.month, dayto.day, 23, 59, 59)
ts_first = int(time.mktime(datetime.datetime(dayfrom.year, dayfrom.month, dayfrom.day, 0, 0, 0).timetuple()))
ts_last = int(time.mktime(datetime.datetime(dayto.year, dayto.month, dayto.day, 23, 59, 59).timetuple()))
return ts_first, ts_last def getLastMonthData(self, hostid, table, itemname):
ts_first = self.get_week(d)[0]
ts_last = self.get_week(d)[1]
itemid = self.__getItemid(hostid, itemname)
# function = getattr(self, 'get %s Value' % table.capitalize())
function = getattr(self, 'get%sValue' % table.capitalize())
return function(itemid, ts_first, ts_last) def getinfo(self):
for ip, resultdict in zabbix.IpInfoList.items():
print("正在查询 IP:%-15s hostid:%5d 的信息!" % (ip, resultdict['hostid']))
for table, keylists in keys.items():
for key in keylists:
print("\t正在统计 key_:%s" % key)
data = zabbix.getLastMonthData(resultdict['hostid'], table, key)
zabbix.IpInfoList[ip][key] = data def writeToXls(self):
dayscount = datetime.timedelta(days=d.isoweekday())
dayto = d - dayscount
sixdays = datetime.timedelta(days=6)
dayfrom = dayto - sixdays
date_from = datetime.date(dayfrom.year, dayfrom.month, dayfrom.day)
date_to = datetime.date(dayto.year, dayto.month, dayto.day)
'''生成xls文件'''
try:
import xlsxwriter
# 创建文件
workbook = xlsxwriter.Workbook('/usr/monitor/week/%s_%s巡检报告.xlsx' % (date_from, date_to))
# 创建工作薄
worksheet = workbook.add_worksheet()
# 写入标题(第一行)
i = 0
for value in ["主机", "CPU平均空闲值", "CPU最小空闲值", "可用平均内存(单位M)", "可用最小内存(单位M)", "CPU5分钟负载", "进入最大流量(单位Kbps)",
"进入平均流量(单位Kbps)", "出去最大流量(单位Kbps)", "出去平均流量(单位Kbps)"]:
worksheet.write(0, i, value)
i = i + 1
# 写入内容:
j = 1
for ip, value in self.IpInfoList.items():
worksheet.write(j, 0, ip)
worksheet.write(j, 1, '%.2f' % value['system.cpu.util[,idle]']['avg'])
worksheet.write(j, 2, '%.2f' % value['system.cpu.util[,idle]']['min'])
worksheet.write(j, 3, '%dM' % int(value['vm.memory.size[available]']['avg'] / 1024 / 1024))
worksheet.write(j, 4, '%dM' % int(value['vm.memory.size[available]']['min'] / 1024 / 1024))
worksheet.write(j, 5, '%.2f' % value['system.cpu.load[percpu,avg5]']['avg'])
worksheet.write(j, 6, value['net.if.in[eth0]']['max'] / 1000)
worksheet.write(j, 7, value['net.if.in[eth0]']['avg'] / 1000)
worksheet.write(j, 8, value['net.if.out[eth0]']['max'] / 1000)
worksheet.write(j, 9, value['net.if.out[eth0]']['avg'] / 1000)
j = j + 1
workbook.close()
except Exception as e:
print(e)
def __del__(self):
'''关闭数据库连接'''
self.cursor.close()
self.conn.close() def sendmail(self):
sender = '发送者邮箱'
receiver = ['接收者1', '接收者2', '接收者3']
subject = '上周巡检报告'
smtpserver = 'smtp.126.com'
username = '发送者邮箱'
password = 'smtp认证密码' msg = MIMEText('上周巡检报告已生成,请检查。\n报告目录:/usr/monitor\n由于邮件无法发送excel文档,请使用ftp登录'
'查看。\nftp地址:xxx:端口\nftp用户名:xxx\n', 'plain', 'utf-8') # 中文需参数‘utf-8',单字节字符不需要
msg['Subject'] = Header(subject, 'utf-8')
msg['From'] = 'Robot<发送者邮箱>'
msg['To'] = "接收者名字"
smtp = smtplib.SMTP()
smtp.connect('smtp.126.com')
smtp.login(username, password)
smtp.sendmail(sender, receiver, msg.as_string())
print('发送成功!')
smtp.quit() if __name__ == "__main__":
zabbix = ReportForm()
zabbix.getinfo()
zabbix.writeToXls()
zabbix.sendmail()

  说明: 由于邮件无法发送附件为excel,所以我这里写了一个发送通知邮件的方法,需要通过ftp登录并下载。

附上生成execl部分截图:

aaarticlea/png;base64,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" alt="" />

[ python3 ] 基于zabbix 自动生成xlsx监控文档的更多相关文章

  1. 使用jsdoc-toolkit来自动生成js api文档

    近来前端组小盆友开发的类库越来越多,很多情况下彼此不知道写了些什么方法,为了更好的合作提高工作效率,找了个比较好的api文档生成方法.使用jsdoc-toolkit来自动生成js api文档. 一.  ...

  2. Go学习笔记(六) | 使用swaggo自动生成Restful API文档(转)

    关于Swaggo 或许你使用过Swagger, 而 swaggo就是代替了你手动编写yaml的部分.只要通过一个命令就可以将注释转换成文档,这让我们可以更加专注于代码. 目前swaggo主要实现了sw ...

  3. Golang使用swaggo自动生成Restful API文档

    #关于Swaggo 相信很多程序猿和我一样不喜欢写API文档.写代码多舒服,写文档不仅要花费大量的时间,有时候还不能做到面面具全.但API文档是必不可少的,相信其重要性就不用我说了,一份含糊的文档甚至 ...

  4. Spring Boot学习笔记 - 整合Swagger2自动生成RESTful API文档

    1.添加Swagger2依赖 在pom.xml中加入Swagger2的依赖 <!--swagger2--> <dependency> <groupId>io.spr ...

  5. C# 自动生成代码API文档

    暂时没学会正规的转载style临时记录一下 NET中的规范标准注释(一) -- XML注释标签讲解 http://www.cnblogs.com/mq0036/p/3544264.html NET中的 ...

  6. 插件式WebApi服务及自动生成Api帮助文档

    上一篇博客中,讲到了将WebApi Host到控制台和IIS,本篇总结一下如何将WebApi的Service以插件的形式进行动态部署,并设置Hoster的首页显示Api帮助文档,当然,也包括动态部署进 ...

  7. Spring MVC学习总结(9)——Spring MVC整合swagger自动生成api接口文档

    Swagger 号称:世界最流行的API框架,官网:http://swagger.io/,Swagger 是一个规范和完整的框架,用于生成.描述.调用和可视化 RESTful 风格的 Web 服务.总 ...

  8. MFC:“Debug Assertion Failed!” ——自动生成的单文档程序项目编译运行就有错误

    今天照着孙鑫老师的VC++教程学习文件的操作,VS2010,单文档应用程序,项目文件命名为File,也就有了自动生成的CFileDoc.CFileView等类,一进去就编译运行(就是最初自动生成的项目 ...

  9. 利用ShowDoc自动生成api接口文档

    最近在做新项目,感觉写完一个接口 还要去再写一遍api文档 挺浪费时间的,所以借用ShowDoc的api开放功能 自动生成api文档. 首先 去 https://www.showdoc.cc/ 注册一 ...

随机推荐

  1. Leetcode 672.灯泡开关II

    灯泡开关II 现有一个房间,墙上挂有 n 只已经打开的灯泡和 4 个按钮.在进行了 m 次未知操作后,你需要返回这 n 只灯泡可能有多少种不同的状态. 假设这 n 只灯泡被编号为 [1, 2, 3 . ...

  2. linux下easy_install的安装与使用详解

    Python中的easy_install工具用起来非常好用,它的作用类似于Php中的pear,或者Ruby中的gem,或者Perl中的cpan. 1.easy_install安装 如果想使用easy_ ...

  3. 微信公众号开发java框架:wx4j(MaterialUtils篇)

    wx4j-MaterialUtils的使用 函数说明:上传永久视频素材 参数:文件路径.视频描述(通过setter填充内容即可) 返回值:微信服务器返回的json字符串 public static S ...

  4. 【UML】状态图介绍

    1.Statechart Diagram 即状态图,主要用于描述一个对象在其生存期间的动态行为,表现为一个对象所经历的状态序列.引起状态转移的事件(Event).因状态转移而伴随的动作(Action) ...

  5. js+jquery 常用选择器函数

    一.获取当前标签 JS: this,如下: <button onclick="fun(this)"></button> Jquery,如下: $(" ...

  6. TCP的挥手协议和握手协议

    三次握手协议:三次握手协议的主要过程是交互彼此之间的初始序列号,如果没有确认的ACK帧可以么?肯定是可以的 client A -------> server B client A 发送了自己的初 ...

  7. Storm之详解spout、blot

    1.Topology的构造backtype.storm.topology.TopologyBuilder 2.Spout组件的编写实现接口 backtype.storm.topology.IRichS ...

  8. powershell入门教程-v0.3版

    powershell入门教程-v0.3版 来源 https://www.itsvse.com/thread-3650-1-1.html 参考 http://www.cnblogs.com/piapia ...

  9. Any gotchas at all with converting from MyISAM to InnoDB?

    Q: I'm ready to move from MyISAM to InnoDB but wanted to know if there was a full list of things to ...

  10. 跨域请求json数据

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...