溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

怎么用logstash的input file filter收集日志文件

發(fā)布時間:2021-06-26 09:18:13 來源:億速云 閱讀:405 作者:chen 欄目:編程語言

本篇內(nèi)容介紹了“怎么用logstash的input file filter收集日志文件”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠?qū)W有所成!

一、需求

使用logstash讀取本地磁盤上的文件,并通過標準輸出輸出出來。

二、實現(xiàn)步驟

1、前置知識

1、讀取本地磁盤文件?

可以通過 input file plugin 來實現(xiàn)。

2、如何保證文件的每一行只讀取一次?

這個是通過 sincedb來保證的。

2、編寫pipeline文件

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"
    }
}

# 過濾數(shù)據(jù)
filter {
    
}

# 輸出
output {

		# 如果type的值是redis則使用 rubydebug 輸出。 type的值是在 input階段制定的。
    if [type] == 'redis' {
      stdout {
          codec => rubydebug {
              
          }
      }
    }

    if [type] == 'springboot' {
      stdout {
        codec => line {
            charset => "UTF-8"
        }
      }
    }
}

3、Input 中 file 插件的部分參數(shù)解釋:

  1. path:指定了從那個地方讀取文件,使用的是glob匹配語法。

["/var/log/*.log"]  表示匹配的是 /var/log 目錄下所有的以 .log 結(jié)尾的文件。

["/var/log/**/*.log"] 表示匹配的是 /var/log 目錄下、以及它下方的子目錄下所有的以 .log 結(jié)尾的文件。

["/var/log/{redis,springboot}/*.log"] 表示匹配的是 /var/log 目錄下方 redis或springboot目錄下方所有的以 .log 結(jié)尾的文件。
  1. exclue: 表示需要排除的文件。

  2. start_position:表示從那個地方開始讀取文件

    1. beginning 表示從文件開頭讀取。

    2. end 表示從文件結(jié)尾讀取。

  3. sincedb_path: sincedb數(shù)據(jù)庫文件的位置,必須是一個文件,不可是目錄。

    1. Error: Permission denied - Permission denied 
      Exception: Errno::EACCES Stack: org/jruby/RubyFile.java:1267:in `utime'


    2. 解決方案:將 sincedb_path的路徑設(shè)置成一個具體的文件。

    3. 參考鏈接: https://discuss.elastic.co/t/logstash-permission-access-denied-error-for-stack-org-jruby-rubyfile-javain-utime/178016

    4. sincedb 這個記錄了當前讀取文件的inode、讀取到文件字節(jié)的position位置、讀取的是那個文件、文件最后修改的時候戳。

    5. 怎么用logstash的input file filter收集日志文件

    6. sincedb_path => /dev/null 開發(fā)時為了每次都能從文件的開頭讀取,設(shè)置成 /dev/null 可能會報如下錯誤。

  4. stat_interval: 定時監(jiān)測文件是否有更新,單位是秒或者string_duration格式。

  5. discover_interval: 每隔多少時間監(jiān)測是否有新的文件產(chǎn)生,單位是秒。

  6. mode:讀取文件的模式,為tailread,默認是tail。

    1. 當是read時,默認讀取完這個文件后會刪除這個文件。

  7. sincedb_write_interval: 多久將文件的position位置寫入到sincedb文件中。

4、啟動logstash

bin/logstash -f logstash/pipeline.conf/multi-input/multi-input.conf

5、測試

怎么用logstash的input file filter收集日志文件

三、參考鏈接

1、input file plugin 的使用

2、sincedb_path 設(shè)置成 /dev/null 可能報的一個錯

“怎么用logstash的input file filter收集日志文件”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI