【问题标题】:Find patterns across multiple log files?跨多个日志文件查找模式?
【发布时间】:2015-03-01 03:38:08
【问题描述】:

我有八个格式如下的日志文件:

log01:

[Tue Feb 24 07:39:37 2015] *** MARK ***
[Tue Feb 24 07:40:38 2015] *** MARK ***
[Wed Feb 25 17:13:33 2015] *** MARK ***
[Wed Feb 25 17:14:09 2015] *** MARK ***
[Wed Feb 25 17:16:46 2015] *** MARK ***
[Wed Feb 25 17:17:48 2015] *** MARK ***
[Wed Feb 25 17:22:31 2015] *** MARK ***
[Wed Feb 25 19:10:36 2015] *** MARK ***
[Wed Feb 25 19:10:52 2015] *** MARK ***
[Wed Feb 25 19:11:08 2015] *** MARK ***
[Wed Feb 25 19:11:34 2015] *** MARK ***
[Wed Feb 25 19:12:00 2015] *** MARK ***
[Wed Feb 25 19:12:26 2015] *** MARK ***
[Wed Feb 25 19:13:17 2015] *** MARK ***
[Wed Feb 25 19:13:33 2015] *** MARK ***
[Wed Feb 25 19:15:05 2015] *** MARK ***
[Wed Feb 25 19:37:53 2015] *** MARK ***
[Wed Feb 25 19:38:19 2015] *** MARK ***
[Wed Feb 25 19:38:35 2015] *** MARK ***
[Wed Feb 25 23:08:47 2015] *** MARK ***
[Wed Feb 25 23:09:28 2015] *** MARK ***
[Wed Feb 25 23:11:55 2015] *** MARK ***
[Wed Feb 25 23:12:21 2015] *** MARK ***
[Wed Feb 25 23:12:52 2015] *** MARK ***
[Wed Feb 25 23:13:08 2015] *** MARK ***
...

log02:

[Wed Feb 25 07:01:39 2015] *** MARK ***
[Wed Feb 25 17:13:49 2015] *** MARK ***
[Wed Feb 25 17:15:20 2015] *** MARK ***
[Wed Feb 25 17:16:47 2015] *** MARK ***
[Wed Feb 25 17:17:38 2015] *** MARK ***
[Wed Feb 25 17:19:56 2015] *** MARK ***
[Wed Feb 25 17:22:53 2015] *** MARK ***
[Wed Feb 25 19:10:47 2015] *** MARK ***
[Wed Feb 25 19:11:13 2015] *** MARK ***
[Wed Feb 25 19:11:34 2015] *** MARK ***
[Wed Feb 25 19:11:50 2015] *** MARK ***
[Wed Feb 25 19:12:11 2015] *** MARK ***
[Wed Feb 25 19:12:37 2015] *** MARK ***
[Wed Feb 25 19:12:53 2015] *** MARK ***
[Wed Feb 25 19:13:14 2015] *** MARK ***
[Wed Feb 25 19:13:40 2015] *** MARK ***
[Wed Feb 25 19:14:06 2015] *** MARK ***
[Wed Feb 25 19:14:22 2015] *** MARK ***
[Wed Feb 25 19:14:38 2015] *** MARK ***
[Wed Feb 25 19:38:30 2015] *** MARK ***
[Wed Feb 25 21:17:08 2015] *** MARK ***
[Wed Feb 25 23:08:56 2015] *** MARK ***
[Wed Feb 25 23:10:37 2015] *** MARK ***
[Wed Feb 25 23:11:08 2015] *** MARK ***
[Wed Feb 25 23:11:24 2015] *** MARK ***
[Wed Feb 25 23:12:20 2015] *** MARK ***
[Wed Feb 25 23:12:46 2015] *** MARK ***
...

每个日志文件都是由读取不同传感器的同一程序的实例生成的。如果传感器检测到问题,则会创建一个日志条目。如果每个传感器在大约一分钟内检测到问题,则表明发生了全局问题。例如:

来自 log01 的日志条目 [Tue Feb 24 07:39:37 2015] *** MARK ***[Tue Feb 24 07:40:38 2015] *** MARK *** 与 log02 中的任何内容都不对应,因此这不是全局问题,可以忽略。 log02中的日志条目[Wed Feb 25 07:01:39 2015] *** MARK ***[Wed Feb 25 21:17:08 2015] *** MARK ***也可以忽略。

但是,log01 中的条目 [Wed Feb 25 19:10:36 2015] *** MARK *** 和 log02 中的 [Wed Feb 25 19:10:47 2015] *** MARK *** 在一分钟之内,因此这表明一个全局问题会持续到 log01 中的条目 [Wed Feb 25 19:15:05 2015] *** MARK *** 和 log02 中的 [Wed Feb 25 19:14:38 2015] *** MARK ***。所以我可以得出结论,从 2 月 25 日的 19:10 到 19:15 左右,出了点问题。

我正在寻找有关如何解决此问题的建议和技巧,最好使用 UNIX 实用程序。

【问题讨论】:

  • S.O.不是免费的编码服务。您应该尝试解决您的问题,我们帮助解决您的问题。祝你好运。
  • 如何检测问题的结束时间?
  • shellter:我无意让任何人免费编写任何代码。由于日期格式,我不确定它是否可能,所以我希望就如何处理这个问题提出建议。试图为别人描述一个问题会让你对它有不同的看法,这有时会揭示解决方案。
  • Mark Setchell:如果所有日志文件都有一个彼此相差不到一分钟的条目,则检测到问题,一旦此模式停止,问题就结束了,结束时间将是最模式持续的当前时间,例如我的问题中的Wed Feb 25 19:15:05 2015

标签: regex linux bash shell unix


【解决方案1】:

我认为优雅的方法是使用 Perl 读取所有文件并创建一个列表数组。第一个数组将按四舍五入到最接近的分钟的时间进行索引,如果您从file01 读取,您将在给定时间将1 推送到列表中,如果您从@987654324 读取,则将2 推送到列表中@。然后在最后,您将遍历第一个数组以查找长度大于 1 的列表。 Perl 标签可能会有所帮助。

如果你不喜欢 Perl,你可以把一些笨拙的东西放在一起,像这样。

第 1 步:选择比您想要的最早时间更早的开始时间。

第 2 步:解析每个文件,每分钟输出一行输入数据。该行是 0 或 1,具体取决于是否存在问题。每分钟一行确保所有文件排队在所有 8 个文件中与该分钟匹配。

第 3 步:使用paste 将所有 8 个输出文件放在一起,如下所示:

paste -d, file{1..8}

1,0,1,1,1,0,1,1
1,1,1,1,1,1,1,1
0,0,1,1,0,0,0,1
0,1,1,1,0,1,0,1
0,0,1,1,0,0,0,1
0,1,1,1,0,1,0,1
1,0,1,1,1,0,1,1
1,1,1,1,1,1,1,1

第 4 步:使用 awk 查找加起来大于 1 的行。

【讨论】:

    【解决方案2】:

    你可以试试这样的:

    #!/bin/bash
    
    for n in $(awk -F' ' '{print $4;}' log01 | cut -c1-5)
    do
        if (grep -q $n log02)
        then
            echo "Error on $n"
        fi
    done
    
    • 命令 awk -F' ' '{print $4;}' log01 | cut -c1-5 从您的 log01 文件中提取小时 (hh:mm)。
    • grep -q $n log02搜索这个小时,找到就报错。

    【讨论】:

    • 其他6个日志文件呢?
    • if (grep -q $n log02) && (grep -q $n log03) && ... 呢?
    • 嗯,如果在给定时间内log01 没有问题,您将不会查看其他日志,因此其他 7 个日志中可能存在问题,您将永远找不到他们。
    • 也许 OP 必须解释这类事情。可能有很多你和我都不知道的变量。作为起点,对我来说似乎是一个有用的答案。
    • jherran:谢谢你的建议。日志文件需要按日期拆分,但这没问题。但是,问题可能不会首先出现在 log01 中。第一个条目可能在 log06 中,但是如果在一分钟内在所有其他日志文件中创建了一个条目,则发生了全局问题。
    猜你喜欢
    • 2012-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-23
    • 2011-06-10
    • 2017-03-06
    • 1970-01-01
    相关资源
    最近更新 更多