logstash簡介及架構

1、logstash介紹

  • 數據收集處理引擎
  • ETL工具

2、logstash架構簡介

Logstash Event是一個java object,它對外暴露了獲取內部字段以及修改內部字段值的一些api。

下面舉例講解:

stdin:標準輸入

codec是line,這個codec的作用就是按照每一行切割數據,就是說把每一行都轉換成logstash event

stdout:標準輸出

codec是json,這個codec的作用就是把每一個logstash event轉換成json的對象輸出。

line codec decode是按照換行符\n切割的。所以一行原始數據被分成了兩個event。

所以,在原始數據和event之間不是一對一的關係。

event經過json codec encode後就把每一個logstash event輸出成 json object。

3、測試

可以看到上圖的數據有一個message爲空的數據,是因爲在bar的後面又換了一行。

4、詳細講解logstash的架構

下圖是logstash6.x的架構

input是可以有多個的,每個input都有自己的codec,箭頭代表數據流向。

數據會經過Queue,Queue會把流入的數據分發到不同的pipeline中。

每一個pipeline有Batcher、filter、output。

Batcher的作用是批量的從Queue中取數據。Batcher是可以配置的,比如一次取一百個數據。

看上圖可知我有三個pipeline。

5、Life of an Event

這裏介紹logstash Event的生命歷程。

web.log爲我們的配置文件

隨着時間的推移,Batcher會收集越來越多的數據,當達到了處理數據的條件之後(Batcher會有兩種條件,數目或時間,數目達到了設定的閾值或者是時間到了),Batcher就會把數據發送到filter,在filter中對每一條logstash Event進行相關的處理。

最後output就會把數據輸出到你指定的輸出。

那麼,輸出之後,會把處理的ACK發送給Queue,代表着我剛纔處理了哪些event。

6、Queue的分類

logstash有兩個Queue,一個是In Memory在內存中的Queue,這個Queue是固定大小的,是沒法通過配置文件來修改的。壞處就是下圖所示。

爲了解決這個問題,推出了持久化Queue就是Persistent Queue In Disk,這個就是基於磁盤對處理數據進行一個記錄。

7、Persistent Queue In Disk

Data從Input進來,

  1. Data到PQ中。
  2. PQ會把這個數據在磁盤中備份一份。
  3. PQ告訴Input說這條數據我已經收到了。前提是Input要支持這種機制,有了這種機制才能感知目前logstash的這種處理能力。

接下來藍色部分,

  1. 數據就從PQ到filter output
  2. output把事件處理之後就會發送ACK到PQ
  3. PQ收到了這個ACK之後,就會把磁盤上的數據刪除掉

這樣就得知,即使發生了宕機,我的數據還是在disk中有的,只需要重啓logstash把disk中的數據重新消費一次就解決了。

8、Memory Queue與PQ的性能

可以看到性能的下降不是很嚴重,估計是在5%以內,如果沒有特殊需求一般建議把logstash的PQ打開。

9、打開PQ

queue.max_bytes默認是1GB,開大一點後,Queue能存儲的數據也就多了一點。

 還有一些:

path.queue PQ存到磁盤的哪個位置。

queue.page_capacity 控制消息隊列每一個文件的大小。

queue.checkpoint.writes 提升容災能力,如果是1 表示每寫一個數據都去做盤,頂多也就會丟失一條數據。

10、logstash中線程的相關情況

調優的時候主要就是調整 Pipeline Workder Thread數。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章