日志文件中的百分比差异

时间:2012-04-13 19:16:34

标签: regex perl grep

在浏览日志文件时,我经常会一次又一次地看到相同的错误消息。当然,由于时间戳,用户名,IP地址等原因,两行永远不会相同。

我正在寻找一种设置“百分比差异”的方法,并忽略任何与已报告的错误消息90%相似的行。另一个想法是总是忽略时间戳差异。

步骤:

  1. 用户输入搜索词(正则表达式或简单文本)
  2. 用户输入差异容差
    [开始]
  3. Grep查找字符串匹配搜索词并发送到新文本文件
  4. Grep继续搜索日志,并找到相同的错误消息。差异可能是时间戳,日期和可能的用户名。由于该行至少与新文件中已有的90%相似,因此grep不会将其复制并继续搜索
  5. Grep找到与搜索字词匹配的新行。 Line的相似度不到90%,因此它会被复制到新文件中,并成为grep匹配未来结果的另一行。
  6. *编辑:对不起,如果我第一次不清楚。如果需要,我会很乐意解释更多。

    感谢。

    • Log.1 - DD:MM:YYYY HH:MM:SS:MS错误 - USER无法登录IPADDRESS
    • Log.1 - DD:MM:YYYY HH:MM:SS:启动时MS硬件失败
    • Log.2 - DD:MM:YYYY HH:MM:SS:MS资源被拉长,警告 - 检查RAM

2 个答案:

答案 0 :(得分:3)

我不知道任何完整的开箱即用解决方案,但Text::Levenshtein和类似的算法可以帮助您想出一个通用字符串与另一个类似的方法。

答案 1 :(得分:2)

另一个想法是使用时间戳缓存日志消息,因此您不要重复上次,例如分钟中看到的消息。

my %msg_cache = ();
sub log_filter {
    my $msg = shift;
    if (defined($msg_cache{$msg}) && $msg_cache{$msg} < time-60) {
        # we've logged this message in the last minute - skip
        return;
    }
    $msg_cache{$msg} = time;
    return 1;
}