zoukankan      html  css  js  c++  java
  • 将慢日志汇总发送邮件脚本

    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

  • 相关阅读:
    android中requestFocus
    @SuppressLint("NewApi")和@TargetApi()的区别
    Gradle基础
    Gradle build-info.xml not found for module app.Please make sure that you are using gradle plugin '2.0.0-alpha4' or higher.
    Duplicate files copied in APK META-INF/DEPENDENCIES
    解决Gradle DSL method not found: ‘android()’
    SSL peer shut down incorrectly
    如何测试远端TCP和UDP端口是否开放
    方法总比困难多
    图灵简传
  • 原文地址:https://www.cnblogs.com/binbinyouni/p/8986672.html
Copyright © 2011-2022 走看看