【发布时间】:2020-07-28 18:23:38
【问题描述】:
我们有一个包含嵌套字段的复杂对象,字段名称可以是动态的并包含点。当我尝试将数据摄取到 elasticsearch 时,它给了我以下错误
Object mapping for [x] tried to parse field [x.y] as object, but found a concrete value
一条记录可以有 a.b.c:4 这样的键/值,而在另一条记录中它可以有 a.b:3。我们无法控制传入数据的来源,因此唯一的选择是更改 logstash 中的对象。这是一个即将到来的对象的例子:
{
"result": "https://www.yahoo.com",
"tags": {
"url": "https://www.yahoo.com",
"projectName": "monitor",
"host": "ttt",
"dd": 12345,
"vv": "kk"
},
"timestamp": 1586599441000,
"runId": 12345,
"performance": {
"x.y.z": 31307
},
"channel": "clientperf",
"asset": {
"a.b.c": 5,
"a.b":4
}
}
正如您在资产和绩效中看到的值一样。根上的字段(如 runId、性能和...)很好。如何通过替换logstash中的点或任何不会给我错误的东西来解决这个问题。我知道de_dot 插件,但要使用它,我们需要明确说明嵌套字段的名称是什么,而我们不能强制为即将到来的记录命名。我也知道我们可能可以使用ruby 插件来实现这一点但我对红宝石的了解为零。任何帮助都将不胜感激。
【问题讨论】:
标签: ruby elasticsearch logstash elastic-stack logstash-configuration