Contents

查詢有壓縮(gz)日誌 log 方法

系統上的舊日誌通常會被 logrotate 壓成 .gz,這時如果還先手動解壓再查內容,不只慢,還會多佔一份空間。其實大部分情況下,直接在壓縮檔上查就夠了。

這篇把幾個最常用的方法整理一下,之後遇到壓縮日誌排錯時比較不用重找指令。

最基本的兩種方式

1. 先解到標準輸出再接 grep

1
gunzip -c mygzfile.gz | grep "string to be searched"

gunzip -c 會把內容吐到標準輸出,不會真的在磁碟上解出一份新檔案。

2. 直接用 zgrep

1
2
zgrep "pattern" file.gz
zgrep "power" messages.*.gz

如果只是單純查關鍵字,通常我會直接用 zgrep,因為它的使用方式和 grep 很接近,記憶成本最低。

什麼時候用哪一種

我自己的判斷很簡單:

  1. 只查文字關鍵字,用 zgrep
  2. 還要串接 awksedcut 等其他處理,再用 gunzip -c | ...

這樣比較不會每次都硬把所有需求塞進同一條指令。

進階一點的查法

例如忽略大小寫,同時查多種錯誤:

1
zgrep -i "error\|warning" /var/log/syslog*.gz

這類寫法很適合在大量歷史日誌中先快速縮小範圍。

效能上的注意事項

雖然不用先解壓很方便,但本質上還是要一邊解壓一邊搜尋,所以:

  1. 檔案很大時會吃 CPU。
  2. 一次掃很多 .gz 也可能花不少時間。
  3. 如果同一批檔案要反覆查很多次,臨時解壓反而可能比較省事。

小結

.gz 日誌最重要的觀念就是:先別急著手動解壓。大多數情況直接用 zgrepgunzip -c 就能處理,而且流程更快、更乾淨。真的需要大量分析時,再考慮集中式日誌系統或臨時解壓處理。