最近写了一个用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. P3368 【模板】树状数组 2 单点查询与区间修改

    题目描述 如题,已知一个数列,你需要进行下面两种操作: 1.将某区间每一个数数加上x 2.求出某一个数的和 输入输出格式 输入格式: 第一行包含两个整数N.M,分别表示该数列数字的个数和操作的总个数. ...

  2. HashMap,Hashset,ArrayList以及LinkedList集合的区别,以及各自的用法

    基础内容 容器就是一种装其他各种对象的器皿.java.util包 容器:Set, List, Map ,数组.只有这四种容器. Collection(集合) 一个一个往里装,Map 一对一对往里装. ...

  3. 搜索模板elasticsearch

    搜索: like 对中文分词效率与支持都不太友好elasticsearch 实时的(效率高).分布式(可扩展)的搜索和分析引擎,基于Lucene全文搜索引擎工具包,算法基于倒排索引算法(eg:一篇文章 ...

  4. LibreOJ #119. 最短路 (堆优化dijkstra)

    题目描述 给一个 n(1≤2500≤n) n(1 \leq 2500 \leq n)n(1≤2500≤n) 个点 m(1≤6200≤m) m(1 \leq 6200 \leq m)m(1≤6200≤m ...

  5. SQLite – GROUP BY

    SQLite - GROUP BY SQLite GROUP BY子句中使用与SELECT语句的合作安排相同的数据组. 在GROUP BY子句之前一个SELECT语句的WHERE子句,先于ORDER ...

  6. pagehelper 分页

    分页jar包: <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pa ...

  7. 超不清视频播放器-用Python将视频转成字符

    前言 今天分享的这段代码,看起来没啥实际用处,而且有些反潮流,因为现如今大家看视频都追求更高分辨率的超清画质,而我们这个,是一个“超不清”的视频播放器:在控制台里播放视频,用字符来表示画面 不过我觉得 ...

  8. 进程池_Pool

    当需要创建子进程数量不多的时候,可以直接利用multiprocessing中的Process动态生成多个进程 但是如果是成百甚至上千个任务,手动地创建它的工作量很大,此时就可以利用到multiproc ...

  9. Linux-RedHat7.2 安装nginx托管.net core2.0

    1.安装依赖包 yum -y install gcc gcc-c++ pcre pcre-devel openssl openssl-devel zlib zlib-devel 2.下载安装包 wge ...

  10. docker 应用数据的管理

    容器数据存储的三种方式 docker volume docker管理素质及文件系统的一部分,保存数据最佳方式 bind mounts   将宿主机的文件映射到容器里 tmpfs   存储在宿主机的内存 ...