Logstash 包含的类名的Grok筛选器$
我在使用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
$
。当线程名称类似于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}