重慶分公司,新征程啟航
為企業提供網站建設、域名注冊、服務器等服務
為企業提供網站建設、域名注冊、服務器等服務
本篇內容介紹了“怎么用logstash的input file filter收集日志文件”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
為涪陵等地區用戶提供了全套網頁設計制作服務,及涪陵網站建設行業解決方案。主營業務為成都網站制作、成都做網站、外貿營銷網站建設、涪陵網站設計,以傳統方式定制建設網站,并提供域名空間備案等一條龍服務,秉承以專業、用心的態度為用戶提供真誠的服務。我們深信只要達到每一位用戶的要求,就會得到認可,從而選擇與我們長期合作。這樣,我們也可以走得更遠!
使用logstash讀取本地磁盤上的文件,并通過標準輸出輸出出來。
1、讀取本地磁盤文件?
可以通過 input file plugin 來實現。
2、如何保證文件的每一行只讀取一次?
這個是通過 sincedb
來保證的。
vim multi-input/multi-input.conf
# input { file { path => ["/Users/huan/soft/elastic-stack/logstash/logstash/pipeline.conf/multi-input/redis.log"] start_position => "beginning" sincedb_path => "/Users/huan/soft/elastic-stack/logstash/logstash/pipeline.conf/multi-input/sincedb.db" type => "redis" mode => "read" stat_interval => "1 second" discover_interval => 15 sincedb_write_interval => 15 add_field => { "custom_mode" => "tail" } } file { path => ["/Users/huan/soft/elastic-stack/logstash/logstash/pipeline.conf/multi-input/springboot.log"] start_position => "end" sincedb_path => "/Users/huan/soft/elastic-stack/logstash/logstash/pipeline.conf/multi-input/sincedb.db" mode => "tail" type => "springboot" } } # 過濾數據 filter { } # 輸出 output { # 如果type的值是redis則使用 rubydebug 輸出。 type的值是在 input階段制定的。 if [type] == 'redis' { stdout { codec => rubydebug { } } } if [type] == 'springboot' { stdout { codec => line { charset => "UTF-8" } } } }
path
:指定了從那個地方讀取文件,使用的是glob匹配語法。
["/var/log/*.log"] 表示匹配的是 /var/log 目錄下所有的以 .log 結尾的文件。 ["/var/log/**/*.log"] 表示匹配的是 /var/log 目錄下、以及它下方的子目錄下所有的以 .log 結尾的文件。 ["/var/log/{redis,springboot}/*.log"] 表示匹配的是 /var/log 目錄下方 redis或springboot目錄下方所有的以 .log 結尾的文件。
exclue
: 表示需要排除的文件。
start_position
:表示從那個地方開始讀取文件
beginning 表示從文件開頭讀取。
end 表示從文件結尾讀取。
sincedb_path
: sincedb數據庫文件的位置,必須是一個文件,不可是目錄。
Error: Permission denied - Permission denied Exception: Errno::EACCES Stack: org/jruby/RubyFile.java:1267:in `utime'
解決方案:將 sincedb_path
的路徑設置成一個具體的文件。
參考鏈接: https://discuss.elastic.co/t/logstash-permission-access-denied-error-for-stack-org-jruby-rubyfile-javain-utime/178016
sincedb 這個記錄了當前讀取文件的inode、讀取到文件字節的position位置、讀取的是那個文件、文件最后修改的時候戳。
sincedb_path => /dev/null
開發時為了每次都能從文件的開頭讀取,設置成 /dev/null 可能會報如下錯誤。
stat_interval
: 定時監測文件是否有更新,單位是秒或者string_duration格式。
discover_interval
: 每隔多少時間監測是否有新的文件產生,單位是秒。
mode
:讀取文件的模式,為tail
或read
,默認是tail
。
當是read
時,默認讀取完這個文件后會刪除這個文件。
sincedb_write_interval
: 多久將文件的position位置寫入到sincedb文件中。
bin/logstash -f logstash/pipeline.conf/multi-input/multi-input.conf
1、input file plugin 的使用
2、sincedb_path 設置成 /dev/null 可能報的一個錯
“怎么用logstash的input file filter收集日志文件”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注創新互聯網站,小編將為大家輸出更多高質量的實用文章!