解決線上故障 python分析日誌指令碼

2021-09-01 21:48:54 字數 4134 閱讀 3905

簡直在作死的節奏,乙個專案出了三個故障,半夜被搞醒處理故障。。。

末了,需要從日誌裡面扣出資料,進行歷史資料修復

貼出來。。半夜的成果

(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

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

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一下。。。

Quartz blocked 線上故障解決

故障描述 線上的job正常跑一段時間後就進入了blocked狀態,更新quartz版本仍無法解決 故障分析 先說正常獲取 觸發任務執行的流程 排程器執行緒執行的時候,首先從 triggers 表獲取狀態為 waiting 的將要發射的觸發器,然後條件更新狀態 trigger state 的值為 ac...

記憶體故障分析與解決

大家在計算機故障維修過程中,遇到的最多的問題恐怕要屬記憶體報警了。剛買兩天的新機器會出現記憶體報警 使用一年的機器也會出現記憶體報警 天氣突然降溫的時候會出現記憶體報警 夏天長時間陰雨的時候也會出現記憶體報警 總之一句話,記憶體報警問題在計算機故障現象中出現頻率最多,同時最容易解決 拆開機箱,把記憶...

運維故障分析報告 線上執行報錯緊急

介面無法連線 dubbo 註冊中心,會不斷重試,觸發 dubbo 當前版 本 dubbo 2.5.4 snapshot jdk1.6 8.4.jar 記憶體洩露 bug,導致 jvm 記憶體逐漸耗光,最終記憶體溢位。說明 由於沒有 dubbo 相關的原始碼,無法準確定位 dubbo 記憶體洩露原因,...