簡體   English   中英

在多個日志文件中查找模式?

[英]Find patterns across multiple log files?

我有以下格式的八個日志文件:

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 ***
...

每個日志文件都是由讀取不同傳感器的同一程序的實例生成的。 如果傳感器檢測到問題,則會創建一個日志條目。 如果每個傳感器在大約一分鍾內檢測到問題,則表明已發生全局問題。 例如:

[Tue Feb 24 07:39:37 2015] *** MARK ***的日志條目[Tue Feb 24 07:39:37 2015] *** MARK ***[Tue Feb 24 07:40:38 2015] *** MARK ***與log02中的任何內容都不對應,因此這不是一個全球性問題,可以忽略。 [Wed Feb 25 07:01:39 2015] *** MARK ***的日志條目[Wed Feb 25 07:01:39 2015] *** MARK ***[Wed Feb 25 21:17:08 2015] *** MARK ***也可以忽略。

但是, [Wed Feb 25 19:10:36 2015] *** MARK ***條目[Wed Feb 25 19:10:36 2015] *** MARK ***和log02中的[Wed Feb 25 19:10:47 2015] *** MARK *** [Wed Feb 25 19:10:36 2015] *** MARK *** [Wed Feb 25 19:10:47 2015] *** MARK ***在一分鍾之內,所以表示持續到輸入[Wed Feb 25 19:15:05 2015] *** MARK ***和log02 in [Wed Feb 25 19:14:38 2015] *** MARK ***的全局問題。 因此,我可以得出結論,從2月25日的19:10到19:15左右,出現了問題。

我正在尋找有關如何解決此問題的建議和技巧,最好使用UNIX實用程序。

您可以嘗試如下操作:

#!/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 awk -F' ' '{print $4;}' log01 | cut -c1-5log01文件中提取小時( hh:mm )。
  • grep -q $n log02搜索該小時並報告並發現錯誤。

我認為,一種優雅的方法是使用Perl讀取其中的所有文件並創建一個列表數組。 第一陣列將由四舍五入至最接近的分鍾的時間進行索引,並且你將推動一個1在給定的時間,如果你從讀取到列表file012如果你從閱讀file02 然后,最后,您將遍歷第一個數組以查找長度大於一個的列表。 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的行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM