2016-04-29 72 views
0

我使用logstash和lumberjack來管理我的日誌。 Logstash從兩種不同的文件類型獲取輸入,其中一種記錄多行堆棧跟蹤。我知道我應該使用多線編解碼器,但我不知道如何將它應用於只有一種類型的日誌。這是行不通的:輸入塊中的logstash條件語句

input { 
    lumberjack { 
    #some configs 
    port => 9000 

    if [type] == "TYPE1" { # IF STATEMENT CAUSES ERROR 
     codec => multiline {} 
    } 
    } 
} 

有沒有什麼辦法可以讓輸入的編解碼器使用條件?

我知道我可以使用多行過濾器,而不是編解碼器,但多行過濾器不允許多個工人,我需要他們。

回答

1

我懷疑答案是爲不同的數據類型設置單獨的輸入。這樣你就不需要在多行編解碼器中添加任何邏輯。 例如: 發送遵循模式X端口n 發送遵循模式Y端口n所有紅寶石日誌的所有Java日誌+ 1

我不知道如何使這項工作在堆棧中包括的Redis或其他緩存服務器,因爲所有數據理想情況下都應該在沒有任何處理的情況下進入緩存,但在檢索時會需要處理邏輯,因爲它將包含各種數據類型。

我想你需要照顧在接收層加入多行日誌,以便緩存服務器接收完整的消息,然後在將數據發送到彈性搜索之前運行較重的過濾器。

事情是這樣的:

LS1 (multiple inputs and codecs like multiline) 
Redis (caching) 
LS2 (filters) 
ES (storage) 
KIB (viewing)