关于以下数据结构:
{
"sprints": [
{
"id": 17193,
"name": "Sprint 12"
},
{
"id": 16510,
"name": "Sprint 11"
}
],
"velocityStatEntries": {
"16510": {
"estimated": {
"value": 49
},
"completed": {
"value": 36
}
},
"17193": {
"estimated": {
"value": 52
},
"completed": {
"value": 70
}
}
}
}
鉴于此,我希望能够生成一个更易于处理的Elasticsearch对象,方法是将估计字段和已完成字段的值添加到带有匹配ID的sprint中。
理想情况下,我想在不编写Ruby的情况下处理这个问题,但是我没有找到一个处理这个scnenario的logstash原生解决方案。
首先,我使用split拆分了sprint字段上的数据,因此,我只有一个sprint对象,并且可以使用sprint来了解我正在处理的sprint。
然后,我尝试使用变体筛选器,以两种方式之一:-使用merge将velocityStateEntries对象添加到当前sprint使用add_field添加所需的两个字段。
从句法上讲,这有可能吗?理想情况下,我希望能够进行某种“双重替换”,获得当前sprint的估计时间,如下所示:
add_field => {
"estimatedTime" => "%{[velocityStatEntries][%{[sprints][id]}][estimated][value]}"
}
但这似乎只适用于硬编码格式(如"estimatedTime" => "%{[velocityStatEntries][1234][estimated][value]}"
)。
为此,我必须使用Ruby格式吗?
发布于 2018-11-28 09:28:50
值得注意的是,Ruby解决方案非常简单:
ruby {
code => "
sprintId = event.get('[sprints][id]');
estimated = event.get('[velocityStatEntries]['+(sprintId).to_s+'][estimated][value]');
completed = event.get('[velocityStatEntries]['+(sprintId).to_s+'][completed][value]');
event.set('[sprints][estimatedUnits]', estimated);
event.set('[sprints][completedUnits]', completed);
"
}
https://stackoverflow.com/questions/53523897
复制