我的输入看起来像:
"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 .*\)
但它只是找到了loglevel
答案 0 :(得分:1)
可能比这更具体,但根据grokconstructor,以下工作:
%{WORD:level} \| \[%{WORD:task} %{NOTSPACE:callfrom}\] %{DATA:javaclass} \| - %{GREEDYDATA:message}
请记住,任何不匹配的字符,例如|
或[
,仍然需要在grok中进行说明。此外,these patterns是您可以免费获得的一个很好的参考点。