特定のエラーメッセージに対して日付が表示された複数のログをgrepし、エラーメッセージの数が最も多い日付を示すログを確認します。

特定のエラーメッセージに対して日付が表示された複数のログをgrepし、エラーメッセージの数が最も多い日付を示すログを確認します。

こんにちは、タイトルに示されている解決策を探しています。

日付が表示された1つのログから特定のエラーメッセージを計算する方法を知っていますが、複数のログでこれを実行してから、エラーメッセージが最も頻繁に発生するログを表示する方法を見つけるのが困難です。

日付が表示された単一のログファイルの場合、例:

log1 = message.log.2022-01-07
log2 = message.log.2022-01-06
log3 = message.log.2022-01-05
log4 = message.log.2022-01-04

error message = ErrorCode123

統計ログ1でエラーメッセージが発生しました:

grep ErrorCode123 message.log.2022-01-07 | wc -l

しかし、4つのログのそれぞれでこれを自動化してどのログの数が最も高いかを表示するにはどうすればよいですか?理想的には、同じ命名規則に従って特定の数のログ(4つではなく)に対応できるように、一種のワイルドカードを使用することをお勧めします。message.log.*

このように使用するのが実用的でない場合は、grep他の方法もお勧めします。

答え1

逆順に一致するアイテム数:

grep -c ErrorCode123 message.log.* | awk -F':' '{print $2, $1}' | sort -nr
7 message.log.2022.01-05
4 message.log.2022.01-07
3 message.log.2022.01-06

親一致のみを返す:追加| head -1

答え2

1つのファイルに4つの一致が含まれ、他のファイルにはより少ない一致が含まれているとします。

$ grep -n ErrorCode123 message.log.* | sort -rt: -k2,2 | sort -ut: -k1,1 | sort -rt: -k2,2 | head -1
message.log.2022-01-04:4:ErrorCode123

これで発生する可能性のある問題は、一致するエントリ数が同じファイルが複数あることです。

関連情報