最近写了一个用python监控tomcat日记文件的功能
实现的功能:
监控日记文件中实时过来的记录,统计每分钟各个接口调用次数,统计结果插入oracle

#!/usr/bin/python
# -*- coding: UTF-8 -*-
import time
import os
import signal
import subprocess
import re
import cx_Oracle def monitorLog(logFile,oldDayTime):
logUrl='10.0.22.**'
#连接数据库
connstr='username/password@10.0.22.**:**/**'
db=cx_Oracle.connect(connstr)
cursor = db.cursor()
#结束时间
startTime =''
startMinute=''
#读取日记文件尾部日记
popen = subprocess.Popen('tail -f ' + logFile, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
pid = popen.pid
print('Popen.pid:' + str(pid))
recommDict={}
while True:
line = popen.stdout.readline().strip()
if line:
#正则表达式得到推荐接口名字
matchObj = re.search(r'(?<=recomm=)(.*?)(?=&)', line, re.M | re.I)
if matchObj:
recommName=matchObj.group()
if recommName not in recommDict:
recommDict.setdefault(recommName,1)
else:
value=recommDict[recommName]
value+=1
recommDict[recommName]=value
#正则表达式获取分钟
matchTime = re.search(r'(?<=201[1-9]:)(.*?)(?= +)', line, re.M | re.I)
if matchTime:
thisTime=str(matchTime.group())
thisMinute=thisTime.split(":")[1]
if startMinute is '':
startMinute = thisMinute
startTime = thisTime
if startMinute!= thisMinute:
for key in recommDict.keys():
value=str(recommDict[key])
logTime=str(oldDayTime)+" "+startTime
sql = """INSERT INTO MINITOR_TOMCATLOGS(LOGURL,BEGINTIME,TIMEINTERVAL,PORTNAME,CALLNUM,UPDATETIME)VALUES ('"""+logUrl+"""','"""+logTime+"""','minute','"""+key+"""',"""+value+""",sysdate)"""
cursor.execute(sql)
db.commit()
#清空recommDict
recommDict.clear()
startMinute =''
#获取今天的时间
toDayTime=time.strftime('%Y-%m-%d', time.localtime())
if toDayTime!=oldDayTime:
if len(recommDict)>0:
for key in recommDict.keys():
value=str(recommDict[key])
logTime=str(oldDayTime)+" "+startTime
sql = """INSERT INTO MINITOR_TOMCATLOGS(LOGURL,BEGINTIME,TIMEINTERVAL,PORTNAME,CALLNUM,UPDATETIME)VALUES ('"""+logUrl+"""','"""+logTime+"""','minute','"""+key+"""',"""+value+""",sysdate)"""
cursor.execute(sql)
db.commit()
recommDict.clear()
db.close()
popen.kill()
break
nowDate=time.strftime("%Y-%m-%d", time.localtime())
tomcatLog_dir="/opt/apache-tomcat-7.0.54/logs/"
currLogFile=tomcatLog_dir+"localhost_access_log."+nowDate+".txt"
monitorLog(currLogFile,nowDate) if __name__ == '__main__':
nowDate=time.strftime("%Y-%m-%d", time.localtime())
tomcatLog_dir="/opt/apache-tomcat-7.0.54/logs/"
currLogFile=tomcatLog_dir+"localhost_access_log."+nowDate+".txt"
monitorLog(currLogFile,nowDate)

python监控tomcat日记文件的更多相关文章

  1. Python监控目录和文件变化

    一.os.listdir import os, time path_to_watch = "." before = dict ([(f, None) for f in os.lis ...

  2. Python监控文件变化:watchdog

    Python监控文件变化有两种库:pyinotify和watchdog.pyinotify依赖于Linux平台的inotify,后者则对不同平台的的事件都进行了封装.也就是说,watchdog跨平台. ...

  3. LoadRunner 实现监控Tomcat

    LoadRunenr没有监控Tomcat的专用监控器,为了用lr达到监控tomcat的目的可以通过打开Tomcat自带的Status页面之后,利用lr的关联技术得到相关的数据,把数据输出到lr自定义的 ...

  4. linux上监控tomcat down掉后自动重启tomcat

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px "Helvetica Neue"; color: #454545 } p. ...

  5. 运用JMX监控Tomcat/Java jvisualvm简要说明

    公司线上项目出现了java heap space 然后经过查询知晓了下面工具于是开始了尝试. visualvm能干什么:监控内存泄露,跟踪垃圾回收,执行时内存.cpu分析,线程分析... jvisua ...

  6. 【转】使用JDK自带jvisualvm监控tomcat

    转载地址: http://my.oschina.net/kone/blog/157239 jdk自带有个jvisualvm工具.该工具是用来监控java运行程序的cpu.内存.线程等的使用情况.并且使 ...

  7. 使用JDK自带jvisualvm监控tomcat

    国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...

  8. 性能测试中用LambdaProbe监控Tomcat Tomcat和Probe的配置

    转载:http://bbs.51testing.com/thread-90047-1-1.html 性能测试中用LambdaProbe监控TomcatLambdaProbe 是一款强大的免费开源工具, ...

  9. 如何监控 Tomcat?Zabbix 与 Cloud Insight 对比

    JVM 监控工具有很多,像命令 jstat,jmap,jstack,jinfo 可以根据不同需求查看不同的系统信息,还有图像化界面 jconsole,都是很方便的工具.这些可以参考 JAVA自带监控工 ...

随机推荐

  1. 序列化shelve模块

    1.shelve对pickle进行封装,所以shelve也只能在python里使用. shelve可以进行多次dump而且顺序不会乱. import shelve f = shelve.open('s ...

  2. 架包Error inflating class错误

    当引用架包后,出现Error inflating class错误时通常要检测架包是否正确引用: 1.首先将你所需要的架包拷贝到工程目录下: 2.右击工程,选择Build Path-->confi ...

  3. 判断空间上三个点是否共线问题【找bug篇】

    判断空间上三个点是否在同一直线上[找bug篇] 作者:Vashon 时间:20150601   发布时间:20150718 一.拿到问题,首先分析并理清思路. 判断三点是否在同一条直线上需满足以下几点 ...

  4. 【转载】SQL Server 2012 日志传送

    SQL Server 2012 日志传送 一.准备: 数据库为完全恢复模式,并事先做一次完全备份. 共享一个文件夹,主机备份放在这个文件夹,而且客户机有权访问这个共享文件夹. 二.基本配置 1.启动配 ...

  5. 使用Recast.AI创建具有人工智能的聊天机器人

    很多SAP顾问朋友们对于人工智能/机器学习这个话题非常感兴趣,也在不断思考如何将这种新技术和SAP传统产品相结合.Jerry之前的微信公众号文章C4C和微信集成系列教程曾经介绍了Partner如何利用 ...

  6. Fire Air(华科校赛 网络赛)

    题目 原题链接:https://www.nowcoder.com/acm/contest/106/L 在100000 * 10000的空地上,有n个时间点,每个时间点会在(xi,yi)上种一棵树. 定 ...

  7. sh脚本写法

    1.shell注释符号: 1. 单行注释: “#” 2. 多行注释: : << ! 语句1 语句2 语句3 语句4 ! http://blog.csdn.net/lansesl2008/a ...

  8. 【jQuery】uploadify,实际开发案例【选择完文件点击上传才上传】

    ----------------------------------------------------------------------------------js部分:------------- ...

  9. JS动态添加元素的事件动态绑定

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  10. TCP socket编程记录(C语言)

    最近使用到TCP的socket编程,记录一下思路. TCP Socket 服务器编程思路 0.初始化套接字库 1.创建套接字----------2个(服务器本身需要一个套接字,客户端要返回一个套接字) ...