Logstash 高階用法Pipelines模式

2022-07-20 11:39:13 字數 2592 閱讀 3819

作為生產者和消費者之間資料流的乙個中心元件,需要乙個 logstash 例項負責驅動多個並行事件流的情況。預設情況下,這樣的使用場景的配置讓人並不太開心,使用者會遭遇所謂的條件地獄(conditional hell)。因為每個單獨的 logstash 例項預設支援乙個管道,該管道由乙個輸入、若干個過濾器和乙個輸出組成,如果要處理多個資料流,就要到處使用條件判斷。

已知的在乙個管道中實現多個獨立流的方法是使用條件判斷。主要方式是在輸入部分通過標籤標記事件,然後在過濾器中和輸出階段建立條件分支,對貼有不同標籤的事件,應用不同的外掛程式集。這種方式雖然可以解決問題,但在實際的使用中卻非常的痛苦!下面是乙個簡單的 demo 片段:

input 

tcp

}filter

} else if "firewall" in [tags]

} }output

} else if "firewall" in [tags]

} }

對應的 logstash 管道配置已經被條件語句包裹的十分臃腫,而它們的唯一目的是保持流的獨立性。

雖然使用條件實現獨立的多個流是可行的,但是很容易看出,由於存在單個管道和處理的單個階段,隨著複雜性的增加,配置會變得非常冗長,很難管理。下圖展示了包含兩個流的簡單管道:

不幸的是,這並不是該方案的唯一缺陷。

如果您熟悉 logstash 的工作原理,就會知道管道的輸出部分接收到一批事件,並且在所有事件和完成所有輸出之前不會移動到下一批事件。這意味著,對於上面的管道,如果 tcp 套接字目標不可達,logstash將不會處理其他批次的事件,這也就意味著 elasticsearch 將不會接收事件,並且會對 tcp 輸入和 beats 輸入施加反壓力。

如果 tcp - > grok - > tcp 資料流處理大量的小資料,而 beats -> dissect -> es 資料流中的單個資料體積大但是數量少。那麼前乙個資料流希望有多個 worker 並行並其每一批次處理更多事件,第二個資料流則期望使用少量的 worker 和每批次處理少量的事件。使用單個管道,無法為單個資料流指定獨立的管道配置。

上述問題可以通過在同一臺機器上執行多個 logstash 例項來解決,然後可以獨立地管理這些例項。但是即使這樣的解決方案也會產生其他問題:

這種方式其實很糟糕!

從 logstash 6.0 開始,引入了 multiple pipelines,才完美的解決了這個問題。multiple pipelines 的配置非常簡單:在配置檔案 pipelines.yml 中新增新的 pipeline 配置並指定其配置檔案就可以了。下面是乙個簡單的 demo 配置:

- pipeline.id: apache

pipeline.batch.size: 125

queue.type: persisted

path.config: "/path/to/config/apache.cfg"

queue.page_capacity: 50mb

- pipeline.id: test

pipeline.batch.size: 2

pipeline.batch.delay: 1

queue.type: memory

config.string: "input } output }"

這個 yaml 檔案包含乙個雜湊(或字典)列表,其中每個雜湊表示乙個管道,鍵和值為該管道設定名稱。被省略的設定值返回到它們的預設值。

下面來看乙個真實點的例子,筆者在 ubuntu 18.04 server 中安裝了 logstash 6.2.4,除了在預設的配置檔案目錄(/etc/logstash/conf.d)中新增配置檔案外,建立新的目錄 /etc/logstash/myconf.d,並在 /etc/logstash/myconf.d 目錄下建立 logstash 配置檔案 krtest.conf。然後在 /etc/logstash/pipelines.yml 檔案中新增新的 pipeline 配置:

- pipeline.id: main

path.config: "/etc/logstash/conf.d/*.conf"

- pipeline.id: krtest

path.config: "/etc/logstash/myconf.d/krtest.conf"

其中 pipeline.id 為 main 的管道是預設的配置,我們新新增了 id 為 krtest 的管道並指定了對應的配置檔案路徑。啟動 logstash,如果你安裝的 x-pack 外掛程式就可以在 kibana->monitoring->logstash 中看到新新增的名稱為 krtest 的管道:

使用 multiple pipelines 後,我們的 logstash 配置檔案就可以寫得像下面的**一樣簡練(不再需要那麼多的條件語句)了:

input 

}filter

}output

}

注意:當我們配置pipelines.yml後,我們啟動不需要再指定配置檔案!

**:

pip常見用法彙總

1 pip安裝 yum y install epel release yum y install python pip 2 pip安裝軟體 1 安裝單個軟體 pip install packagename 2 更新單個軟體 pip install upgrade packagename 3 解除安裝...

Logstash安裝和簡單用法

啟動logstash 測試1 input plugins輸入 path 可以用萬用字元來指定多個 sincedb path 指定乙個檔案,用來追蹤當前監聽日誌的當前位置 start position 從哪開始讀取 beginning從頭開始,end從追加後的位置開始讀取 2 output plugi...

python高階用法 Python高階用法

python高階用法 三元表示式 x 10 y 20 print x if x y else y x 100 y 20 print x if x y else y 列表推導式和生成器 列表推導式 print i for i in range 10 print i 2 for i in range 1...