例如,这是我的日志文件
[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,
任何帮助表示赞赏!
答案 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}"