logstash-input-file 配置屬性詳解

衣舞晨風發表於2017-03-28

Logstash 使用一個名叫 FileWatch 的 Ruby Gem 庫來監聽檔案變化。這個庫支援glob 展開檔案路徑,而且會記錄一個叫 .sincedb 的資料庫檔案來跟蹤被監聽的日誌檔案的當前讀取位置。所以,不要擔心 logstash 會漏過你的資料。
sincedb 檔案中記錄了每個被監聽的檔案的 inode, major number, minor number 和pos。
配置示例:

input {
    file {
    path => ["/var/log/*.log", "/var/log/message"]
    type => "system"
    start_position => "beginning"
    }
}

解釋
有一些比較有用的配置項,可以用來指定 FileWatch 庫的行為:

  • discover_interval
    logstash 每隔多久去檢查一次被監聽的 path 下是否有新檔案。預設值是 15秒。
  • exclude
    不想被監聽的檔案可以排除出去,這裡跟 path 一樣支援 glob 展開。
  • close_older
    一個已經監聽中的檔案,如果超過這個值的時間內沒有更新內容,就關閉監聽它的檔案控制程式碼。預設是 3600 秒,即一小時。
  • ignore_older
    在每次檢查檔案列表的時候,如果一個檔案的最後修改時間超過這個值,就忽略這個檔案。預設是 86400 秒,即一天。
  • sincedb_path
    如果你不想用預設的 $HOME/.sincedb (Windows 平臺上在
    C:\Windows\System32\config\systemprofile.sincedb ),可以通過這個配置定義 sincedb 檔案到其他位置。
  • sincedb_write_interval
    logstash 每隔多久寫一次 sincedb 檔案,預設是 15 秒。
  • stat_interval
    logstash 每隔多久檢查一次被監聽檔案狀態(是否有更新),預設是 1 秒。
  • start_position
    logstash 從什麼位置開始讀取檔案資料,預設是結束位置,也就是說 logstash 程式會以類似 tail -F 的形式執行。如果你是要匯入原有資料,把這個設定改成”beginning”,logstash 程式就從頭開始讀取,類似 less +F 的形式執行。

注意
1、通常你要匯入原有資料進 Elasticsearch 的話,你還需要 filter/date 外掛來修改預設的”@timestamp” 欄位值。稍後會學習這方面的知識。
2、FileWatch 只支援檔案的絕對路徑,而且會不自動遞迴目錄。所以有需要的話,請用陣列方式都寫明具體哪些檔案。
3、LogStash::Inputs::File 只是在程式執行的註冊階段初始化一個 FileWatch 物件。所以它不能支援類似 fluentd 那樣的

path => "/path/to/%{+yyyy/MM/dd/hh}.log" 

寫法。達到相同目的,你只能寫成

path =>"/path/to/*/*/*/*.log"

FileWatch 模組提供了一個稍微簡單一點的寫法:

/path/to/**/*.log 

用 ** 來縮寫表示遞迴全部子目錄。
4、start_position 僅在該檔案從未被監聽過的時候起作用。如果 sincedb 檔案中已經有這個檔案的 inode 記錄了,那麼 logstash 依然會從記錄過的 pos開始讀取資料。所以重複測試的時候每回需要刪除 sincedb 檔案(官方部落格上提供了另一個巧妙的思路:將 sincedb_path 定義為 /dev/null ,則每次重啟自動從頭開始讀)。

作者:jiankunking 出處:http://blog.csdn.net/jiankunking

相關文章