logstash中如何过滤多个同名字段?

How should I filter multiple fields with the same name in logstash?

我正在将 tsung 日志放入 ElasticSearch (ES),以便我可以使用 Kibana 过滤、可视化和比较结果。

我正在使用 logstash 及其 JSON 解析过滤器将 JSON 格式的 tsung 日志推送到 ES。

Tsung 日志有点复杂 (IMO),数组对象变成数组对象,多行事件,以及几个具有相同名称的字段,例如我下面的示例中的 "value"。

我要改造这个活动:

{
 "stats":[
  {"timestamp": 1317413861,  "samples": [
   {"name": "users", "value": 0, "max": 1},
   {"name": "users_count", "value": 1, "total": 1},
   {"name": "finish_users_count", "value": 1, "total": 1}]}]}

进入这个:

{"timestamp": 1317413861},{"users_value":0},{"users_max":1},{"users_count_value":1},{"users_count_total":1},{"finish_users_count_value":1},{"finish_users_count_total":1}

由于整个 tsung 日志文件在性能测试活动结束时转发到 logstash,我正在考虑使用正则表达式删除 CR 和无用的 statssamples 数组,然后将事件发送到 logstash 以简化一点。

然后,我会使用那些 JSON 过滤器选项:

add_field => {"%{name}_value" => "%{value}"}
add_field => {"%{name}_max" => "%{max}"}
add_field => {"%{name}_total" => "%{total}"}

但是我应该如何处理一个事件中有许多 value 字段这一事实?最好的事情是什么?

感谢您的帮助。

感觉这里需要 ruby{} 过滤器。遍历 'samples' 字段中的条目,并根据 name/value/total/max.

构建您自己的字段

SO 上的其他地方有此类行为的示例。