【问题标题】:Logstash - Grok - Exception on multiple linesLogstash - Grok - 多行异常
【发布时间】:2015-03-17 15:11:08
【问题描述】:

我试图通过 grok 过滤器解析一些非常不同的异常,所以我在 rubular.com 的帮助下编写了一个 grok 过滤器来解析每种类型的异常。过滤器是:

grok {
match => { message => "^(?<year>\d{4})-(?<month>\d{1,2})-(?<day>\d{1,2})\W(?<hours>\d{2}):(?<minutes>\d{2}):(?<seconds>\d{2})(,)[0-9]*(.*)(?<log_level>(ERROR|INFO)) (?<exception>(.*\n^Axis.*\n.*\n.*\n.*\n.*\n.*\n.*\n.*)|(com.*trying.*\ncom.*is:.*\n.*java.*)|(com.*\n^org.*\n###.*non valido\n\n.*^###.*\n^###.*\n^###.*)|(.*trying.*\n^com.*ServiceException.*\n### Error querying.*\n\n.*\n^###.*\n.*)|(.*trying.*\n^com.*ServiceException.*\n^###.*\n^###.*)|(.*trying.*\n^com.*)|(.*\n^org.*\n###.*Exception.*\n### Cause:.*)|(com.*\n^org.*\n###.*)|(.*\n^java.*CORBA.*\n.*)|(.*\n^java*.*)|(com.*\n^com.*)|(.*null\n^Axis.*\n.*\n.*\n.*\n.*\n.*\n.*\n.*\n.*\n.*\n.*)|(.*\n))"}
}

您可以在异常字段中看到很多 OR 条件和很多 \n 来获取回车。问题是,据我了解,Logstash 一次只能读取一行并且不能匹配多行(因此,即使在 rubular 上,此模式运行良好,但在 logstash 中却没有)。 如何正确过滤异常?

【问题讨论】:

    标签: ruby regex logstash grok


    【解决方案1】:

    你可以在grok之前多行,例如java异常:

    multiline {
        type => %sometype
        pattern => "(^\s)"
        what => previous 
              }
    

    所以这会将所有以空格开头的行追加到前一行。之后你就可以使用 grok 过滤器了。

    哦,你可以变异以避免多行后出现'\n'符号:

    mutate {
        gsub => ["message", "\n", " "]
           }
    

    之后,您就可以过滤多行消息了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-25
      • 1970-01-01
      • 2021-03-31
      • 2015-01-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多