在同一文件中处理不同的日志格式

时间:2015-05-05 11:24:59

标签: logstash logstash-grok

我有一个包含不同输出格式的日志文件。

例如:

line 1 = 2015-01-1 12:04:56 INFO 192.168.0.1 my_user someone logged in
line 2 = 2015-01-1 12:04:56 WARN [webserver-thread] (MyClass.java:66) user authenticated

虽然真正的解决方案是将它们拆分为单独的文件或统一格式,是否可以使用Logstash来处理不同的日志格式?

1 个答案:

答案 0 :(得分:3)

我的第一个建议是运行一个grok {}去除常见的东西 - 日期时间和日志级别。您可以将剩余的内容放回[消息]字段中:

%{TIMESTAMP_ISO8601} %{WORD:level} %{GREEDYDATA:message}

请务必使用'覆盖' grok {}中的参数。

然后,如果你想解析剩余的信息,那么你的(多个)正则表达式将针对一个较短的字符串运行,这会使它们更有效。

然后您可以拥有多种模式:

grok {
    match => [
        "message", "PATTERN1",
        "message", "PATTERN2"
    ]
}

默认情况下,grok会在遇到第一场比赛时停止处理。