2015-08-21 48 views
0

我們的服務器根據日期將日誌文件存儲在目錄下,其中時間爲文件名。例如:Logstash:如何讀取由日期/時間創建的日誌

/2015.08.21/01.23 
/2015.08.21/01.24 
/2015.08.21/01.25 

其中文件名遵循[小時]。[分鐘]約定。

如何將Logstash配置爲從最新文件讀取(一般慣例)?

  • 第一次嘗試:

我將路徑設置爲:

path => ["/2015.08.21/*"] 

Logstash開闢了很多文件,直到LOGSOURCE(Linux版)不允許它打開新文件。

  • 第2次嘗試:

使用rsync複製所有文件,並將它們合併到單個文件。

但是,我有問題處理部分日誌文件,例如,如果當前日誌文件是11.12,並且它仍在寫入,我將只有部分數據。

  • 第三嘗試:

定期創建符號鏈接,指向最新文件。我還沒有嘗試,但我認爲它應該工作,我需要弄清楚如何在Linux中創建簡單的調度程序。

  • 更新

我已經嘗試了3嘗試,但我看到一些缺點此方法。

  1. 如果Logstash花費超過1分鐘處理文件,它將無法處理整個文件,因爲符號鏈接指向下一個文件。
  2. 可能無法處理最後1個或2個事件。
+0

可能是SO格式問題,但是您的意思是「/ */*」還是「**」?你是否試圖第一次運行它(它有舊文件處理的地方)? –

+0

感謝Alain發現格式錯誤。 – janetsmith

回答

1

您嘗試運行此配置的第一次,它似乎是合理的logstash想開了很多文件。在這種情況下,考慮提高過程可用的打開文件的數量。

處理完文件後,它會檢測到它沒有被寫入,也沒有保持打開文件。它會定期檢查文件以確保沒有寫入新內容。所以,一旦你陷入困境,它應該更友善。

爲了趕上在初始運行,嘗試圖形設定更小的東西,如:

path => ["/2015.08.21/01.*"] 

應該只匹配60個文件。

您可能會重新考慮您的設計每分鐘有一個文件;沒有更多的信息,它似乎過度。

+0

感謝您的建議。但是如果我在早上8點開始logstash,那麼我必須使用01. *,02. *,03. *來嘗試。這將有點工作。我無法控制日誌策略:(我不是dev-op。 – janetsmith

+0

Logstash打算保持運行,你也可以創建類似「0 [1-5] *」的模式。 –

+0

Logstash給了我「文件打開權限錯誤「,當它讀取第100個文件時,我想我的帳戶只允許同時讀取100個文件,而且你是對的,Logstash應該保持運行,我正在做概念驗證工作,Logstash運行在我自己的筆記本電腦上,所以它不是一直在運行 – janetsmith

相關問題