Pipeline.orderedがデフォルトの場合にエラーが発生

logstash.ymlのpipeline.orderedがデフォルトの場合に以下のエラーが発生します。pipeline.orderedを「false」にすると発生しないようです。このエラーが発生する原因をご教示頂けないでしょうか

Pipeline aborted due to error {:pipeline_id=>"correlation_incident", :exception=>#<Errno::ENOENT: No such file or directory - /tmp/logstash/26e01ccf-8201-441c-9dbd-81896fe1d714>, :backtrace=>["org/jruby/RubyFile.java:983:in lstat'", "uri:classloader:/META-INF/jruby.home/lib/ruby/stdlib/fileutils.rb:673:in remove_entry_secure'", "uri:classloader:/META-INF/jruby.home/lib/ruby/stdlib/fileutils.rb:611:in block in rm_r'", "org/jruby/RubyArray.java:1809:in each'", "uri:classloader:/META-INF/jruby.home/lib/ruby/stdlib/fileutils.rb:609:in rm_r'", "/usr/share/logstash/vendor/bundle/jruby/2.5.0/gems/logstash-output-s3-4.3.1/lib/logstash/outputs/s3/temporary_file.rb:54:in delete!'", "/usr/share/logstash/vendor/bundle/jruby/2.5.0/gems/logstash-output-s3-4.3.1/lib/logstash/outputs/s3.rb:380:in clean_temporary_file'", "/usr/share/logstash/vendor/bundle/jruby/2.5.0/gems/logstash-output-s3-4.3.1/lib/logstash/outputs/s3.rb:397:in block in restore_from_crash'", "org/jruby/RubyArray.java:1809:in each'", "/usr/share/logstash/vendor/bundle/jruby/2.5.0/gems/logstash-output-s3-4.3.1/lib/logstash/outputs/s3.rb:389:in restore_from_crash'", "/usr/share/logstash/vendor/bundle/jruby/2.5.0/gems/logstash-output-s3-4.3.1/lib/logstash/outputs/s3.rb:231:in register'", "org/logstash/config/ir/compiler/OutputStrategyExt.java:126:in register'", "org/logstash/config/ir/compiler/AbstractOutputDelegatorExt.java:68:in register'", "/usr/share/logstash/logstash-core/lib/logstash/java_pipeline.rb:216:in block in register_plugins'", "org/jruby/RubyArray.java:1809:in each'", "/usr/share/logstash/logstash-core/lib/logstash/java_pipeline.rb:215:in register_plugins'", "/usr/share/logstash/logstash-core/lib/logstash/java_pipeline.rb:519:in maybe_setup_out_plugins'", "/usr/share/logstash/logstash-core/lib/logstash/java_pipeline.rb:228:in start_workers'", "/usr/share/logstash/logstash-core/lib/logstash/java_pipeline.rb:170:in run'", "/usr/share/logstash/logstash-core/lib/logstash/java_pipeline.rb:125:in block in start'"], "pipeline.sources"=>["/etc/logstash/conf.d/ddi_correlation_incident.conf"], :thread=>"#<Thread:0xb0449c5@/usr/share/logstash/logstash-core/lib/logstash/java_pipeline.rb:121 run>"}

[ERROR][logstash.agent ] Failed to execute action {:id=>:XXX, :action_type=>LogStash::ConvergeResult::FailedAction, :message=>"Could not execute action: PipelineAction::Create<XXX>, action_result: false", :backtrace=>nil}

ただ、pipeline.orderedを「false」にすると以下のエラーが発生することがあります。合わせて原因をご教示頂けないでしょうか

java.lang.IllegalStateException: Logstash stopped processing because of an error: (SystemExit) exit

@t-nakata さん、

ログに記載の以下が根本的な原因のようです。

こちらに同様のエラー報告がありました。
/tmpの所有者がrootで、logstash実行ユーザで作業ディレクトリが作成できない場合発生するようです。手動で/tmp/logstashを作って所有者をlogstashにするか、s3 outputの設定でtemporary_directoryにて任意の作業ディレクトリを指定してみてください。

ご回答ありがとうございます。頂いた解決策について試してみましたが、事象が改善しませんでした。
以下、実施したオペレーションを記載します。

1.temporary_directory => "/logstash/tmp"を指定
2.logstashを停止
3.inputとなるログファイルにデータ追記
4.logstash起動
5.logstash再起動

■4の結果:
・エラー発生せず
・データ登録も正常に行われている
・以下のディレクトリが作成され、ディレクトリ内に空ファイルあり
/logstash/tmp/6f18ec7e-8736-481c-8587-7e3b5d82cafc

ls -l

total 0
-rw-r--r-- 1 logstash logstash 0 Jul 17 13:32 ls.s3.6b646668-6d52-4d42-9275-0899a3a60b60.2020-07-17T13.32.part1.txt

■5の結果
・以下のエラーが発生
Pipeline aborted due to error {:pipeline_id=>"XXXXX", :exception=>#<Errno::ENOENT: No such file or directory - /logstash/tmp/6f18ec7e-8736-481c-8587-7e3b5d82cafc>
・/logstash/tmp配下のディレクトリが削除されている

上記4の段階でlogstashがS3にデータ転送する際に作成した一時ディレクトリを記憶しており、5の起動時に前回作成した作業ディレクトリを参照しにいったけど、ディレクトリが既に削除されているため、参照できずエラーになっているように見えます。一時ディレクトリはlogstashを停止した際には削除されておらず、起動後には削除されていたので、logstashが起動時に一時ディレクトリを削除しているように見えます。
なので、起動時に自分で削除したディレクトリを参照してエラーになっているように見えてます。

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.