将Logstash json消息分解为字段

Mau*_*ijk 17 logstash

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

时间戳{"foo":12,"bar":13}

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

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

有什么想法可以做到这一点?

Nik*_*l S 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 }
}
Run Code Online (Sandbox Code Playgroud)


mim*_*s70 10

我用以下配置完成了这个:

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

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

在1.1.13版本中,你需要包含一个目标的JSON过滤器和参考消息神交过滤器@message.


Ada*_*dam 1

您只需使用普通的Grok 过滤器(正则表达式样式过滤器/模式)并将匹配的值分配给变量即可轻松组织、过滤和搜索。

一个例子:

((?<foo_identifier>(\"foo\"))):((?<foo_variable_value>(\d+,)))
Run Code Online (Sandbox Code Playgroud)

沿着这些思路。

如果您在语法、模式以及您认为应该匹配但实际上不匹配的内容上遇到困难,请使用GrokDebugger来帮助您。

希望有点帮助。

  • 我考虑过这个选项,但希望能够直接解析 json 结构并将键自动转换为字段名称。 (2认同)