什么是适合我输入的grok过滤器?

时间:2017-05-15 09:22:59

标签: logstash logstash-grok

我的输入看起来像:

"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

1 个答案:

答案 0 :(得分:1)

可能比这更具体,但根据grokconstructor,以下工作:

%{WORD:level} \| \[%{WORD:task} %{NOTSPACE:callfrom}\] %{DATA:javaclass} \| - %{GREEDYDATA:message}

请记住,任何不匹配的字符,例如|[,仍然需要在grok中进行说明。此外,these patterns是您可以免费获得的一个很好的参考点。