2

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

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

程序:

  1. 用户输入搜索词(正则表达式或简单文本)
  2. 用户输入差异的容差
    [开始]
  3. Grep 找到与搜索词匹配的字符串并发送到新的文本文件
  4. Grep 继续搜索日志,并找到相同的错误消息。差异可能是时间戳、日期和可能的用户名。由于该行与新文件中已有的内容至少有 90% 相似,因此 grep 不会将其复制并继续搜索
  5. Grep 找到与搜索词匹配的新行。行的相似度低于 90%,因此它被复制到新文件并成为 grep 匹配未来结果的另一行。

*编辑:对不起,如果我第一次不清楚。如果需要,我很乐意解释更多。

谢谢。

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

2 回答 2

3

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

于 2012-04-13T19:21:06.053 回答
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;
}
于 2012-04-13T20:25:20.523 回答