Logstash 在基于匹配模式的弹性搜索中,将日志索引为不同的类型(模式)

Logstash 在基于匹配模式的弹性搜索中,将日志索引为不同的类型(模式),logstash,logstash-grok,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=1924

例如,这里是我的日志文件

[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中,如 日志库/类型1, 日志库/类型2, 日志库/类型3


感谢您的帮助

首先,您的过滤器有一个问题:grok模式会一个接一个地进行计算,当一个模式匹配时,其他模式将不会进行计算,因此需要将该模式从最具体的(具有
%{URIPATHPARAM:path}
的模式)排序到最一般的(具有
%{WORDS\u EX:msg}
的模式),如下所示:

然后,您可以使用各种字段的存在/不存在,例如:

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

首先,您的过滤器有一个问题:grok模式被逐个计算,当一个模式匹配时,其他模式将不会被计算,因此该模式需要从最具体的(带有
%{URIPATHPARAM:path}
)到最一般的(带有
%{WORDS\u EX:msg}
)排序,如下所示:

然后,您可以使用各种字段的存在/不存在,例如:

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