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 => :bool , :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 [ :s3_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