1313require  "pathname" 
1414require  "aws-sdk" 
1515require  "logstash/outputs/s3/patch" 
16+ require  "uri" 
1617
1718Aws . eager_autoload! 
1819
6465# This is an example of logstash config: 
6566# [source,ruby] 
6667# output { 
67- #    s3{ 
68+ #    s3  { 
6869#      access_key_id => "crazy_key"             (required) 
6970#      secret_access_key => "monkey_access_key" (required) 
71+ #      endpoint => "http://127.0.0.1:8080"      (optional, used for non-AWS endpoints, default = "") 
72+ #      force_path_style => false                (optional, used for non-AWS endpoints, default = false) 
7073#      region => "eu-west-1"                    (optional, default = "us-east-1") 
7174#      bucket => "your_bucket"                  (required) 
7275#      size_file => 2048                        (optional) - Bytes 
@@ -106,6 +109,13 @@ class LogStash::Outputs::S3 < LogStash::Outputs::Base
106109  # S3 bucket 
107110  config  :bucket ,  :validate  =>  :string ,  :required  =>  true 
108111
112+   # Specify a custom endpoint for use with non-AWS S3 implementations, e.g., 
113+   # Ceph.  Provide a URL in the format http://127.0.0.1:8080/ 
114+   config  :endpoint ,  :validate  =>  :string 
115+ 
116+   # When false, specify the bucket in the subdomain.  When true, specify the bucket in the path. 
117+   config  :force_path_style ,  :validate  =>  :boolean ,  :default  =>  false 
118+ 
109119  # Set the size of file in bytes, this means that files on bucket when have dimension > file_size, they are stored in two or more file. 
110120  # If you have tags then it will generate a specific size file for every tags 
111121  ##NOTE: define size of file is the better thing, because generate a local temporary file on disk and then put it in bucket. 
@@ -270,6 +280,7 @@ def full_options
270280    options  =  Hash . new 
271281    options [ :signature_version ]  =  @signature_version  if  @signature_version 
272282    options . merge ( aws_options_hash ) 
283+            . merge ( endpoint_options ) 
273284  end 
274285
275286  def  normalize_key ( prefix_key ) 
@@ -286,6 +297,18 @@ def upload_options
286297    } 
287298  end 
288299
300+   def  endpoint_options 
301+     if  @endpoint 
302+       uri  =  URI ( @endpoint ) 
303+       { 
304+         :endpoint  =>  @endpoint , 
305+         :force_path_style  =>  @force_path_style , 
306+       } 
307+     else 
308+       { } 
309+     end 
310+   end 
311+ 
289312  private 
290313  # We start a task in the background for check for stale files and make sure we rotate them to S3 if needed. 
291314  def  start_periodic_check 
0 commit comments