`

解决线上故障-python分析日志脚本

 
阅读更多

简直在作死的节奏,一个项目出了三个故障,半夜被搞醒处理故障。。。

末了,需要从日志里面扣出数据,进行历史数据修复

 

开始用shell,奈何shell的水准半桶水都不到。。实在不行,果断用python.磕磕碰碰,一路百度。。终于完成了。

贴出来。。半夜的成果

 

(1)对于gz文件,已上面其中一个文件为例,执行脚本sudo python parse_gz_log.py  /home/q/www/hms.***.com/logs/access.2014-01-09.log.gz会在/home/q/www/hms.***.com/logs/下面生成相应的sql文件access.2014-01-09.log.gz.sql。
 
(2)对于唯一的log文件access.2014-01-10.log,执行如下脚本sudo python parselog.py  /home/q/www/***.***.com/logs/access.2014-01-10.log会在/home/q/www/***.***.com/logs/下面生成相应的sql文件access.2014-01-10.log.sql

 

代码:

# -*- coding: UTF-8 -*-

import sys

#line="192.168.224.18 - - [10/Jan/2014:02:05:42 +0800] \"GET /commission/order/user/edit.htm?fromDate=2014-01-12&toDate=2014-01-13&roomId=1147845&QHFP=ZSD_A9F061AB&QHP=ZSB_A9F08213&from=q***rHotel&partnerUserId=&bd_sign= HTTP/1.0\" 200 39745 \"http://hotel.q***r.com/booksystem/Booking_Main.jsp?local=zh&full=false&ttsSign=05facbd629f70c21d00c1e7353a7060a&priceCut=0&tid=5357743&required1=2014-01-12&required2=2014-01-13&payment=0&CPCB=wiqu***ar0004&roomId=1147845&requestID=c0a8f8af-m2ijp-6mn&lpsp=np&ppb=0&stat=30148&retailPrice=1&detailType=guru&from=q***rHotel&sgroup=A&filterid=973515f5-5323-4abf-bd47-68804ba091b6_C&QHFP=ZSD_A9F061AB&QHP=ZSB_A9F08213&stat2=1124511&required0=concepcion&codeBase=wiqun***r0004&hotelSEQ=concepcion_44" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.57 Safari/537.36" "U.pudh0348" "192.168.0.207_429c0d20_13a91dbf8d5_66ea|1351068665199\" 192.168.11.202"


indexstr="commission/order/user/edit.htm"
indexfrom="fromDate="
indextodate="&toDate="
indexroomId="&roomId="
indexroomIdEnd="&QHFP="

data={}

#fileName="access.2014-01-10.log"
#需要分析的日志文件
fileName= sys.argv[1]
orderdate=fileName.split('.')[1]

#生成sql语句
#sqlFile="update_username.sql"
sqlFile=fileName+".sql"
sf=open(sqlFile,'w')
readfile=open(fileName)
for line in readfile:
    #判断是否包含commission/order/user/edit.htm
    if(line.find(indexstr)<0 or line.find(indexfrom)<0 or line.find(indextodate)<0 or line.find(indexroomId)<0):
        continue  
    fromdate=line[line.find(indexfrom) + 9:line.find(indextodate)]
    todate=line[line.find(indextodate) + 8:line.find(indexroomIdEnd)]
    todate=todate[0:todate.find(indexroomId)]    
    roomId=line[line.find(indextodate) + 8:line.find(indexroomIdEnd)]
    roomId=roomId[roomId.find(indexroomId)+8:]
    
    
    
    #获取username
    list=line.split(' ')
    if(len(list)<3):continue
    username=list[len(list)-3]
    username=username[username.find("U.") + 2:username.find("192.168.")]
    
    if(username == '-' or username ==''):continue
    
    userdate=fromdate+","+todate+","+roomId+","+username
    #去除重复数据
    data[userdate]="1"
    print fromdate,todate,roomId,username
    
#循环数据,写入文本文件
for key in data.keys():
    keys=key.split(',')
    if(len(keys)<3):continue
    sql="update commission_order set user_name='"+keys[3]+"' where from_date='"+keys[0]+"' and to_date='"+keys[1]+"' and room_id='"+keys[2]+"' and order_date='"+orderdate+"';"
    sf.write(sql+"\n")
sf.close()
readfile.close()
        

 

 

 

  下面是处理gz文件的代码:

# -*- coding: UTF-8 -*-

import sys
import gzip

#line="192.168.224.18 - - [10/Jan/2014:02:05:42 +0800] \"GET /commission/order/user/edit.htm?fromDate=2014-01-12&toDate=2014-01-13&roomId=1147845&QHFP=ZSD_A9F061AB&QHP=ZSB_A9F08213&from=***&partnerUserId=&bd_sign= HTTP/1.0\" 200 39745 \"http://hotel.***.com/booksystem/Booking_Main.jsp?local=zh&full=false&ttsSign=05facbd629f70c21d00c1e7353a7060a&priceCut=0&tid=5357743&required1=2014-01-12&required2=2014-01-13&payment=0&CPCB=wiqu***ar0004&roomId=1147845&requestID=c0a8f8af-m2ijp-6mn&lpsp=np&ppb=0&stat=30148&retailPrice=1&detailType=guru&from=***&sgroup=A&filterid=973515f5-5323-4abf-bd47-68804ba091b6_C&QHFP=ZSD_A9F061AB&QHP=ZSB_A9F08213&stat2=1124511&required0=concepcion&codeBase=***&hotelSEQ=concepcion_44" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.57 Safari/537.36" "U.pudh0348" "192.168.0.207_429c0d20_13a91dbf8d5_66ea|1351068665199\" 192.168.11.202"


indexstr="/commission/order/user/edit.htm"
indexfrom="fromDate="
indextodate="&toDate="
indexroomId="&roomId="
indexroomIdEnd="&QHFP="

data={}

#fileName="access.2014-01-09.log.gz"
#需要分析的日志文件
fileName= sys.argv[1]
orderdate=fileName.split('.')[1]

#生成sql语句
#sqlFile="update_username.sql"
sqlFile=fileName+".sql"
sf=open(sqlFile,'w')
readfile = gzip.GzipFile(fileName)
for line in readfile:
    #判断是否包含commission/order/user/edit.htm
    if(line.find(indexstr)<0 or line.find(indexfrom)<0 or line.find(indextodate)<0 or line.find(indexroomId)<0):
        continue  
    fromdate=line[line.find(indexfrom) + 9:line.find(indextodate)]
    todate=line[line.find(indextodate) + 8:line.find(indexroomIdEnd)]
    todate=todate[0:todate.find(indexroomId)]    
    roomId=line[line.find(indextodate) + 8:line.find(indexroomIdEnd)]
    roomId=roomId[roomId.find(indexroomId)+8:]
    
    
    #获取username
    list=line.split(' ')
    if(len(list)<3):continue
    username=list[len(list)-3]
    username=username[username.find("U.") + 2:username.find("192.168.")]
    
    if(username == '-' or username ==''):continue
    
    userdate=fromdate+","+todate+","+roomId+","+username
    #去除重复数据
    data[userdate]="1"
    print fromdate,todate,roomId,username
    
#循环数据,写入文本文件
for key in data.keys():
    keys=key.split(',')
    if(len(keys)<3):continue
    sql="update commission_order set user_name='"+keys[3]+"' where from_date='"+keys[0]+"' and to_date='"+keys[1]+"' and room_id='"+keys[2]+"' and order_date='"+orderdate+"';"
    sf.write(sql+"\n")
sf.close()
readfile.close()
        

 

自己mark一下。。。

分享到:
评论

相关推荐

    DerbySoft可伸缩的日志分析平台实践.pdf

    在当今的IT行业中,日志分析扮演着至关重要的角色,尤其对于大型分布式系统来说,它能够帮助我们监控系统性能、定位错误和进行故障排查。DerbySoft作为一家专注于技术的公司,其在日志分析领域的实践为我们提供了...

    log tools py脚本

    "log tools py脚本"指的是使用Python编程语言编写的用于处理和分析日志文件的脚本。日志文件通常记录了应用程序运行过程中的事件、错误、警告和其他关键信息,对于排查问题、性能优化和系统监控具有重要意义。 `log...

    基于Python爬虫、flask框架与MongoDB的项目

    该项目是关于使用Python爬虫技术抓取数据,然后利用Flask框架构建Web应用,并结合MongoDB作为数据库存储数据的一个综合实例。在这个项目中,我们将会探讨以下几个关键知识点: 1. Python爬虫: - `requests`库:...

    Nginx高性能WEB服务器系列(超级详细)

    - **自动化脚本**:编写 Bash 或 Python 脚本来定期清理旧日志文件,保持日志系统的高效运行。 #### 14. Nginx 日志切割案例讲解 随着访问量的增加,日志文件会越来越大,影响性能。通过日志切割可以保持日志文件...

    系统后台网页

    - 日志监控:查看系统日志,追踪错误和异常,辅助故障排查。 - 报表与统计:自定义报表,提供业务数据的可视化分析。 3. 技术实现: - 前端框架:常见的有React、Vue.js、Angular等,它们提供了组件化开发、状态...

    高级工程师的基本职责说明(完整版).pdf

    8. **责任感与问题解决能力:**具备高度的责任感和较强的故障分析能力。 9. **沟通表达能力:**善于快速学习,思路清晰,语言和文字表达能力优秀。 10. **团队协作精神:**积极主动,具备团队意识,能够承受较强的...

    web服务器监控(一)

    1. **自定义监控**:如果你对Web服务器的源码有所了解,可以编写插件或脚本来实现特定的监控需求,如定制日志分析、特定API性能追踪等。 2. **性能优化**:通过分析源码,找出性能瓶颈并进行优化,提升服务器处理...

    藏经阁-1682亿背后的“企业级”高效持续交付.pdf

    高效持续交付需要以下技术栈:Java、Web、SpringBoot、NodeJS、Go、PHP、Python、Ruby、Dockerfile、环境规划、启停脚本、代理配置、日志规范配置项等。 七、阿里测试解决方案 阿里测试解决方案共享了高效全云化...

    数据库自动化运维方案.docx

    2. 如果某台主机上存在备份失败的实例,会自动发送报警到DBA手机,DBA可以直接在备份系统中查看备份错误日志并执行重试操作,大大简化了故障处理流程。 通过这些改进措施,ZanDB系统为有赞提供了强大的自动化运维...

    网络运维管理制度.pdf

    通过运维工作日志系统,可以追踪故障处理过程,提高问题解决效率。 数据维护是网络运维的另一重要任务,涉及公司业务中各种关系和非关系数据库的数据备份。备份数据需安全保存在公司内部存储器中,建立数据仓库,并...

    hadoop学习步骤说明

    比如HBase(用于构建大规模分布式数据库)、Hive(用于进行数据仓库分析)、Sqoop(用于在Hadoop和关系型数据库之间传输数据)和Flume(用于收集、聚合和移动大量日志数据)等。 #### 七、实战MapReduce编程 掌握...

    sentry-java-plugins:sentry-java 的 IRC 客户端插件

    通过使用像哨兵这样的工具,开发者可以更有效地追踪线上问题,而不是依赖用户反馈或者日志文件。这个IRC客户端插件进一步增强了这种能力,特别是在实时通信环境中,错误需要快速响应和解决。 要开始使用sentry-java...

    天津大学绿岛文学社文章系统.zip

    7. **其他辅助文件**:例如日志文件、备份文件等,可能在系统维护和故障排查时发挥作用。 综合来看,这个“天津大学绿岛文学社文章系统”是一个定制化的文学作品分享和管理平台,不仅提供了发布和阅读文章的基本...

    学士后网上书城

    运维方面,可能会涉及日志监控、性能优化、故障排查等内容。 8. **项目文档**:虽然未明确提及,但完整的项目通常会附带详细的设计文档、API接口说明、数据库设计文档等,帮助用户理解和使用。 通过分析"学士后...

    xxl-job分布式任务调度平台-其他

    19、脚本任务:支持以GLUE模式开发和运行脚本任务,包括Shell、Python、NodeJS、PHP、PowerShell等类型脚本; 20、命令行任务:原生提供通用命令行任务Handler(Bean任务,"CommandJobHandler");业务方只需要提供...

Global site tag (gtag.js) - Google Analytics