1

Logstashを使用して、ファイルからログを読み込んで解析し、RestベースのAPIに送信します。私の荷送人はうまくいきますが、私は奇妙な行動を経験しています。Logstashは常にPipeLineに1つのメッセージを保存します

Version: 
logstash-2.3.2 

問題:Logstashの荷主は、最初のログエントリを解析するとき

、それを送信しません、それはパイプラインでそれを保持します。 2番目のログエントリを解析すると、最初のログエントリがAPIに送信されます。したがって、1つのメッセージは常にパイプラインに残り、私のAPIに送信されません。

Logstash荷送人プロセスを停止すると、最後に残っているメッセージも送信されます。したがって、ある意味ではメッセージは失われませんが、荷送人は常にメッセージの背後にあります。

質問: なぜLogstashはパイプラインをフラッシュして、すぐにメッセージをAPIに送信できないのですか?

+2

それは複数行のフィルタ/コーデックから来るかもしれませんそれをマージするためにメッセージを保持する必要に応じて次のものと合わせてください。 – baudsp

答えて

1

正しい回答を得るには、logstashの設定とログ形式を貼り付ける必要がありますが、あなたが説明したように、複数行のプラグインを使用しているようです。したがって、logstash 2.2以降では、コーデックのマルチラインプラグインのauto_flush_intervalがあります。基本的にこの 'auto_flush_interval'は秒数に設定できます。マルチライン入力プラグインが指定された秒数までログラインをリッスンしない場合、パイプラインで保留中の入力がAPIに送られます...

例および詳細については、この通過してください。

input { 
    file { 
    path => "$LogstashFilePathValue" 
    type => "DemandwareError" 
    tags => "$EnvironmentName" 
    start_position => "beginning" 
    sincedb_path => "NUL" 
    codec => multiline { 
     pattern => "\A\[%{TIMESTAMP_ISO8601:demandware_timestamp} GMT\]" 
     negate => true 
     what => previous 
     auto_flush_interval => 10 
    } 
    } 
} 

の例では、リンクからである:auto_flush_interval訪問の詳細についてはhttps://github.com/elastic/logstash/issues/1482 :フィルター/コーデック:https://www.elastic.co/guide/en/logstash/current/plugins-codecs-multiline.html#plugins-codecs-multiline-auto_flush_interval

関連する問題