【发布时间】:2019-08-29 09:49:52
【问题描述】:
我有一个如下所示的 JSON:
{
"foo": {
"bar": {
"type": "someType",
"id": "ga241ghs"
},
"tags": [
{
"@tagId": "123",
"tagAttributes": {
"attr1": "AAA",
"attr2": "111"
}
},
{
"@tagId": "456",
"tagAttributes": {
"attr1": "BBB",
"attr2": "222"
}
}
]
},
"text": "My text"
}
实际上它并没有拆分为多行(只是为了更好地概述),所以它看起来像这样:
{"foo":{"bar":{"type":"someType","id":"ga241ghs"},"tags":[{"@tagId":"123","tagAttributes":{"attr1":404,"attr2":416}},{"@tagId":"456","tagAttributes":{"attr1":1096,"attr2":1103}}]},"text":"My text"}
我想将此带有 Logstash 的 JSON 插入到 Elasticsearch 索引中。但是,我想插入一个扁平的 JSON,数组中的字段组合如下:
"foo.bar.tags.tagId": ["123", "456"]
"foo.tags.tagAttributs.attr1": ["AAA", "BBB"]
"foo.tags.tagAttributs.attr2": ["111", "222"]
总的来说,插入 Elasticsearch 的数据应该是这样的:
"foo.bar.type": "someType"
"foo.bar.id": "ga241ghs"
"foo.tags.tagId": ["123", "456"]
"foo.tags.tagAttributs.attr1": ["AAA", "BBB"]
"foo.tags.tagAttributs.attr2": ["111", "222"]
"foo.text": "My text"
这是我当前的 Logstash .conf;我可以拆分“标签”数组,但现在我得到了 2 个条目。
现在如何将所有 tagId 连接到一个字段,将数组的 attr1 值连接到一个字段,并将所有 attr2 值连接到另一个?
input {
file {
codec => json
path => ["/path/to/my/data/*.json"]
mode => "read"
file_completed_action => "log"
file_completed_log_path => ["/path/to/my/logfile"]
sincedb_path => "/dev/null"
}
}
filter {
split {
field => "[foo][tags]"
}
}
output {
stdout { codec => rubydebug }
}
非常感谢!
【问题讨论】:
-
不应该是
"foo.bar.tags.tagId": "[123, 456]"是"foo.bar.tags.tagId": [123, 456]? -
@3limin4t0r 是的,你说得对,我改了
-
我想你必须用 ruby 来写。有一个 ruby 脚本可以完成部分工作here。你必须扩展它来处理数组。
标签: json logstash elastic-stack logstash-configuration