2

ログ ファイルを調べていると、同じエラー メッセージに何度も遭遇することがよくあります。もちろん、タイムスタンプ、ユーザー名、IP アドレスなどにより、2 つの行が同一になることはありません。

「パーセント差」を設定する方法を探しており、すでに報告されているエラー メッセージと 90% 類似している行は無視します。もう 1 つの考えは、タイム スタンプの違いも常に無視することです。

手順:

  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

もう 1 つのアイデアは、ログ メッセージをタイムスタンプと共にキャッシュすることです。これにより、過去 (たとえば 1 分間) に見たメッセージを繰り返さなくなります。

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 に答える