基于匹配模式

时间:2016-11-11 07:07:46

标签: logstash logstash-grok

例如,这是我的日志文件

[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

我的日志的grok过滤器。我使用了多种模式

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}"

    ]
}

} 

现在我希望将日志索引到具有不同类型(模式)的elasticsearch中 logstash / TYPE1, logstash / TYPE2, logstash / TYPE3,

任何帮助表示赞赏!

1 个答案:

答案 0 :(得分:1)

首先,您的过滤器存在问题:逐个评估grok模式,当一个模式匹配时,其他模式不会被评估,因此模式需要从最具体的模式(具有{的模式)进行排序{1}})最通用的(%{URIPATHPARAM:path})如下:

%{WORDS_EX:msg}

然后您可以使用conditionnals的各种字段的存在/不存在,如下所示:

"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}"