Ruby Logstash-Grok-多行上的异常

Ruby Logstash-Grok-多行上的异常,ruby,regex,logstash,grok,Ruby,Regex,Logstash,Grok,我试图通过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-

我试图通过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))"}
}
grok{
{1,2}},{{1,2},{{2},{2},{2},{3{2},{3},{3},{3},{3},{{3},{3},{3},{4},{{4},{3{3{3},{3{3},{3{3},{3},{3},{3},{3},{3},{3},,{,(,(,(,(,(,(3},{4}4},{4}4},{4},{4},{4},{4},{4},{4},{4},{4},{4},{4},{4},{4},{4},{4}\n\n.*.^^.^.^.^.^.^...\n^.^.^...\n...^...(.*尝试。*\n^ com.*服务异常。*\n.#错误查询。*\n\n.*.\n^.\n..\n.*|(3)试图试图试图试图试图试图试图试图试图试图试图试图试图试图试图试图试图试图试图试图n^n^n^n^n^n^com..1010 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10.n^n^n^com.1010 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10试图试图试图试图试图试图试图试图试图试图试图试图试图试图试图10 10 10 10 10 10 10 10 10\n^n^n^n^n^n^n^n^0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0可能可能可能可能可能10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 com.*\n^com.*)(.*null\n^Axis.*\n.*\n.*\n.*\n.*\n.*\n.*\n.*\n.*\n.*)(.*\n))“}
}
正如您在exception字段中看到的许多OR条件和许多\n获取回车符的条件。问题是,据我所知,Logstash一次只能读取一行,并且不能匹配多行(因此,即使在rubular上此模式工作得很好,它在Logstash中也不能)。
如何正确过滤异常?

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

multiline {
    type => %sometype
    pattern => "(^\s)"
    what => previous 
          }
因此,这将把所有以空格开头的行附加到previous.And之后,您可以使用grok过滤器

哦,您可以变异以避免多行后出现“\n”符号:

mutate {
    gsub => ["message", "\n", " "]
       }
之后,您就可以过滤多行消息了