2015-02-10 73 views
-1

各位程序員,您好! 我需要針對日誌文件問題的解決方案。 這是一個基於unix的環境。 HP-UX。 有一個包含每日創建的日誌文件的特定目錄,並根據需要添加消息和錯誤。 這些文件可以大到1GB的文本。 我需要找到一個特定的短語。 你會如何建議我這樣做?搜索字符串大型日誌文件

系統人員建議我不要使用簡單的GREP,因爲這會在每5分鐘的搜索週期內導致高CPU使用率。

我能在這種情況下做什麼?

+1

也許只是解析日誌文件,將需要的數據存儲在數據庫中 並索引要搜索的列。 grep非常適用於 一次性或小型文本文件。也許看看 [kibana](http://www.elasticsearch.org/overview/kibana/)和 [logstash](http://logstash.net/)。如果您定期解析並索引 ,則您將交易一些磁盤空間(索引)和 更新索引所需的時間(少量時間),並返回 作爲回報,您將獲得非常快速的搜索查詢。作爲旁註,這個問題在我看來不一定與Perl有關。 – average 2015-02-10 16:51:06

+0

'File :: Tail' perl模塊如何?您不需要每5分鐘重新讀取一次文件,但是您可以在事件到達時解析事件。 – Sobrique 2015-02-12 22:02:47

回答

0

如果該短語僅在一行中,則很簡單。只需逐行讀取文件並在每行上測試正則表達式,直到找到它。 喜歡的東西:

open(F, '<FILENAME>') or die "can't open file : $!"; 
while (my $line = <F>) { 
    if ($line =~ /<MYREGEXP>/) { 
     // regexp found 
    } 
}