2016-05-31 91 views
0

我使用的是与elasticsearch 1.3.4和kibana 3.1.1 logstash-1.4.0(我知道我已经过时了,这是我现在可以做的最好的) 。Grok过滤器不工作,即使它在grok调试器中工作

日志示例:

2016年5月31日16时05分33秒RequestManager [INFO]手动标志LOLROFLin TRALALA 123456Was变为真

我神交滤波器:

filter { 
    grok { 
     match => { "message" => "%{DATESTAMP:timestamp} %{WORD:clazz} %{NOTSPACE:level} %{GREEDYDATA:content}"} 
    } 

    if (!([stack_trace])) and (!([clazz] == "RequestAsset")) { 
     drop {} 
    } 
} 

我的问题是:

  1. 为什么我看不到kibana的grok字段?我只看到默认字段,但不是我的。 Grok调试器显示成功,但kibana不起作用。

  2. 我的目标是放弃没有堆栈跟踪的任何日志消息或不是来自类(在grok过滤器中称为clazz)“RequestAsset”。这应该工作吗?我可以在单独的过滤器中使用grok过滤器创建的字段吗?

编辑:我意识到了什么差错,我用它已经的方式隔开日志,其内容log4j的插件,和现场的消息已经不仅仅是信息本身。

回答

0

我在这grok debugger中测试了你的grok过滤器,失败了。所以我改写了它。

这里是正确的grok过滤器。

filter { 
grok { 
    match => { "message" => "%{TIMESTAMP_ISO8601:timestamp} %{WORD:clazz} %{NOTSPACE:level} %{GREEDYDATA:content}"} 
} 

if (!([stack_trace])) and (!([clazz] == "RequestAsset")) { 
    drop {} 
} 

TIMESTAMP_ISO8601 =>%{YEAR}-%{MONTHNUM}-%{MONTHDAY}[T ]%{HOUR}:?%{MINUTE}(?::?%{SECOND})?%{ISO8601_TIMEZONE}?

如果你看到Kibana “_grokparsefailure”,你知道你的神交过滤器失败。

关于你的第二个问题,你不应该使用OR运算符吗?

+0

我没有看到两者之间的任何区别?我也在你提到的grok调试器中尝试过它们,但都没有工作。我使用这一个,两者都有效:https://grokdebug.herokuapp.com/ – user1137582

+0

对不起,我粘贴了错误的grok声明。你应该检查编辑。 –

0

我意识到出了什么问题,我正在使用log4j插件,它已经将日志分离到其内容中,并且字段消息本身就是消息本身。