将慢日志汇总发送邮件脚本
1、DB服务器操作
一、在各个DB服务器编写脚本,来获取当天的慢日志并分析
vi /monitor/slow_pt.sh
#!/bin/bash #作者:*** #创建时间:2018-04-24 #功能:每天的慢日志进行处理,在迁移至跳转机 date=`date +%y%m%d` SLOW_PATH=/data/mysql_data/DBB01-slow.log #当前服务器慢日志位置 HOST=`hostname` manage_ip='10.13.**.**' #管理ip `tail -10000 $SLOW_PATH | grep -A10000 "$date" > /pt_log/slow.log` #此处慢日志格式应当是180423格式,请自行参考线上慢日志格式,部分格式是18-03-23 SIZE=`ls -l /pt_log/slow.log | awk '{print $5}'` if [[ "$SIZE" -ne 0 ]];then `pt-query-digest /pt_log/slow.log > /pt_log/$HOST.log` scp -P 22000 /pt_log/$HOST.log $manage_ip:/pt_log/$date #需要执行第三步 `rm -f /pt_log/$HOST.log` fi `rm /pt_log/slow.log`
二、将此脚本传输到各个DB服务器,并修改其中的慢日志文件所在目录
三、各台服务器创建密钥,并传输给管理ip,可以免密码传输文件
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa ssh-copy-id -i .ssh/id_rsa.pub "-p 22000 ****@10.13.**.**"
四、添加到定时任务中
crontab -e #慢日志统计、传输文本 59 23 * * * /bin/bash /monitor/slow_pt.sh
2、管理IP操作
1、创建一个管理文件夹操作的py文件
vi dir_operate.py #!/usr/bin/python # -*- coding: UTF-8 -*- import os # 创建文件夹 def mkdir(path): # 去除首位空格 path=path.strip() # 去除尾部 \ 符号 path=path.rstrip("\\") # 判断路径是否存在 # 存在 True # 不存在 False isExists=os.path.exists(path) # 判断结果 if not isExists: # 如果不存在则创建目录 # 创建目录操作函数 os.makedirs(path) return True # 删除文件、文件夹 def deldir(path): os.system("rm -fR %s" %path) #打包文件 def packdir(packfile,path): os.system("cd /pt_log && tar -zcvPf %s %s" %(packfile,path))
二、 创建邮件发送的py文件
vi mail_send.py #!/usr/bin/python # -*- coding: UTF-8 -*- import smtplib from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart from email.header import Header from email.mime.application import MIMEApplication def mail_send(send_day,send_file): # 第三方 SMTP 服务 mail_host="smtp.exmail.qq.com" #设置服务器 mail_user="***@*****.com" #用户名 mail_pass="*****" #口令 sender = '***@****.com' receivers = ['***@****.com'] # 接收邮件,可设置为你的QQ邮箱或者其他邮箱 #创建一个带附件的实例 message = MIMEMultipart() message['From'] = Header("慢日志采集", 'utf-8') message['To'] = Header("***", 'utf-8') subject = '每日慢日志汇总' message['Subject'] = Header(subject, 'utf-8') #邮件正文内容 message.attach(MIMEText('这是%s的慢日志信息' %send_day, 'plain', 'utf-8')) path = r'%s' %send_file mp3part = MIMEApplication(open(path, 'rb').read()) mp3part.add_header('Content-Disposition', 'attachment', filename='%s.tar.gz' %send_day) message.attach(mp3part) try: smtpObj = smtplib.SMTP() smtpObj.connect(mail_host, 25) # 25 为 SMTP 端口号 smtpObj.login(mail_user,mail_pass) smtpObj.sendmail(sender, receivers, message.as_string()) print "邮件发送成功" except smtplib.SMTPException, e: print "Error: 无法发送邮件" print str(e)
三、建立汇总发送py文件
vi slow_send.py #!/usr/bin/python # -*- coding: UTF-8 -*- #作者:*** #日期:18-05-02 #功能:创建当天的文件夹、删除15天前的文件夹、打包并发送昨天的慢日志 import time import datetime import dir_operate import mail_send cur_date = time.strftime('%y%m%d',time.localtime(time.time())) #当前日期,格式180428 #昨天日期 #先获得时间数组格式的日期 OneDayAgo = (datetime.datetime.now() - datetime.timedelta(days = 1)) #转换为时间戳: timeStamp = int(time.mktime(OneDayAgo.timetuple())) #转换为其他字符串格式: OneStyleTime = OneDayAgo.strftime("%y%m%d") #十五天前日期格式 #先获得时间数组格式的日期 FifteenDayAgo = (datetime.datetime.now() - datetime.timedelta(days = 15)) #转换为时间戳: timeStamp = int(time.mktime(FifteenDayAgo.timetuple())) #转换为其他字符串格式: FifteenStyleTime = FifteenDayAgo.strftime("%y%m%d") #创建今天文件夹 mkpath = "/pt_log/%s" %cur_date dir_operate.mkdir(mkpath) #删除15天前文件 delpath = "/pt_log/%s*" %FifteenStyleTime dir_operate.deldir(delpath) #打包昨天的慢日志 pack_file = "%s.tar.gz" %OneStyleTime pack_dir = "%s" %OneStyleTime dir_operate.packdir(pack_file, pack_dir) mail_send.mail_send(OneStyleTime,'/pt_log/%s' %pack_file)
4、添加执行计划
crontab -e #每天创建、发送慢日志 02 01 * * * /monitor/./slow_send.py
注:
DB服务器选择sh的原因是其对免密码传输文件的处理。在管理服务器中,我没权限yum安装,所以python的扩展无法使用。管理服务器中选择Python的原因在于其对邮件的处理,同样是权限问题,无法配置mail,所以无法使用sh