Grok过滤器即使在grok调试器中工作也无法正常工作

时间:2016-05-31 13:45:36

标签: elasticsearch logstash kibana grok

我正在使用带有elasticsearch 1.3.4的logstash-1.4.0和kibana 3.1.1(我知道我已经过时了,这是我现在能做的最好的事情)。

日志示例:

  

2016-05-31 16:05:33 RequestManager [INFO]手动标志LOLROFLIN TRALALA 123456Was改为true

我的grok过滤器:

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

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

我的问题是:

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

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

  3. 编辑:我意识到出了什么问题,我正在使用log4j插件,它已经将日志分离到其内容,而字段消息已经只是消息本身了。

2 个答案:

答案 0 :(得分: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}?

如果你看到" _grokparsefailure"在Kibana,你知道你的grok过滤器失败了。

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

答案 1 :(得分:0)

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