Logstash 包含的类名的Grok筛选器$

Logstash 包含的类名的Grok筛选器$,logstash,elastic-stack,logstash-grok,Logstash,Elastic Stack,Logstash Grok,我在使用Grok过滤器时遇到问题。下面是我的筛选器,它按预期工作,而类名中没有$。当线程名称类似于PropertiesReader$时,它将失败。我还可以使用什么来解析带有特殊字符的类名 filter { grok { match => [ "message", "%{TIMESTAMP_ISO8601:LogDate} %{LOGLEVEL:loglevel} %{WORD:threadName}:%{NUMBER:ThreadID} - %{GRE

我在使用Grok过滤器时遇到问题。下面是我的筛选器,它按预期工作,而类名中没有
$
。当线程名称类似于PropertiesReader$时,它将失败。我还可以使用什么来解析带有特殊字符的类名

filter {
      grok {  
           match => [ "message", "%{TIMESTAMP_ISO8601:LogDate} %{LOGLEVEL:loglevel} %{WORD:threadName}:%{NUMBER:ThreadID} - %{GREEDYDATA:Line}" ] 
      }
      json {
           source => "Line" 
      }
      mutate { 
            remove_field => [ "Line" ]  
      }  
}

您不限于
grok
模式名称。你可以做任何正则表达式。例如,在
%{WORD:threadName}
中,您可以放置
(?[^:::]+)
,它表示匹配任何非
的字符:
,并将其分配给
threadName

您正在使用
WORD
作为threadName的模式,该模式不包含特殊字符。为了确认这一点,让我们来看看这个模式:<代码> Word \b\W+\b/COD> < /P> 使用自定义模式。只需在如下文件中描述它:

MYPATTERN ([A-z]+\$?)
grok {
    patterns_dir => ["/path/to/pattern/dor"]
    match => [ "message", "%{TIMESTAMP_ISO8601:LogDate} %LOGLEVEL:loglevel} %{MYPATTERN:threadName}:%{NUMBER:ThreadID} - %GREEDYDATA:Line}" ] 
     }
然后您可以在配置中使用它,如下所示:

MYPATTERN ([A-z]+\$?)
grok {
    patterns_dir => ["/path/to/pattern/dor"]
    match => [ "message", "%{TIMESTAMP_ISO8601:LogDate} %LOGLEVEL:loglevel} %{MYPATTERN:threadName}:%{NUMBER:ThreadID} - %GREEDYDATA:Line}" ] 
     }

您将在

中找到有关自定义模式的更多信息。如果您的threadName不包含空格或冒号,您还可以尝试使用
%{DATA:threadName}
而不是
%{WORD:threadName}