2016-11-11 59 views
0

例如這裏elasticsearch不同類型(模式)是我的日誌文件索引日誌成基於模式匹配

[2016-10-18 12:05:53.228] log example 

[2016-10-18 11:55:53.228] 19249060-91df-11e6-be68-753fa0e2c729 logg example 

[2016-10-18 11:35:53.228] 19249060-91ff-11e6-be68-753fa0e2c729 loggg example /api/userbasic/userinfo?requestedUserId=19249060-91df-11e6-be68-753fa0e2c729 

神交濾波器,用於我的log.here我已經使用多個圖案

filter { 
    grok { 
    match => [ 
     "message","\[%{TIMESTAMP_ISO8601:timestamp1}\] %{WORDS_EX:msg}", 
     "message","\[%{TIMESTAMP_ISO8601:timestamp2}\] %{UUID:user_id1} %{WORDS_EX:msg2} %{URIPATHPARAM:path}", 
     "message","\[%{TIMESTAMP_ISO8601:timestamp3}\] %{UUID:user_id2} %{WORDS_EX:msg3}" 

    ] 
} 

} 

現在我想索引登錄到具有不同類型(模式)等 logstash/TYPE1, logstash/TYPE2, logstash/TYPE3 elasticsearch,

請解釋我將如何做?

回答

0

首先,你的過濾器有一個問題:grok模式是逐個評估的,當一個模式匹配時,其他模塊不會被評估,所以模式需要從最具體的%{URIPATHPARAM:path}),以最一般的(具有%{WORDS_EX:msg})像這樣:

"message","\[%{TIMESTAMP_ISO8601:timestamp2}\] %{UUID:user_id1} %{WORDS_EX:msg2} %{URIPATHPARAM:path}", 
"message","\[%{TIMESTAMP_ISO8601:timestamp3}\] %{UUID:user_id2} %{WORDS_EX:msg3}", 
"message","\[%{TIMESTAMP_ISO8601:timestamp1}\] %{WORDS_EX:msg}" 

然後可以使用存在/不存在各種領域的與conditionnals像這樣:

if [path] { 
    elasticsearch { 
     ... 
    } 
} else if [user_id2] { 
    elasticsearch { 
     ... 
    } 
} else { 
    elasticsearch { 
     ... 
    } 
}