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

反扁平化 (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 中,就会出现很多的字段,比如:

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

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

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

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

 

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

logstash_unflatten.conf

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:

./bin/logstash -f logstash_unflatten.conf 

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

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

实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值