在 logstash 的 sprintf 语法中使用 sprintf 语法
Use sprintf syntax inside logstash's sprintf syntax
对于以下数据结构:
{
"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 对象,方法是将 Estimated 和 Completed 字段的值添加到具有匹配 ID 的 sprint 中。
理想情况下,我想在不编写 Ruby 的情况下处理这个问题,但我没有找到处理此场景的 logstash-native 解决方案。
首先,我使用 split 拆分了 sprints 字段上的数据,因此,我只有一个 sprints 对象,并且可以使用 [sprints][id] 来了解我正在处理的 sprint。
然后,我尝试通过以下两种方式之一使用 mutate 过滤器:
- 使用 merge 将 [velocityStateEntries][] 对象添加到
当前冲刺
- 使用 add_field 添加我需要的两个字段
从句法上讲,这可能吗?理想情况下,我希望能够进行 'double substitution' 排序,获取当前冲刺的估计时间,例如:
add_field => {
"estimatedTime" => "%{[velocityStatEntries][%{[sprints][id]}][estimated][value]}"
}
但这似乎只适用于硬编码格式,例如 "estimatedTime" => "%{[velocityStatEntries][1234][estimated][value]}"
我必须为此使用 Ruby 格式吗?
就其价值而言,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);
"
}
对于以下数据结构:
{
"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 对象,方法是将 Estimated 和 Completed 字段的值添加到具有匹配 ID 的 sprint 中。
理想情况下,我想在不编写 Ruby 的情况下处理这个问题,但我没有找到处理此场景的 logstash-native 解决方案。
首先,我使用 split 拆分了 sprints 字段上的数据,因此,我只有一个 sprints 对象,并且可以使用 [sprints][id] 来了解我正在处理的 sprint。
然后,我尝试通过以下两种方式之一使用 mutate 过滤器: - 使用 merge 将 [velocityStateEntries][] 对象添加到 当前冲刺 - 使用 add_field 添加我需要的两个字段
从句法上讲,这可能吗?理想情况下,我希望能够进行 'double substitution' 排序,获取当前冲刺的估计时间,例如:
add_field => {
"estimatedTime" => "%{[velocityStatEntries][%{[sprints][id]}][estimated][value]}"
}
但这似乎只适用于硬编码格式,例如 "estimatedTime" => "%{[velocityStatEntries][1234][estimated][value]}"
我必须为此使用 Ruby 格式吗?
就其价值而言,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);
"
}