Logstash 日志存储筛选器:聚合-超时时自动保存

Logstash 日志存储筛选器:聚合-超时时自动保存,logstash,aws-lambda,elastic-stack,Logstash,Aws Lambda,Elastic Stack,我在AWS中有一个Lambda函数,它向ELK实例报告日志。lambda函数的每次调用都会生成一个唯一的invocation\u id,该id随每个日志事件一起发送,因此可以在ELK中识别来自单个调用的事件。在操作结束时,我发送一个“完成”事件 Lambda函数可能会失败或超时,然后不发送“完成”事件 我想使用来识别失败的调用。含义-每个invocation\u id将是聚合映射中的task\u id,“Done”事件将是任务的结束 我需要告诉它“在超时时(X时间后没有收到完成的事件),保存状态

我在AWS中有一个Lambda函数,它向ELK实例报告日志。lambda函数的每次调用都会生成一个唯一的
invocation\u id
,该id随每个日志事件一起发送,因此可以在ELK中识别来自单个调用的事件。在操作结束时,我发送一个“完成”事件

Lambda函数可能会失败或超时,然后不发送“完成”事件

我想使用来识别失败的调用。含义-每个
invocation\u id
将是聚合映射中的
task\u id
,“Done”事件将是任务的
结束

我需要告诉它“在超时时(X时间后没有收到完成的事件),保存状态为失败的聚合事件”


用这个过滤器可以吗?如果是,语法是什么?文档中不清楚..

Logstash聚合筛选器自2.3.0版以来支持超时事件生成。以下是如何使用此功能实现您想要的:

if [action] == "BEGIN" {
  aggregate {
    task_id => "%{id}"
    code => "map['bytes'] = 0"
    map_action => "create"
  }
} elseif [action] == "DONE" {
  aggregate {
    task_id => "%{id}"
    code => "event['bytes'] += map['bytes']"
    timeout_code => "event.tag('failed')"
    map_action => "update"
    end_of_task => true
    timeout => 10
    push_map_as_event_on_timeout => true
} else {
    aggregate {
    task_id => "%{id}"
    code => "map['bytes'] += event['bytes']"
    map_action => "update"
    add_tag => [ "drop" ]
}

显然有一个开放的特性请求:您是否看到了经过的{}过滤器,它将在未收到“完成”事件时进行标记。@AlainCollins,看起来它可以工作。我会尝试一下并发布更新。谢谢:)