适合我输入的 grok 过滤器是什么?
What is the proper grok filter for my input?
我的输入如下:
"message" => "ERROR | [default task-55] my.package.className(Class.java:184) | - logstash-ERROR LOG\r",
我的 logstash 配置:
filter {
grok {
match => {"message" => "%{WORD:logLevel} | %{WORD:task} %{WORD:callfrom} | - %{WORD:logmessage}"}
}
}
我的 log4j 配置 xml 文件:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration xmlns="http://logging.apache.org/log4j/2.0/config">
<Appenders>
<File name="FILE" fileName="logfile.log" append="true">
<PatternLayout pattern="%p | [%t] %l | - %m%n"/>
</File>
<Console name="STDOUT" target="SYSTEM_OUT">
<PatternLayout pattern="%p | [%t] %l | - %m%n"/>
</Console>
</Appenders>
<Loggers>
<Logger name="com.memorynotfound" level="debug"/>
<Root level="info">
<AppenderRef ref="STDOUT"/>
<AppenderRef ref="FILE"/>
</Root>
</Loggers>
</Configuration>
在 kibana 中,我看到 logLevel 正常,我得到了正确的 loglevel,但换句话说我无法得到,我从过滤器中遗漏了什么?
感谢您的帮助!
更新
我试过这段代码:
^(%{WORD:logLevel}) (%{TASK_PATTERN:task}) (%{CLASS:callfrom}) (%{GREEDYDATA:logmessage})$
使用我的自定义模式:
TASK_PATTERN (^\[.*\]$)
CLASS .*\)
但它只找到日志级别
可能比这更具体,但根据 grokconstructor,以下工作:
%{WORD:level} \| \[%{WORD:task} %{NOTSPACE:callfrom}\] %{DATA:javaclass} \| - %{GREEDYDATA:message}
请记住,任何不匹配的字符,如 |
或 [
仍然需要在 grok 中说明。此外,these patterns 是一个很好的参考点,可以帮助您了解您可以免费做什么。
我的输入如下:
"message" => "ERROR | [default task-55] my.package.className(Class.java:184) | - logstash-ERROR LOG\r",
我的 logstash 配置:
filter {
grok {
match => {"message" => "%{WORD:logLevel} | %{WORD:task} %{WORD:callfrom} | - %{WORD:logmessage}"}
}
}
我的 log4j 配置 xml 文件:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration xmlns="http://logging.apache.org/log4j/2.0/config">
<Appenders>
<File name="FILE" fileName="logfile.log" append="true">
<PatternLayout pattern="%p | [%t] %l | - %m%n"/>
</File>
<Console name="STDOUT" target="SYSTEM_OUT">
<PatternLayout pattern="%p | [%t] %l | - %m%n"/>
</Console>
</Appenders>
<Loggers>
<Logger name="com.memorynotfound" level="debug"/>
<Root level="info">
<AppenderRef ref="STDOUT"/>
<AppenderRef ref="FILE"/>
</Root>
</Loggers>
</Configuration>
在 kibana 中,我看到 logLevel 正常,我得到了正确的 loglevel,但换句话说我无法得到,我从过滤器中遗漏了什么? 感谢您的帮助!
更新
我试过这段代码:
^(%{WORD:logLevel}) (%{TASK_PATTERN:task}) (%{CLASS:callfrom}) (%{GREEDYDATA:logmessage})$
使用我的自定义模式:
TASK_PATTERN (^\[.*\]$)
CLASS .*\)
但它只找到日志级别
可能比这更具体,但根据 grokconstructor,以下工作:
%{WORD:level} \| \[%{WORD:task} %{NOTSPACE:callfrom}\] %{DATA:javaclass} \| - %{GREEDYDATA:message}
请记住,任何不匹配的字符,如 |
或 [
仍然需要在 grok 中说明。此外,these patterns 是一个很好的参考点,可以帮助您了解您可以免费做什么。