将Logstash json消息分解为字段

时间:2013-08-08 13:05:27

标签: logstash

它有一个日志文件,用于存储带有时间戳和json消息的事件。例如:

  

timestamp {“foo”:12,“bar”:13}

我想将json部分中的键(foo和bar)分解为Logstash输出中的字段。

我知道我可以将Logstash文件过滤器中的格式字段设置为json_event,但在这种情况下,我必须在json中包含时间戳。还有一个json过滤器,但它添加了一个带有完整json数据结构的字段,而不是使用键。

任何想法如何做到这一点?

4 个答案:

答案 0 :(得分:16)

尝试使用最新的logstash 1.2.1并使用编解码器值直接解析json事件。

input {
    file {
        type => "tweetfile"
        path => ["/home/nikhil/temp/feed/*.txt"]
        codec => "json"
    }
}
filter{
    json{
        source => "message"
        target => "tweet"
    }
}
output {
    stdout { }
    elasticsearch { embedded => true }
}

答案 1 :(得分:10)

我已使用以下配置完成此操作:

filter {
  grok {
    match => ["message", "\[%{WORD}:%{LOGLEVEL}\] %{TIMESTAMP_ISO8601:tstamp} :: %{GREEDYDATA:msg}"]
  }
  date {
    match => [ "tstamp", "yyyy-MM-dd HH:mm:ss" ]
  }
  json {
    source => "msg"
  }
}

顺便说一下,这是新版本1.2.0的配置。

在版本1.1.13中,您需要在json过滤器上包含目标,并在 grok 中包含消息的参考过滤器 @message

答案 2 :(得分:1)

您可以使用普通Grok filters(正则表达式样式过滤器/模式)并将匹配的值分配到变量中,以便于组织,过滤和搜索。

一个例子:

((?<foo_identifier>(\"foo\"))):((?<foo_variable_value>(\d+,)))

这些方面的东西。

如果你遇到了你认为应该匹配但不匹配的语法,模式和事情,请使用GrokDebugger来提供帮助。

希望有所帮助。

答案 3 :(得分:-3)

您的JSON错误{"foo": 12, "bar" 13}

应该是:

{"foo": 12, "bar": 13}