日志分析:按时差查找行

lil*_*ili 5 java logging multithreading log-analysis otroslogviewer

我有一个很长的日志文件,用log4j, 10threads写入日志。我正在寻找日志分析器工具,它可以找到用户等待很长时间的行(即同一线程的日志条目之间的差异超过一分钟)。

PS 我正在尝试使用OtrosLogViewer,但它通过某些值(例如,通过线程 ID)进行过滤,并且不会在行之间进行比较。

PPS 新版本的 OtrosLogViewer 有一个“Delta”列,用于计算 adj 日志行之间的差异(以毫秒为单位)

谢谢你

Raf*_*ele 3

这个简单的 Python 脚本可能就足够了。为了进行测试,我分析了本地 Apache 日志,顺便说一句,该日志使用通用日志格式,因此您甚至可以按原样重用它。我只是计算两个后续请求之间的差异,并打印超出特定阈值(在我的测试中为 1 秒)的增量的请求行。您可能希望将代码封装在一个函数中,该函数也接受带有线程 ID 的参数,以便您可以进一步过滤

#!/usr/bin/env python
import re
from datetime import datetime

THRESHOLD = 1

last = None
for line in open("/var/log/apache2/access.log"):
    # You may insert here something like
    # if not re.match(THREAD_ID, line):
    #   continue
    # Python does not support %z, hence the [:-6]
    current = datetime.strptime(
        re.search(r"\[([^]]+)]", line).group(1)[:-6],
        "%d/%b/%Y:%H:%M:%S")
    if last != None and (current - last).seconds > THRESHOLD:
        print re.search('"([^"]+)"', line).group(1)
    last = current
Run Code Online (Sandbox Code Playgroud)