基于Python实现自动慢查询分析,邮件自动发送
2015-10-29 14:19
597 查看
由两个程序文件组成,第一个程序实现慢查询分析,文件上传
#!/usr/local/python27/bin/python2.7 from fabric.api import * from fabric.context_managers import * from fabric.contrib.console import confirm import sys import os import time import datetime sdir = '/alidata/server/mysql/data/' ddir = '/root/' env.user='root' env.roledefs = { 'master_db':['192.168.1.2'], 'slave_db':['192.168.1.3'], 'quliao_db':['192.168.1.4'] } env.passwords = { 'root@192.168.1.2:22':'123456', 'root@192.168.1.3:22':'123456', 'root@192.168.1.4:22':'123456' } #慢查询分析函数,这个函数会调用服务端本地的工具分析慢查询,之后会清空慢查询文件。 def my_slow(ori_log,save_log,result_log): run('cp '+sdir+ori_log+' '+save_log) run('/usr/local/bin/mysqlsla -lt slow '+ddir+save_log+' -sort c_sum -top 10 >'+'/root/'+result_log) run('echo '+''+'>'+sdir+ori_log) #用于下载服务端分析好的慢查询文件保存到本地新建的目录中 def my_get(fname): with lcd('/alidata/slow_log'): dname = time.strftime('%Y%m%d',time.localtime(time.time())) with cd('/root/'): get(fname,dname+'/') #定义文件删除函数,接受两个参数,用于删除拷贝出来的慢查询文件和分析之后的慢查询文件。 def remove(f1,f2): with cd('/root'): run('rm -f '+f1+' '+f2 ) #在客户端机器创建一个以当前日期为名称的文件夹,用于保存分析好的慢查询文件 @runs_once def mk_dir(): with lcd('/alidata/slow_log'): dname = time.strftime('%Y%m%d',time.localtime(time.time())) local('mkdir '+dname) @roles('slave_db') def sdb(): print ("run slave db pro") run("ls /alidata/server/mysql/data") my_slow('slow.log','mysql-r-'+time.strftime('%Y%m%d',time.localtime(time.time()))+'.log','mysql-read-'+time.strftime('%Y%m%d',time.localtime(time.time()))+'.log') my_get('mysql-read-'+time.strftime('%Y%m%d',time.localtime(time.time()))+'.log') remove('mysql-r-'+time.strftime('%Y%m%d',time.localtime(time.time()))+'.log','mysql-read-'+time.strftime('%Y%m%d',time.localtime(time.time()))+'.log') @roles('master_db') def mdb(): print ('run master db pro') run("ls /alidata/server/mysql/data") my_slow('AY131008162509536ef1Z-slow.log','mysql-w-'+time.strftime('%Y%m%d',time.localtime(time.time()))+'.log','mysql-write-'+time.strftime('%Y%m%d',time.localtime(time.time()))+'.log') my_get('mysql-write-'+time.strftime('%Y%m%d',time.localtime(time.time()))+'.log') remove('mysql-w-'+time.strftime('%Y%m%d',time.localtime(time.time()))+'.log','mysql-write-'+time.strftime('%Y%m%d',time.localtime(time.time()))+'.log') @roles('quliao_db') def ldb(): print ('run quliao db pro') run("ls /alidata/server/mysql/data") my_slow('slow.log','mysql-q-'+time.strftime('%Y%m%d',time.localtime(time.time()))+'.log','mysql-quliao-'+time.strftime('%Y%m%d',time.localtime(time.time()))+'.log') my_get('mysql-quliao-'+time.strftime('%Y%m%d',time.localtime(time.time()))+'.log') remove('mysql-q-'+time.strftime('%Y%m%d',time.localtime(time.time()))+'.log','mysql-quliao-'+time.strftime('%Y%m%d',time.localtime(time.time()))+'.log') def deploy(): mk_dir() execute(sdb) execute(mdb) execute(ldb) #最后这里是调用客户端本地的邮件发送程序把刚刚抓回来的慢查询日志以邮件附件的形式发送给管理员。 local('/root/tuchao/sendma.py')
第二个程序负责把分析好的日志以邮件附件的形式发送给管理员
#!/usr/local/python27/bin/python2.7 # coding=utf8 import smtplib import time import datetime from email.mime.text import MIMEText from email import encoders from email.header import Header from email.utils import parseaddr, formataddr from email.MIMEMultipart import MIMEMultipart from email.MIMEBase import MIMEBase from_addr = 'tuchao@mail.admin.net' password = '111111' smtp_server = '114.234.116.2' to_addr = ['123456@qq.com','1234567@qq.com'] slow_log_path = '/alidata/slow_log/'+time.strftime('%Y%m%d',time.localtime(time.time()))+'/' def _format_addr(s): name,addr = parseaddr(s) return formataddr((Header(name,'utf-8').encode(),addr.encode('utf-8') if isinstance(addr, unicode) else addr)) #需要将多个对象组合起来,在这里构建一个MIMEMultipart对象。 msg = MIMEMultipart() msg['From'] = _format_addr(u'来自运维技术XX <%s>' % from_addr) msg['To'] = _format_addr(u'管理员 <%s>' % to_addr) msg['Subject'] = Header(u'MySQL慢查询日志', 'utf-8').encode() msg.attach(MIMEText('<html><body><h3>mysql-read:从库读慢查询</h3>' + '<p><h3>mysql-write:主库读写慢查询</h3></p>' '<p><h3>mysql-quliao:外部程序库读写慢查询</h3></p>' '<p><img src="cid:1"></p>' + '</body></html>', 'html', 'utf-8')) with open(slow_log_path+'mysql-read-'+time.strftime('%Y%m%d',time.localtime(time.time()))+'.log','rb') as f: mime = MIMEBase('text/plain','txt',filename='mysql-read-'+time.strftime('%Y%m%d',time.localtime(time.time()))+'.log') mime.add_header('Content-Disposition','attachment',filename='mysql-read-'+time.strftime('%Y%m%d',time.localtime(time.time()))+'.log') mime.add_header('Content-ID','<0>') mime.add_header('X-Attachment-Id','0') mime.set_payload(f.read()) encoders.encode_base64(mime) msg.attach(mime) with open(slow_log_path+'mysql-write-'+time.strftime('%Y%m%d',time.localtime(time.time()))+'.log','rb') as f: mime = MIMEBase('text/plain','txt',filename='mysql-write-'+time.strftime('%Y%m%d',time.localtime(time.time()))+'.log') mime.add_header('Content-Disposition','attachment',filename='mysql-write-'+time.strftime('%Y%m%d',time.localtime(time.time()))+'.log') mime.add_header('Content-ID','<0>') mime.add_header('X-Attachment-Id','0') mime.set_payload(f.read()) encoders.encode_base64(mime) msg.attach(mime) with open(slow_log_path+'mysql-quliao-'+time.strftime('%Y%m%d',time.localtime(time.time()))+'.log','rb') as f: mime = MIMEBase('text/plain','txt',filename='mysql-quliao-'+time.strftime('%Y%m%d',time.localtime(time.time()))+'.log') mime.add_header('Content-Disposition','attachment',filename='mysql-quliao-'+time.strftime('%Y%m%d',time.localtime(time.time()))+'.log') mime.add_header('Content-ID','<0>') mime.add_header('X-Attachment-Id','0') mime.set_payload(f.read()) encoders.encode_base64(mime) msg.attach(mime) with open('/alidata/slow_log/aamy.jpg','rb') as f: mime = MIMEBase('image','jpg',filename='aamy.jpg') mime.add_header('Content-Disposition','attachment',filename='aamy.jpg') mime.add_header('Content-ID','<1>') mime.add_header('X-Attachment-Id','0') mime.set_payload(f.read()) encoders.encode_base64(mime) msg.attach(mime) server = smtplib.SMTP(smtp_server,25) server.set_debuglevel(0) server.login(from_addr,password) server.sendmail(from_addr,to_addr,msg.as_string()) server.quit()构造一个邮件对象就是一个
Messag对象
构造一个
MIMEText对象,就表示一个文本邮件对象
构造一个
MIMEImage对象,就表示一个作为附件的图片
要把多个对象组合起来,就用
MIMEMultipart对象
MIMEBase可以表示任何对象 阅读更多
相关文章推荐
- 基于Python实现自动慢查询分析,邮件自动发送
- python实现自动发送邮件发送多人、群发、多附件的示例
- [linux & python] linux下基于python自动定时发送邮件附件
- python 实现邮件自动发送
- python实现自动发送报警监控邮件
- python3.x实现自动发送邮件
- python 实现 自动oa 签到签退 发送邮件提醒
- python实现自动登录qq邮箱,写邮件并发送
- Python实现的查询mysql数据库并通过邮件发送信息功能
- Python基于SMTP协议实现发送邮件功能详解
- python实现自动发送邮件
- 利用python,shell,crontab实现成绩自动查询和更新邮件提醒
- python实现自动监控网站并发送邮件告警
- python简单实现服务器信息自动邮件发送
- Python基于smtplib实现异步发送邮件服务
- python实现自动监控网站并发送邮件告警 推荐
- python实现获取天气信息后自动登录邮箱发送到指定邮件联系人
- python实现12306抢票及自动邮件发送提醒付款功能
- Python实现自动发送邮件功能
- SVN Hook + Python实现commit后自动发送邮件