Logstash S3転送時にエラー

Logstash→S3に関して質問させて頂きます。

▼実現したいこと
Logstashのoutputプラグインを使ってS3にデータ転送
https://www.elastic.co/guide/en/logstash/current/plugins-outputs-s3.html

Logstashバージョン:7.3

config設定値
input {
    file{
        path => "XXX/XXX.log"
        start_position => "beginning"
    }
}
output {
      s3 {
        proxy_uri => "XXX"
        endpoint => "https://bucket.resion.amazonaws.com"
        access_key_id => "XXXD"
        secret_access_key => "XXX"
        region => "XXX"
        bucket => "XXX"
        prefix => "XXX/%{+YYYY}/%{+MM}/%{+dd}"
        validate_credentials_on_root_bucket => false
      }
    }

▼質問
上記設定で起動するとエラーが発生します。

Uploading failed, retrying. {:exception=>Seahorse::Client::NetworkingError,
 :message=>"execution expired", 
 :path=>"/tmp/logstash/XXX/XXX/2019/09/02/XXX.part0.txt", 
 :backtrace=>["org/jruby/ext/socket/RubyTCPSocket.java:119:in `initialize'",
  "org/jruby/RubyIO.java:1155:in `open'", 
 "uri:classloader:/META-INF/jruby.home/lib/ruby/stdlib/net/http.rb:941:in `block in connect'",
  "org/jruby/ext/timeout/Timeout.java:99:in `timeout'", 
 "org/jruby/ext/timeout/Timeout.java:75:in `timeout'", 
 "uri:classloader:/META-INF/jruby.home/lib/ruby/stdlib/net/http.rb:939:in `connect'", 
 "uri:classloader:/META-INF/jruby.home/lib/ruby/stdlib/net/http.rb:924:in `do_start'", 
 "uri:classloader:/META-INF/jruby.home/lib/ruby/stdlib/net/http.rb:919:in `start'", 
 "uri:classloader:/META-INF/jruby.home/lib/ruby/stdlib/delegate.rb:83:in `method_missing'",

Logstashの設定に問題はありますでしょうか?
分かる方がいらっしゃいましたら回答をお願いいたします。

こんにちわ。

endpointは、regionを指定していれば、自動的に求まるので不要かと思います。

By default it is constructed using the value of region . This is useful when connecting to S3 compatible services, but beware that these aren’t guaranteed to work correctly with the AWS SDK.

もし、このendpointの設定値をそのままお使いでしたら、接続できないのでタイムアウトになるかと思います。
(リージョンのスペルも違いますし)
手元の環境で、https://bucket.resion.amazonaws.comを使ってやってみたときもタイムアウトエラーになりました。

またendpointを指定せず、regionに存在しない値を入れてもタイムアウトになりました。
↓ 存在しないregionを指定する -> 繋げないendpointの値となる -> タイムアウト の例

    s3 {
        #proxy_uri => "http://localhost:8889"
        #endpoint => "https://bucket.resion.amazonaws.com"
        access_key_id => "***************"
        secret_access_key => "****************************"
        region => "ap-northeast-12345"
        bucket => "hogehoge"
        prefix => "barbar/%{+YYYY}/%{+MM}/%{+dd}"
        validate_credentials_on_root_bucket => false
    }

このことから、endpoint、regionの設定を見なおしていただくと良いのではないかと考えました。

ご参考になれば幸いです。

回答頂きありがとうございます。

endpointをコメントアウト、regionの設定が正しいことを確認の上再度実行しましたが、
同様のエラーになりました…

LogstashからS3に接続する上で、config以外で設定が必要な箇所があれば教えて頂けますでしょうか。(logstash.yml等)

お手数ですが、もし分かれば教えて頂けますと大変助かります。

logstashの設定ファイル以外では、特に必要となる箇所はないと思っておりますが...

同様の内容でお困りの方もいらっしゃるようですが、解決には至っていないようです。

他の環境でも再現できるような条件はありますか?

データの量やlogstashを動かしている環境logstash、s3側で行っている設定などの情報があれば、
他にピンとくる方がいらっしゃるかもしれませんので、何らかのヒントがあればと思います。

ご連絡頂きありがとうございます。

以下回答します。
もし何か分かればお手数ですが、ご教示お願いします。


データ量:
1ファイル1行のデータです。

Logstashを動かしている環境:
CentOS 7.3,CPU 4v, Memory 8GB,ディスク 80GB

logstash側で行っている設定:
config…「endpoint 」を除いた上記内容
logstash.yml…コメントアウトしているのは「Data path」のみです。それ以外はコメントのままです

s3側で行っている設定:
・ブロックパブリックアクセス…全てオフ
・アクセスコントロールリスト…バケット所有者のアクセス権のみでパブリックアクセスの設定無

・バケットポリシー は以下を設定

{
"Version": "2012-10-17",
"Id": "PolicyXXXXXXXXXXXXXXX",
"Statement": [
{
"Sid": "XXXXXXXXXXXXXXXX",
"Effect": "Allow",
"Principal": "",
"Action": "s3:
",
"Resource": "arn:aws:s3:::<バケット名>/*",
"Condition": {
"IpAddress": {
"aws:SourceIp": "<送り元のIPアドレス>"
}
}
}
]
}

Logstashのサービス起動ではなく、curlコマンドで対象バケットにデータをPUTしたところ正常に処理されました。そのためS3の設定は問題ない想定です。

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