2015-06-02 149 views
13

背景:Logstash關閉文件描述符?

我們有rsyslog創建日誌文件目錄,如:/var/log/rsyslog/SERVER-NAME/LOG-DATE/LOG-FILE-NAME 那麼多臺服務器被溢出的不同日期的日誌到一箇中央位置。

我們閱讀這些日誌並在elasticsearch存儲分析我有我的logstash的配置文件是這樣的:

file{ 
    path => /var/log/rsyslog/**/*.log 
} 

問題:

現在爲目錄中的日誌文件數增加,logstash打開新文件的文件描述符(FD),不會爲已讀日誌文件釋放FD。 由於日誌文件是根據日期生成的,因此一旦讀取日誌文件,之後它就沒有用了,因爲它在該日期之後不會被更新。

我在/etc/security/limits.conf

我們可以做出一些時間,因此文件句柄,這個數字開不增加太多後logstash關閉手柄增加了文件開口限制65K?

+0

這是什麼Logstash版本?另外,你可以發佈完整的配置文件嗎? –

+0

因此請求:https://github.com/elastic/logstash/issues/1604。你有同樣的症狀嗎?在一段時間後的日誌中有例外情況?如果你運行'sudo lsof | grep java | wc -l'你看到描述符隨着時間的推移穩定增加嗎?\ –

回答

6

我想你可能已經擊中了這個bug:http://github.com/elastic/logstash/issues/1604。你有同樣的症狀嗎?在一段時間後的日誌中有例外情況?如果您運行sudo lsof | grep java | wc -l,您是否看到描述符隨着時間推移穩步增加? (其中一些可能會關閉,但有些會保持打開狀態並且它們的數量會增加)

0

我一直在跟蹤此問題一段時間,但我不知道它是否已正確解決。

我們在一條類似的船上,可能比較大:Logstash無法打開一個箱子上成千上萬個日誌文件的句柄,即使它們中只有很少的文件被主動寫入。 LOGSTASH-271捕獲了這個問題,並且有一些嘗試修補Logstash,包括PR #1260

這似乎是一個解決方案,它可以通過PR #1545進入Logstash 1.5,但我從來沒有親自測試過。我們結束了分叉Logstash用來實現名爲FileWatch的文件輸入到FFileWatch的基礎庫,後者增加了一個"eviction mechanism"

這種方法背後的基本思想是隻在文件寫入時保持文件打開狀態。通常情況下,Logstash將在文件上打開一個句柄並永久保持打開狀態,但如果文件最近沒有變化(eviction_interval),FFileWatch會添加一個關閉句柄的選項。然後,我使用分叉的gem創建了一個定製的Logstash。

顯然這不是理想的,但它對我們有效。最後,我們完全丟棄了Logstash來獲取日誌文件,儘管我們仍然在日誌處理管道中使用它。我們實施了我們自己的輕量級日誌託運人(Franz),它不會遇到這個問題。

相關問題