您的位置:首页 > 其它

Logstash:数据的反扁平化 (unflatten)

2020-08-25 10:59 806 查看

反扁平化 (unflatten) 和 扁平化 (flatten)相反,它可以把一个零散的数据变成一个更加有意义的的一种表述,比如,针对以下的数据:

image_title image_url image_size
picture1 http://www.my.com/1.jpg 32000
picture2 http://www.my.com/2.jpg 48000

在上面,它显示的是一个典型的结构化表格。通常这个可能是来自另外一个数据库的数据。如果这样的数据导入到 Elasticsearch 中,就会出现很多的字段,比如:

[code]"image_title": "picture1",
"image_url" : "http://www.my.com/1.jpg",
"image_size": "32000"

显然这是一种非常扁平的存储方式,对于我们分析数据并不很好。如果你去参考 Elastic 的 ECS,你会发现更多的时候,如下的这种表述方式更加友好,也便于我们分析:

[code]{
"image": {
"title": "picture1",
"url": "http://www.my.com/1.jpg",
"size": 3200
}
}

在上面,我们使用了一个叫做 image 的 object,它里面含有三个字段。这种表述更加易于我们分析数据。从上面的那个结构变为下面的这个结构就叫做反扁平。在下面我们来讲述如何在 Logstash 中来实现。

 

我们首先来创建一个叫做 logstash_unflatten.conf 为配置文件:

logstash_unflatten.conf

[code]input {
generator {
lines => [
'{ "image_title": "picture1", "image_url" : "http://www.my.com/1.jpg", "image_size": "32000" }'
]

count => 1
codec => "json"
}
}

filter {
mutate {
rename => {
"image_title" => "[image][title]"
"image_url" => "[image][url]"
"image_size" => "[image][size]"
}
}
}

output {
stdout {
codec => "rubydebug"
}
}

在上面的 input 部分,我们使用了一个 generator 生成一个单次的事件。在 filter 的部分,我们使用 rename 来吧这个世界组织到 image 的这个 object 里去。运行 Logstash:

[code]./bin/logstash -f logstash_unflatten.conf

我们可以看到如下的结果:

从上面,我们可以看出来,之前的那些 image_title, image_url 及 image_size 都变成 image 这个 object 里的字段值了。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: