如何使用Logstash filter转换成elasticsearch输出的嵌套对象?
How to use Logstash filter to convert into nested object for elasticsearch output?
我有来自 JDBC 输入的以下事件或行。
{"academic_session_id" : "as=1|dur=2015-16,as=2|dur=2016-17",
"branch_id" : 1}
我想使用 logstash 过滤器将其转换或格式化为以下...
{"branch_id": 1,"sessions":[{"as":"1","dur":"2015-16"},{"as":"2","dur":"2016-17"}]}
如果您能提出任何替代 logstash 的建议。
注意-我使用的是 Elasticsearch 5.X 版本
由于这是一个非常自定义的数据操作,我会使用 ruby 过滤器,并使用 code
设置编写一个脚本来解析数据。像这样的东西会起作用:
filter {
ruby {
code => "
academic_session = event.get('academic_session_id').split(',').map{|data| data.split('|')}
sessions = academic_session.map do |arr|
temp_hash = {}
arr.each do |kv|
k,v = kv.split('=')
temp_hash[k] = v
end
temp_hash
end
event.set('sessions', sessions)
"
remove_field => ['academic_session_id']
}
}
我有来自 JDBC 输入的以下事件或行。
{"academic_session_id" : "as=1|dur=2015-16,as=2|dur=2016-17",
"branch_id" : 1}
我想使用 logstash 过滤器将其转换或格式化为以下...
{"branch_id": 1,"sessions":[{"as":"1","dur":"2015-16"},{"as":"2","dur":"2016-17"}]}
如果您能提出任何替代 logstash 的建议。 注意-我使用的是 Elasticsearch 5.X 版本
由于这是一个非常自定义的数据操作,我会使用 ruby 过滤器,并使用 code
设置编写一个脚本来解析数据。像这样的东西会起作用:
filter {
ruby {
code => "
academic_session = event.get('academic_session_id').split(',').map{|data| data.split('|')}
sessions = academic_session.map do |arr|
temp_hash = {}
arr.each do |kv|
k,v = kv.split('=')
temp_hash[k] = v
end
temp_hash
end
event.set('sessions', sessions)
"
remove_field => ['academic_session_id']
}
}