2016-04-13 7 views
0

私はAWSでログをELKインスタンスに報告するラムダ関数を持っています。ラムダ関数を呼び出すたびに、すべてのログイベントとともに送信されるユニークなinvocation_idが生成されるため、1回の呼び出しからのイベントをELKで識別できます。操作が終了したら、「完了」イベントを送信します。Logstashフィルタ:集計 - タイムアウト時に自動保存

ラムダ関数が失敗したりタイムアウトしたりすると、「完了」イベントが送信されません。

私はlogstash aggregate filterを使用して、失敗した呼び出しを特定したいと考えています。意味 - 各invocation_idは集計マップでtask_idになり、「完了」イベントはend_of_taskになります。

私はタイムアウト時に(X時間後に完了したイベントは受信されませんでした)、集計されたイベントをstatus = failedで保存する必要があります。

このフィルタで可能ですか?もしそうなら、構文は何ですか?ドキュメントからは分かりません。

+0

どうやら、このためのオープンな機能要求があります:https://github.com/logstash-plugins/logstash-filter-aggregate/issues/14 – Malki

+1

持っていますelapsed {}フィルタが表示されました。このフィルタは、「完了」イベントが受信されなかったときにマークします。 –

+0

@AlainCollinsそれはうまくいくようです。私はそれを試して、アップデートを投稿します。ありがとう:) – Malki

答えて

0

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" ] 
} 
関連する問題