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,以便 只创建 stat
或 java_method
中的一个 ?
我制作了一个正则表达式,其中必须有一个点,因此它将捕获 asd.ert.Tghagsdh
而不是 dasdahdgh
。通过将它放在 %{WORD}
之前,它将捕获 java "method"(它看起来更像 class),但不会捕获 stat:
%{DATE_US:time}%{SPACE}((?<java_method>(?:[a-zA-Z]+\.)+[a-zA-Z]+)|%{WORD:stat})
这样您的字段中就会有正确的值。
假设我收到了两种消息
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,以便 只创建 stat
或 java_method
中的一个 ?
我制作了一个正则表达式,其中必须有一个点,因此它将捕获 asd.ert.Tghagsdh
而不是 dasdahdgh
。通过将它放在 %{WORD}
之前,它将捕获 java "method"(它看起来更像 class),但不会捕获 stat:
%{DATE_US:time}%{SPACE}((?<java_method>(?:[a-zA-Z]+\.)+[a-zA-Z]+)|%{WORD:stat})
这样您的字段中就会有正确的值。