logstash multi pipeline的使用

1、背景

假設咱們須要從多個渠道來收集數據,好比:一、從文件收集。二、從tcp收集。不一樣的渠道收集過來的數據須要作不一樣的處理。那麼咱們這個時候應該如何處理呢?html

2、解決方案

一、方案一:

使用同一個 logstash 實例,而後將在一個 pipeline 中,接收多個輸入,好比:vim

input {
	file {}
	file {}
	tcp {}
}
複製代碼

這樣雖然能夠實現,可是咱們 在 filteroutput階段若是不一樣的輸入存在不一樣的過濾、輸出等,那麼這個文件將會很是複雜,須要進行各類判斷,很差維護。api

二、方案二:

使用多個 logstash 實例,每一個 logstash 實例處理不一樣的輸入。這樣雖然能夠實現,可是 logstash 稍微有點耗費性能,也是不可取的。ruby

三、方案三:

在同一個 logstash 實例中,使用多個 pipeline,每一個 pipeline 處理不一樣的 input,filterout。即配置分散在多個配置文件中。bash

3、實現步驟

此處採用上方的 方案三 來實現。markdown

一、編寫 pipeline 文件

一、從文件收集,輸出到控制檯

vim file-pipeline.confsocket

input {
    file {
        path => ["/Users/huan/soft/elastic-stack/logstash/logstash/pipeline.conf/multi-pipeline/file-pipeline.log"]
        start_position => "end"
        sincedb_path => "/Users/huan/soft/elastic-stack/logstash/logstash/pipeline.conf/multi-pipeline/sincedb.db"
        sincedb_write_interval => "15 seconds"
        mode => "tail"
        type => "file-pipeline"
    }
}

filter {
    
}

output {
    stdout {
        codec => rubydebug {
            metadata => true
        }
    }
}
複製代碼

二、從socket收集,輸出到控制檯

vim tcp-pipeline.conftcp

# 開啓一個tcp監聽在9092端口
# id 的值建議設置成惟一的值,這在多個tcp input時,使用監控api時很是有用的。
input {
    tcp {
        port => 9202
        host => "127.0.0.1"
        mode => "server"
        type => "tcp-pipeline"
        id => "console-tcp"
    }
}

filter {
    
}

output {
    stdout {
        codec => line {
            charset => "UTF-8"
        }
    }
}
複製代碼

注意⚠️:ide

一、tcp 中的 id的值建議設置成一個惟一的值,這個當咱們有多個 tcp 輸入時,在咱們使用監控api會很是有用。oop

tcp 中 id的值

二、修改 pipelines.yml 配置文件

vim LS_HOME/config/pipelines.yml

- pipeline.id: file-pipeline
  path.config: "/Users/huan/soft/elastic-stack/logstash/logstash/pipeline.conf/multi-pipeline/file-pipeline.conf"
- pipeline.id: tcp-pipeline
  queue.type: persisted
  path.config: "/Users/huan/soft/elastic-stack/logstash/logstash/pipeline.conf/multi-pipeline/tcp-pipeline.conf"
複製代碼

注意⚠️:

一、若是上方的配置文件使用的是一個 pipeline,好比刪除下方的 tcp-pipeline,將 file-pipeline的 path.config 的值修改爲 .../*.conf,

那麼此時會共用 output,會發現數據重複。

即修改爲:

# 這樣是多個配置文件共用一個 pipeline,filter\output等會共享。
- pipeline.id: file-pipeline
  path.config: "/Users/huan/soft/elastic-stack/logstash/logstash/pipeline.conf/multi-pipeline/*.conf"
複製代碼

三、啓動logstash

bin/logstash
複製代碼

注意⚠️:

一、此處的啓動命令後不可跟 -e-f,若是跟了,則不會使用默認的 config/pipelines.yml

logstash pipeline 啓動注意事項

四、測試

一、測試 file 收集

cd /Users/huan/soft/elastic-stack/logstash/logstash/pipeline.conf/multi-pipeline
echo "觀察控制檯輸出" >> file-pipeline.log
複製代碼

二、測試從 tcp 收集

nc 127.0.0.1 9202
123456 -> 觀察控制檯輸出
複製代碼

三、結果

測試結果

4、參考文檔

一、tcp 文件收集

二、多pipeline https://www.elastic.co/guide/en/logstash/current/multiple-pipelines.html

相關文章
相關標籤/搜索