Logstash:可选匹配未按预期工作

Logstash : Optional match not working as expected

假设我收到了两种消息

1/1/12 dasdahdgh
1/1/12 asd.ert.Tghagsdh

现在我想要这样的东西

%{DATE_US:time}%{SPACE}(%{WORD:stat}|(?<java_method>[a-zA-Z\.]+))

如果我在日期后面看到一个词,我想称它为 stat。如果我看到 java 方法的名称,那么我想调用它 java_method

然而,我得到的结果是

{"time":1/1/12, "stat":"dasdahdgh", "java_method":""}
{"time":1/1/12, "stat":"asd", "java_method":".ert.Tghagsdh"}

我如何配置我的 grok,以便 只创建 statjava_method 中的一个

我制作了一个正则表达式,其中必须有一个点,因此它将捕获 asd.ert.Tghagsdh 而不是 dasdahdgh。通过将它放在 %{WORD} 之前,它将捕获 java "method"(它看起来更像 class),但不会捕获 stat:

%{DATE_US:time}%{SPACE}((?<java_method>(?:[a-zA-Z]+\.)+[a-zA-Z]+)|%{WORD:stat})

这样您的字段中就会有正确的值。