包含 $ 的 class 名称的 Grok 过滤器
Grok filter for class name containing $
我在使用 Grok 过滤器时遇到问题。下面是我的过滤器,它按预期工作,而 class 名称中没有 $
。当线程名称类似于 PropertiesReader$ 时,它失败了。我还能使用什么来解析 class 带有特殊字符的名称?
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>[^:]+)
表示匹配任何不是 :
的字符并将其分配给 threadName
.
您正在使用 WORD
作为不包含特殊字符的线程名称的模式。为了确认这一点,让我们看一下这个模式:WORD \b\w+\b
使用自定义模式。只需在这样的文件中描述它:
MYPATTERN ([A-z]+$?)
然后你可以像这样在你的配置中使用它:
grok {
patterns_dir => ["/path/to/pattern/dor"]
match => [ "message", "%{TIMESTAMP_ISO8601:LogDate} %LOGLEVEL:loglevel} %{MYPATTERN:threadName}:%{NUMBER:ThreadID} - %GREEDYDATA:Line}" ]
}
您可以在 docs
中找到有关自定义模式的更多信息
如果您的 threadName 不包含空格或冒号,您也可以尝试使用 %{DATA:threadName}
而不是 %{WORD:threadName}
。
我在使用 Grok 过滤器时遇到问题。下面是我的过滤器,它按预期工作,而 class 名称中没有 $
。当线程名称类似于 PropertiesReader$ 时,它失败了。我还能使用什么来解析 class 带有特殊字符的名称?
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>[^:]+)
表示匹配任何不是 :
的字符并将其分配给 threadName
.
您正在使用 WORD
作为不包含特殊字符的线程名称的模式。为了确认这一点,让我们看一下这个模式:WORD \b\w+\b
使用自定义模式。只需在这样的文件中描述它:
MYPATTERN ([A-z]+$?)
然后你可以像这样在你的配置中使用它:
grok {
patterns_dir => ["/path/to/pattern/dor"]
match => [ "message", "%{TIMESTAMP_ISO8601:LogDate} %LOGLEVEL:loglevel} %{MYPATTERN:threadName}:%{NUMBER:ThreadID} - %GREEDYDATA:Line}" ]
}
您可以在 docs
中找到有关自定义模式的更多信息如果您的 threadName 不包含空格或冒号,您也可以尝试使用 %{DATA:threadName}
而不是 %{WORD:threadName}
。