Python自动化导出zabbix数据并发邮件脚本

Zabbix没有报表导出的功能,于是通过编写脚本导出zabbix数据并发邮件。效果如下:

下面是脚本,可根据自己的具体情况修改:

#!/usr/bin/python`
`#coding:utf-8`
`import MySQLdb`
`import time,datetime`
`import xlsxwriter`
`import smtplib`
`from` `email.mime.text import MIMEText`
`from` `email.mime.multipart import MIMEMultipart`
`from` `email.header import Header`
`#zabbix数据库信息:`
`zdbhost = ``'127.0.0.1'`
`zdbuser = ``'zabbix'`
`zdbpass = ``'zabbix'`
`zdbport = 3306`
`zdbname = ``'zabbix'`
`#生成文件名称:`
`xlsfilename = ``'Group_Production_Server.xlsx'`
`#需要查询的key列表 [名称,表名,key值,取值,格式化,数据整除处理]`
`keys = [`
`#  ['CPU核心数','trends_uint','system.cpu.num','avg','',1],`
`#['CPU平均空闲值','trends','system.cpu.util[,idle]','avg','%.2f',1],`
`#['CPU最小空闲值','trends','system.cpu.util[,idle]','min','%.2f',1],`
`[``'CPU使用率(%)'``,``'trends'``,``'CPU_used'``,``'avg'``,``'%.2f'``,1],`
`#['内存大小(单位G)','trends_uint','vm.memory.size[total]','avg','',1048576000],`
`#['剩余内存(单位G)','trends_uint','vm.memory.size[available]','avg','',1048576000],`
`[``'内存使用率(%)'``,``'trends'``,``'Memory_used'``,``'avg'``,``'%.2f'``,1],`
`#  ['可用平均内存(单位G)','trends_uint','vm.memory.size[available]','avg','',1048576000],`
`#  ['可用最小内存(单位G)','trends_uint','vm.memory.size[available]','min','',1048576000],`
`#  ['swap总大小(单位G)','trends_uint','system.swap.size[,total]','avg','',1048576000],`
`#  ['swap平均剩余(单位G)','trends_uint','system.swap.size[,free]','avg','',1048576000],`
`#  ['根分区总大小(单位G)','trends_uint','vfs.fs.size[/,total]','avg','',1073741824],`
`#  ['根分区平均剩余(单位G)','trends_uint','vfs.fs.size[/,free]','avg','',1073741824],`
`#['磁盘总大小(单位G)','trends_uint','vfs.fs.size[/fs01,total]','avg','',1073741824],`
`#['磁盘剩余(单位G)','trends_uint','vfs.fs.size[/fs01,free]','avg','',1073741824],`
`[``'磁盘使用率(%)'``,``'trends'``,``'fs01_used'``,``'avg'``,``'%.2f'``,1],`
`#  ['进入最大流量(单位Kbps)','trends_uint','net.if.in[eth0]','max','',1000],`
`#  ['进入平均流量(单位Kbps)','trends_uint','net.if.in[eth0]','avg','',1000],`
`#  ['出去最大流量(单位Kbps)','trends_uint','net.if.out[eth0]','max','',1000],`
`#  ['出去平均流量(单位Kbps)','trends_uint','net.if.out[eth0]','avg','',1000],`
`]`
`class` `ReportForm:`
`def __init__(self):`
`''``'打开数据库连接'``''`
`self.conn = MySQLdb.connect(host=zdbhost,user=zdbuser,passwd=zdbpass,port=zdbport,db=zdbname)`
`self.cursor = self.conn.cursor(cursorclass=MySQLdb.cursors.DictCursor)`
`#生成zabbix哪个分组报表`
`self.groupname = ``'Group_Production_Server'`
`#获取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()[``'groupid'``]`
`#根据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[``'hostid'``]`
`sql = ``''``'select host from hosts where status = 0 and hostid = '``%s``' '``''` `% hostid`
`ret = self.cursor.execute(sql)`
`if` `ret:`
`IpInfoList[self.cursor.fetchone()[``'host'``]] = {``'hostid'``:hostid}`
`return` `IpInfoList`
`def __getItemid(self,hostid,itemname):`
`''``'获取itemid'``''`
`sql = ``''``'select itemid from items where hostid = '``%s``' and key_ = '``%s``' '``''` `% (hostid, itemname)`
`if` `self.cursor.execute(sql):`
`itemid = self.cursor.fetchone()[``'itemid'``]`
`else``:`
`itemid = None`
`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)`
`self.cursor.execute(sql)`
`result = self.cursor.fetchone()[``'result'``]`
`if` `result == None:`
`result = 0`
`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)`
`self.cursor.execute(sql)`
`result = self.cursor.fetchone()[``'result'``]`
`if` `result:`
`result = ``int``(result)`
`else``:`
`result = 0`
`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 getNowData(self):`
`nowtime = datetime.datetime.now().strftime(``'%Y-%m-%d'``)`
`return` `nowtime`
`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,``"主机"``.decode(``'utf-8'``))`
`i = 1`
`for` `ip ``in` `self.IpInfoList:`
`worksheet.write(i,0,ip)`
`i = i + 1`
`#写入其他列:`
`i = 1`
`for` `value ``in` `keys:`
`worksheet.write(0,i,value[0].decode(``'utf-8'``))`
`#写入该列内容:`
`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()`
`def Send_Email(self):`
`sender = ``'from@runoob.com'`
`receivers = [``'hejianlai@pci.cn'``] # 接收邮件,可设置为你的QQ邮箱或者其他邮箱`
`#创建一个带附件的实例`
`message = MIMEMultipart()`
`message[``'From'``] = Header(``"Zabbix_server"``, ``'utf-8'``)`
`message[``'To'``] = Header(``"it"``, ``'utf-8'``)`
`subject = ``'生产环境虚机资源使用情况'`
`message[``'Subject'``] = Header(subject, ``'utf-8'``)`
`#邮件正文内容`
`message.attach(MIMEText(``'生产环境虚机资源使用情况'``, ``'plain'``, ``'utf-8'``))`
`# 构造附件1,传送当前目录下的 test.txt 文件`
`att1 = MIMEText(open(``'Group_Production_Server.xlsx'``, ``'rb'``).read(), ``'base64'``, ``'utf-8'``)`
`att1[``"Content-Type"``] = ``'application/octet-stream'`
`# 这里的filename可以任意写,写什么名字,邮件中显示什么名字`
`att1[``"Content-Disposition"``] = ``'attachment; filename="Group_Production_Server.xlsx"'`
`message.attach(att1)`
`try``:`
`smtpObj = smtplib.SMTP(``'localhost'``)`
`smtpObj.sendmail(sender, receivers, message.as_string())`
`print ``"邮件发送成功"`
`except smtplib.SMTPException:`
`print ``"Error: 无法发送邮件"`
`if` `__name__ == ``"__main__"``:`
`zabbix = ReportForm()`
`zabbix.getInfo()`
`zabbix.writeToXls2()`
`zabbix.Send_Email()`

总结

以上所述是小编给大家介绍的Python自动化导出zabbix数据并发邮件脚本,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

(0)

相关推荐

  • Python实现定时备份mysql数据库并把备份数据库邮件发送

    一.先来看备份mysql数据库的命令 mysqldump -u root --password=root --database abcDataBase > c:/abc_backup.sql 二.写Python程序 BackupsDB.py #!/usr/bin/python # -*- coding: UTF-8 -*- ''''' zhouzhongqing 备份数据库 ''' import os import time import sched import smtplib from em

  • 详解python实现读取邮件数据并下载附件的实例

    详解python实现读取邮件数据并下载附件的实例 实现结果图: 实现代码: #!/usr/bin/python2.7 # _*_ coding: utf-8 _*_ """ @Author: MarkLiu """ import poplib import email from email.parser import Parser from email.header import decode_header from email.utils im

  • python实现zabbix发送短信脚本

    本文实例为大家分享了zabbix发送短信的具体代码,供大家参考,具体内容如下 使用方法 ./sendSMS.py PHONE_NUMBER args_2 SMS_MSG 接收参数输入 参数一: 接收手机号(zabbix传来的第1个参数,报警接收手机号),第一个参数可以对比发送邮件的脚本 参数二: 短信主题(zabbix传来的第2个参数,报警主题),在命令行测试必须输入,用来占位,脚本中并不获取这个参数 参数三: 短信内容(zabbix传来的第3个参数,报警内容) 手动调试方法 python se

  • python3+mysql查询数据并通过邮件群发excel附件

    本文实例为大家分享了Android九宫格图片展示的具体代码,供大家参考,具体内容如下 连接.查询mysql,导入到excel文件,定时群发邮件与附件. 主要用到pymysql ,smtplib , xlwt #1. 导入模块 import pymysql #Python3的mysql模块,Python2 是mysqldb import os import datetime #定时发送,以及日期 import shutil #文件操作 import smtplib #邮件模块 from email

  • zabbix利用python脚本发送报警邮件的方法

    前言 zabbix是个非常强大的监控工具,可以监控linux和windows的服务器数据,也可以通过自定义key来扩展默认的监控项,但是自带的邮件报警提供的信息却不太友善.本文想通过自定脚本的方式,实现在报警邮件的同时发送对应的图像和url连接. 步骤如下: 1.编辑zabbix_server.conf文件,修改AlertScriptsPath参数,该参数用于指定外部脚本的绝对路径. vim /etc/zabbix/zabbix_server.conf AlertScriptsPath=/usr

  • Python从ZabbixAPI获取信息及实现Zabbix-API 监控的方法

    Python编写从ZabbixAPI获取信息 此脚本用Python3.6执行是OK的. # -*- coding: utf-8 -*- import json import urllib.request, urllib.error, urllib.parse class ZabbixAPI: def __init__(self): self.__url = 'http://192.168.56.102/zabbix/api_jsonrpc.php' self.__user = 'admin' s

  • python批量添加zabbix Screens的两个脚本分享

    前言 在最初搭建公司监控系统的时候,最头疼的是需要把同类项目组的相同图形添加到一个Screens,由于只能一个一个的添加,非常耗时耗经历. 下面分享两个脚本来解决这个头疼的问题. 1.将单个主机的所有图形添加到一个Screens 使用方法 #更改main()函数里的url.username.password #参数一:主机名 #参数二:筛选图名称 python zabbix_screen_host.py 'zabbixserver' 'zabbixserver' zabbix_screen_ho

  • Python实现的查询mysql数据库并通过邮件发送信息功能

    本文实例讲述了Python实现的查询mysql数据库并通过邮件发送信息功能.分享给大家供大家参考,具体如下: 这里使用Python查询mysql数据库,并通过邮件发送宕机信息. Python代码如下: #-*- coding: UTF-8 -*- #!/usr/bin/env python ''''' author:qlzhong Created on 2015-6-29 征途宕机日志统计汇总 ''' import MySQLdb import time import datetime impo

  • Python自动化导出zabbix数据并发邮件脚本

    Zabbix没有报表导出的功能,于是通过编写脚本导出zabbix数据并发邮件.效果如下: 下面是脚本,可根据自己的具体情况修改: #!/usr/bin/python` `#coding:utf-8` `import MySQLdb` `import time,datetime` `import xlsxwriter` `import smtplib` `from` `email.mime.text import MIMEText` `from` `email.mime.multipart imp

  • Python自动化之数据驱动让你的脚本简洁10倍【推荐】

    前言 数据驱动是一种思想,让数据和代码进行分离,比如爬虫时,我们需要分页爬取数据时,我们往往把页数 page 参数化,放在 for 循环 range 中,假如没有 range 这个自带可以生产数字序列的方法可以用,我们是不是得手动逐个添加? 现实场景中就存在大量这样的例子,比如我之前写的爬取上海各地区房租情况的时候,对地区进行遍历的时候,为了偷懒,我直接把这些地区的拼音全称放在了列表里,组合成各地区房源的链接.最后文章写完了,有读者反馈,少了徐汇区的统计数据.这种小数量的数据都出现了纰漏,可想而

  • python获取外网IP并发邮件的实现方法

    第一步:通过ip138来爬取外网ip 第二步:通过python的smtplib模块和email来发送邮件,具体用法去网上搜索, 下面是代码示例: #!/usr/bin/env python #coding:utf-8 import urllib2 import re import smtplib from email.MIMEText import MIMEText from email.Header import Header #################################

  • python导入导出redis数据的实现

    目录 一.导出redis某个库的数据 使用python向Redis批量导入数据 二.导入redis某个库的数据 注:以String类型为例 一.导出redis某个库的数据 import redis import json file_path = "why.json" redis_conn = redis.Redis(host="192.168.1.123", port=6387, password="123zxcv", db=2, decode_

  • python导出hive数据表的schema实例代码

    本文研究的主要问题是python语言导出hive数据表的schema,分享了实现代码,具体如下. 为了避免运营提出无穷无尽的查询需求,我们决定将有查询价值的数据从mysql导入hive中,让他们使用HUE这个开源工具进行查询.想必他们对表结构不甚了解,还需要为之提供一个表结构说明,于是编写了一个脚本,从hive数据库中将每张表的字段即类型查询出来,代码如下: #coding=utf-8 import pyhs2 from xlwt import * hiveconn = pyhs2.connec

  • Python数据处理-导入导出excel数据

    目录 一.xlwt库将数据导入Excel 1.将数据写入一个Excel文件 2.定制Excel表格样式 3.元格对齐 4.单元格的背景色 5.单元格边框 二.xlrd库读取Excel中的数据 1.读取Excel文件 2.工作表的相关操作 3.处理时间数据 前言: Python的一大应用就是数据分析了,而数据分析中,经常碰到需要处理Excel数据的情况.这里做一个Python处理Excel数据的总结,基本受用大部分情况.相信以后用Python处理Excel数据不再是难事儿! 一.xlwt库将数据导

  • 关于Python Selenium自动化导出新版WOS(web of science)检索结果的问题

    selenium 介绍 selenium 是一个 web 的自动化测试工具,不少学习功能自动化的同学开始首选 selenium ,因为它相比 QTP 有诸多有点: 免费,也不用再为破解 QTP 而大伤脑筋 小巧,对于不同的语言它只是一个包而已,而 QTP 需要下载安装1个多 G 的程序. 这也是最重要的一点,不管你以前更熟悉 C. java.ruby.python.或都是 C# ,你都可以通过 selenium 完成自动化测试,而 QTP 只支持 VBS 支持多平台:windows.linux.

  • 五个方便好用的Python自动化办公脚本的实现

    目录 1.自动化阅读网页新闻 2.自动生成素描草图 3.自动发送多封邮件 4.自动化数据探索 5.自动桌面提示 小结 相比大家都听过自动化生产线.自动化办公等词汇,在没有人工干预的情况下,机器可以自己完成各项任务,这大大提升了工作效率. 编程世界里有各种各样的自动化脚本,来完成不同的任务. 尤其Python非常适合编写自动化脚本,因为它语法简洁易懂,而且有丰富的第三方工具库. 这次我们使用Python来实现几个自动化场景,或许可以用到你的工作中. 1.自动化阅读网页新闻 这个脚本能够实现从网页中

  • 分享4个方便且好用的Python自动化脚本

    目录 前言 1.自动化阅读网页新闻 2.自动生成素描草图 3.自动发送多封邮件 4.自动化数据探索 5.给大家分享一下自动化测试工具 总结 前言 相比大家都听过自动化生产线.自动化办公等词汇,在没有人工干预的情况下,机器可以自己完成各项任务,这大大提升了工作效率. 编程世界里有各种各样的自动化脚本,来完成不同的任务. 尤其Python非常适合编写自动化脚本,因为它语法简洁易懂,而且有丰富的第三方工具库. 这次我们使用Python来实现几个自动化场景,或许可以用到你的工作中. 1.自动化阅读网页新

  • 分享5个方便好用的Python自动化脚本

    目录 1.自动化阅读网页新闻 2.自动生成素描草图 3.自动发送多封邮件 4.自动化数据探索 5.自动桌面提示 前言: 相比大家都听过自动化生产线.自动化办公等词汇,在没有人工干预的情况下,机器可以自己完成各项任务,这大大提升了工作效率. 编程世界里有各种各样的自动化脚本,来完成不同的任务.尤其Python非常适合编写自动化脚本,因为它语法简洁易懂,而且有丰富的第三方工具库.这次我们使用Python来实现几个自动化场景,或许可以用到你的工作中. 1.自动化阅读网页新闻 这个脚本能够实现从网页中抓

随机推荐