将Logstash json消息分解为字段
它有一个日志文件,用于存储带有时间戳和json消息的事件。例如: 时间戳{“foo”:12,“bar”:13} 我想将json部分中的键(foo和bar)分解为Logstash输出中的字段 我知道我可以将Logstash文件过滤器中的format字段设置为json_事件,但在这种情况下,我必须在json中包含时间戳。还有一个json过滤器,但它添加了一个具有完整json数据结构的字段,而不是使用键 你知道如何做到这一点吗?你可以使用普通的(正则表达式风格的过滤器/模式)并将匹配的值分配到一个变量中,以便于组织、过滤和搜索 例如:将Logstash json消息分解为字段,logstash,Logstash,它有一个日志文件,用于存储带有时间戳和json消息的事件。例如: 时间戳{“foo”:12,“bar”:13} 我想将json部分中的键(foo和bar)分解为Logstash输出中的字段 我知道我可以将Logstash文件过滤器中的format字段设置为json_事件,但在这种情况下,我必须在json中包含时间戳。还有一个json过滤器,但它添加了一个具有完整json数据结构的字段,而不是使用键 你知道如何做到这一点吗?你可以使用普通的(正则表达式风格的过滤器/模式)并将匹配的值分配到一个变量
((?<foo_identifier>(\"foo\"))):((?<foo_variable_value>(\d+,)))
((?(\“foo\”)):((?(\d+,))
沿着这些路线的东西
如果您在语法、模式和您认为应该匹配但不匹配的内容上遇到困难,请使用帮助
希望这能有所帮助。我已经通过以下配置完成了这项工作:
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尝试最新的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 }
}
我考虑过这个选项,但希望它能够直接解析json结构,并将键自动转换为字段名。或者,您也可以使用kv过滤器完成此操作时,时间戳字段会发生什么情况?