logstash Multiple Pipelines

December 22, 2018

logstash Multiple Pipelines

遇到的問題是,使用 filebeat 將 json 數據傳遞給 logstash 處裡並建立索引 pcap 與使用 logstash 讀取 CSV 數據建立 CSV 索引。 兩者都是不同的索引。但是 kibana 上的 pcap 索引卻讀取 csv 索引數據。這造成分析上的錯誤。以下會先了解 logstash 運作以及解決方式。

Logstash 事件處理管道有三個階段:inputs → filters → outputs。

輸入和輸出支援編解碼,能夠在數據進入或退出管道時對數據進行編碼或解碼,而無需使用單獨的 filters。

inputs

將輸入的數據導入至 logstash。 常用的輸入:

plugins

Filters

是 Logstash 管道中的中間處理機制。可以將過濾與條件組合,以便在事件滿足特定條件時對其執行操作。 常用的過濾:

plugins

Outputs

輸出是 Logstash 管道的最後階段。事件可以傳遞多個輸出,但是一旦所有輸出處理完成,事件就完成了它的執行。 常用的輸出:

Codecs

編解碼器基本上是串流過濾器,可以作為輸入或輸出的一部分運行。使用編解碼器可以輕鬆地將消息傳輸與序列化過程分開。流行的編解碼器包括 json、msgpack 和 plain。

plugins

問題解決

藉由 Multiple Pipelines 來實現。這裡需再 logstahs 的 config 目錄裡新增 pipelines.yml 檔案, 這邊在 docker-compose 已經做一個掛載的動作,不須再而外掛載。

pipelines.yml

透過 pipelines.yml 的配置文件中讀取它們的定義。 其中 logstash.yml 中的 path.config: /usr/share/logstash/pipeline 必須註解,未在 pipelines.yml 檔案中寫入設置的值將回參考 logstash.yml 設置檔案中指定的默認值。

logstash$ vi config/pipelines.yml
- pipeline.id: csv
  queue.type: persisted
  path.config: "/usr/share/logstash/pipeline/readCSV.conf"
- pipeline.id: pcap
  queue.type: persisted
  path.config: "/usr/share/logstash/pipeline/pcap.conf"
- pipeline.id: metricbeat
  queue.type: persisted
  path.config: "/usr/share/logstash/pipeline/metricbeat.conf"

參考資料

logstash-multiple-pipelines discuss