通过分析python/pandas for web scale应用程序中的服务器日志了解错误频率
我正在运行一个web规模的应用程序,希望了解用户遇到的错误。服务器日志捕获应用程序错误。我想将日志解析为一个数据帧,了解前x个错误,然后按天(绝对频率和相对频率)绘制前x个错误 第一步是解析日志并将其加载到数据帧中。原始日志文件如下所示: [2017-06-20T12:57:56.549-04:00][nexteesadf_server1][WARNING][ADF_FACES-60099][oracle.adfinternal.view.FACES.renderkit.rich.RegionRenderer][tid:[ACTIVE].ExecuteThread:'2'队列:'weblogic.kernel.Default self-tuning'][userId:test@test.com][ecid:005KaSb9zIX4ulMpMK4Eye0000xO00zuxf,0:1][应用程序:NetApp_应用程序1.ear66.1254][DSID:0000Ln6ErTF4mnMpMKL6ie1PHmGo00045R][URI:/netapp/faces/pages/submission/submission.jspx]id为pt1:pt_r1的区域组件检测到包含多个根组件的页面片段。包含多个根组件的片段可能无法在区域中正确显示,并且可能会对性能产生负面影响。建议您将页面片段重新构造为具有单个根组件。 [2017-06-20T12:53:43.665-04:00][nexteesadf_server1][WARNING][ADF_FACES-60051][oracle.adfinternal.view.FACES.renderkit.rich.table.BaseColumnRenderer][tid:[ACTIVE].ExecuteThread:'16'队列:'weblogic.kernel.Default self-tuning'][userId:test@test.com][ecid:005KASO5ZOR4ULMPMK4EYE00000XO00ZUB9,0:1][APP:NetApp_application1.ear66.1254][DSID:0000LN6NNVT4MNPMKL6IE1PHMGO000495][URI:/netapp/faces/pages/oversight/oversight.jspx]列中指定的宽度无效:pt1:r1:r1:0:r11:1:r2:0:r5:0:pc1:t1:1:c26。 [2017-06-20T12:53:44.324-04:00][nexteesadf_server1][ERROR][[com.someco.netapp.sourcefile.helper.SourceFileHelper][tid:[活动]。队列的ExecuteThread:'6:'weblogic.kernel.Default self-tuning'][userId:test@test.com][ecid:005KaSO8oaU4QtMpMKc9ye0003da0050lR,0:1][APP:NetApp_application1.ear66.1254][DSID:0000LN6IPJM4MNPMKL6IE1PHMGO00047B][URI:/netapp/faces/pages/submission/submission.jspx]SourceFileHelper验证源文件:1152379通过分析python/pandas for web scale应用程序中的服务器日志了解错误频率,python,pandas,server,Python,Pandas,Server,我正在运行一个web规模的应用程序,希望了解用户遇到的错误。服务器日志捕获应用程序错误。我想将日志解析为一个数据帧,了解前x个错误,然后按天(绝对频率和相对频率)绘制前x个错误 第一步是解析日志并将其加载到数据帧中。原始日志文件如下所示: [2017-06-20T12:57:56.549-04:00][nexteesadf_server1][WARNING][ADF_FACES-60099][oracle.adfinternal.view.FACES.renderkit.rich.Region
[2017-06-20T12:53:44.329-04:00][nexteesadf_server1][ERROR][ADFC-64010][oracle.adf.controller.internal.binding.TaskFlowRegionModelViewPort][tid:[ACTIVE].ExecuteThread:'6'队列:'weblogic.kernel.Default self-tuning'][userId:test@test.com][ecid:005KaSO8oaU4QtMpMKc9ye0003da0050lR,0:1][APP:NetApp_application1.ear66.1254][DSID:0000LN6IPJM4MNPMKL6IE1PHMGO00047B][URI:/netapp/faces/pages/submission/submission.jspx]ADFc:Page'/com/someco/netapp/submission/ui/fragment/uploadSubmissionFile.jsff'多次引用任务流绑定'guidelineNavTF1',这是不受支持的。您必须解析日志文件的每一行。然后为每一行创建一个字典,并使用pandas.Dataframe.from_dict方法创建数据帧
import pandas as pd
import numpy as np
def parse_log(filename):
with open(filename, 'r') as f:
lines = f.readlines()
entries = []
for line in lines:
entry = {}
cols = line.split('] [')
entry['log_date'] = np.datetime64(cols[0].replace('[', ''))
entry['log_server'] = cols[1]
entry['log_level'] = cols[2]
entry['col_four'] = cols[3] # idk column proper name
entry['col_five'] = cols[4] # idk column proper name
entry['tid'] = cols[5].replace('tid: ', '')
entry['userId'] = cols[6].replace('userId: ', '')
entry['ecid'] = cols[7].replace('ecid: ', '')
entry['app'] = cols[8].replace('APP: ', '')
entry['dsid'] = cols[9].replace('DSID: ', '')
# this is where the last column and the message get split
last = cols[10].split(']')
entry['uri'] = last[0].replace('URI: ', '')
entry['message'] = last[1].strip()
entries.append(entry)
return entries
if __name__ == '__main__':
entries = parse_log('example.log')
df = pd.DataFrame.from_dict(entries)
print(df.head())
现在,您可以使用pandas提供的所有方法来分析数据。我不知道两列的列名应该是什么,所以我只给了它们通用名。您需要其他字段吗?我可以很容易地获得前4个字段。理想情况下,如果开销不大,可以将所有字段解析为自己的列;但不需要sure如果每个错误有固定数量的项/字段,那么在分析问题时,我不想走这条路。这并不容易,你可能需要通过多种分析方法才能得到你想要的每个值。好的,我对前4项很满意;这将为我提供理解绝对频率所需的80%我想如果不是全部的话,我可以得到最多的错误。一秒钟…嘿,亚当,谢谢你-当我运行它的时候,我得到了:索引器回溯最近的一次呼叫最后一次在索引器:列表索引超出范围评论不是回溯的好地方,但是我发布的内容应该会让你得到大多数我留下了一条评论,你可能会遇到一些问题。你必须弄清楚如何解析日志中的URI和消息部分。谢谢你的帮助,我的AirGood上的4GB数据听上去非常好。可能有这样的情况,最后一部分我拆分了URI,但消息不起作用因为我只有4个条目需要测试。