将慢日志汇总发送邮件脚本

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

原文地址:https://www.cnblogs.com/binbinyouni/p/8986672.html