admin 发表于 2018-7-10 14:15:05

Mysql实时监控脚本

环境(Python 2.7)


#-*-coding:utf-8-*-
import time

#mysql log位置
file = '/Applications/XAMPP/xamppfiles/var/mysql/ADog.log'

#去重函数
def removal(string):
      log_list_new = []
      num = string[:2]
      log_list = string.split(num)
      for i in log_list:
                i = i.rstrip('\t').rstrip()
                log_list_new.append(i)
      log_list_new = list(set(log_list_new))
      string = num + ' '
      for j in log_list_new:
                string += j
      return string

#获取当前时间函数
def GetNowTime():
    return time.strftime("%Y-%m-%d %H:%M:%S",time.localtime(time.time()))

#监控日志文件函数
def monitorLog(logFile):
print '监控的日志文件 是%s' % logFile
print '当前时间 是%s' % GetNowTime()
with open(file , 'r') as fp:
    fp.seek(0,2)
    try:
      while True:
      last_pos = fp.tell()
      line = fp.readline().strip()
      #这里只读取预编译和执行语句
      if ('Prepare' in line) or ('Execute' in line) or ('Query' in line):
          print removal(line)
          print '--------------------------------------------------------------------------------------------------------------------'
    except KeyboardInterrupt:
      print 'exit...'

               
if __name__ == '__main__':
    monitorLog(file)


#-*-coding:utf-8-*-
import time

#mysql log位置
file = '/Applications/XAMPP/xamppfiles/var/mysql/ADog.log'

#去重函数
def removal(string):
      log_list_new = []
      num = string[:2]
      log_list = string.split(num)
      for i in log_list:
                i = i.rstrip('\t').rstrip()
                log_list_new.append(i)
      log_list_new = list(set(log_list_new))
      string = num + ' '
      for j in log_list_new:
                string += j
      return string

#获取当前时间函数
def GetNowTime():
    return time.strftime("%Y-%m-%d %H:%M:%S",time.localtime(time.time()))

#监控日志文件函数
def monitorLog(logFile):
print '监控的日志文件 是%s' % logFile
print '当前时间 是%s' % GetNowTime()
with open(file , 'r') as fp:
    fp.seek(0,2)
    try:
      while True:
      last_pos = fp.tell()
      line = fp.readline().strip()
      #这里只读取预编译和执行语句
      if ('Prepare' in line) or ('Execute' in line) or ('Query' in line):
          print removal(line)
          print '--------------------------------------------------------------------------------------------------------------------'
    except KeyboardInterrupt:
      print 'exit...'

               
if __name__ == '__main__':
    monitorLog(file)

这里需要说明下测试时候用的是某最新款cms,典型的TP5框架,所以通篇都是预编译,因此这里只选取了预编译相关的执行语句,后来再测试时候发现最普通的query语句没加入选取规则,不知道其他还有没有遗漏的,这里可以根据需要自行添加~

下面放出效果图(感觉还是有点复杂,,可能是打开了首页导致加载了过多的sql语句吧)
页: [1]
查看完整版本: Mysql实时监控脚本