如何合并多個記錄檔

來源:互聯網
上載者:User

如何合并多個記錄檔?
下面以標準的clf格式日誌(apache)為例:
apche的日誌格式是這樣的:
%h %l %u %t /"%r/" %>s %b
具體的例子:
111.222.111.222 - - [03/Apr/2002:10:30:17 +0800] "GET /index.html HTTP/1.1"

200 419

最簡單的想法是將日誌一一讀出來,然後按日誌中的時間欄位排序
cat log1 log2 log3 |sort -k 4 -t " "
注釋:
-t " ": 日誌欄位分割符號是空格
-k 4: 按第4個欄位排序,也就是:[03/Apr/2002:10:30:17 +0800] 這個欄位
-o log_all: 輸出到log_all這個檔案中

但這樣的效率比較低,要知道。如果一個服務已經需要使用負載平衡,其服務的單機

日誌條數往往都超過了千萬級,大小在幾百M,這樣要同時對多個幾百M的日誌進行排

序,機器的負載可想而之……
其實有一個最佳化的途徑,要知道:即使單個日誌本身已經是一個“已經按照時間排好

序“的檔案了,而sort對於這種檔案的排序合并提供了一個最佳化合并演算法:使用 -m

merge合并選項,
因此:合并這樣格式的3個記錄檔log1 log2 log3並輸出到log_all中比較好方法是


sort -m -t " " -k 4 -o log_all log1 log2 log3
注釋:
-m: 使用 merge最佳化演算法

注意:合并後的日誌輸出最好壓縮以後再發給webalizer處理
有的系統能處理2G的檔案,有的不能。有的程式能處理大於2G的檔案,有的不能。盡

量避免大於2G的檔案,除非確認所有參與處理的程式和作業系統都能處理這樣的檔案

。所以輸出後的檔案如果大於2G,最好將日誌gzip後再發給webalizer處理:大於2G的

檔案分析過程中檔案系統出錯的可能性比較大,並且gzip後也能大大降低分析期間的

I/O操作。

日誌的按時間排序合并就是這樣實現的。 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.