近期公司有一个需求是使用logstash将复杂的嵌套json扁平化(将原来的多层json映射成单层json,其中的key通过下划线'_'连接),并写入s3。据我以往的经验我推测应该有两种方案可行,其中方案一代码简单,但缺点很多,方案二简单高效,但网上没有现成的,我以往也没有使用过,通过google也只google到event.to_hash这个稍微有用的方法,这也是我分享的原因,望对有类似需求的朋友能够提供些许帮助,同时欢迎指教、批评我实现中的不足。
方案一、使用ruby插件,静态提取你需要的json字段,并将其扁平化处理后通过event api设置回去
例如:你需要提取你有如下的json数据,你想要其扁平化
{
"request":{
"eventId":"gift",
"data":{
"tokenId":"738451896415027200",
"ip":"103.69.155.90",
}
}
}
你可以在logstash中,通过ruby filter的event api的get、set方法来实现,代码如下:
ruby{
code => '