Logstash中的Agregate上的Agregate过滤器?

Logstash中的Agregate上的Agregate过滤器?,logstash,logstash-filter,Logstash,Logstash Filter,我有一个库存表,其中有商店/产品的库存: input { jdbc { statement => "SELECT ShopId, ProductCode, Quantity FROM stock ORDER BY productcode;" } } 然后我有一个简单的过滤器来聚合这些数据: filter { aggregate { task_id => "%{productcode}" code => "

我有一个库存表,其中有商店/产品的库存:

input {
  jdbc {
    statement => "SELECT ShopId, ProductCode, Quantity FROM stock ORDER BY productcode;"
  }
}
然后我有一个简单的过滤器来聚合这些数据:

filter {
     aggregate {
       task_id => "%{productcode}"
       code => "
         map['productcode'] ||= event.get('productcode')
         map['objectID'] ||= event.get('productcode')
         map['stocks'] ||= []
         map['stocks'] << {
            'ShopId' => event.get('ShopId'), 
            'quantity' => event.get('quantity'),
    }
         event.cancel()
       "
       push_previous_map_as_event => true
       timeout => 3
     }
}
现在我可以通过http输出插件将数据推送到Algolia。 但我的问题是,成千上万的对象会发出成千上万的调用

这就是为什么我认为使用批处理端点,将这些对象打包到f.e.1000对象的包中,但要这样做,我需要将结构调整为:

{
  "requests": [
    {
      "action": "addObject",
      "body": {
                "productcode": "123", 
                "objectID": "123", 
                ...
       }
    },
    {
        "action": "addObject",
        "body": {
                "productcode": "456", 
                "objectID": "456", 
                ...
         }
      }
  ]
}
在我看来,这类似于另一个聚合函数,但我已经尝试过:

 aggregate {
   task_id => "%{source}"
   code => "
     map['requests'] ||= []
     map['requests'] << {
    'action' => 'addObject',
    'body' => {
        'productcode' => event.get('productcode'),
        'objectId' => event.get('objectID'),
        'stocks' => event.get('stocks')
    }
 }
    event.cancel()
   "
   push_previous_map_as_event => true
   timeout => 3
聚合{
任务id=>“%{source}”
代码=>”
映射['requests']| |=[]
映射['requests']'addObject',
“正文”=>{
'productcode'=>event.get('productcode'),
'objectId'=>event.get('objectId'),
'stocks'=>event.get('stocks')
}
}
event.cancel()
"
推送上一个映射为事件=>true
超时=>3
但它不起作用

此外,使用这种类型的聚合函数,我无法配置要发送到批处理输出的包的大小


如果有任何帮助或线索,我将不胜感激。

这是一个很好的问题。但我要问你:你的方法1有什么问题?你提到了1000个电话。你这么说是什么意思?为什么你认为这样不好
logstash
是etl工具,它在接收数据时处理数据。@JBone我的输出是HTTP(我正试图将其推送到Algolia),因此这样它会创建50k HTTP调用,这需要很长时间。相反,Algolia支持批量更新,所以我可以进行50次批量调用,每个调用包含1000个元素。这是一个很好的问题。但我要问你:你的方法1有什么问题?你提到了1000个电话。你这么说是什么意思?为什么你认为这样不好
logstash
是etl工具,它在接收数据时处理数据。@JBone我的输出是HTTP(我正试图将其推送到Algolia),因此这样它会创建50k HTTP调用,这需要很长时间。相反,Algolia支持批量更新,因此我可以进行50次批量调用,每个调用包含1000个元素。
 aggregate {
   task_id => "%{source}"
   code => "
     map['requests'] ||= []
     map['requests'] << {
    'action' => 'addObject',
    'body' => {
        'productcode' => event.get('productcode'),
        'objectId' => event.get('objectID'),
        'stocks' => event.get('stocks')
    }
 }
    event.cancel()
   "
   push_previous_map_as_event => true
   timeout => 3