Skip to content

Commit ca79415

Browse files
Andrew Gaulgaul
authored andcommitted
Allow non-AWS endpoints
This is useful for local Ceph S3 deployments. Fixes #10. Fixes #65.
1 parent e5ee0bd commit ca79415

File tree

3 files changed

+28
-1
lines changed

3 files changed

+28
-1
lines changed

CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
## 4.0.6
2+
- Support for non-AWS endpoints
3+
14
## 4.0.5
25
- Delete the file on disk after they are succesfully uploaded to S3 #122 #120
36
- Added logging when an exception occur in the Uploader's `on_complete` callback

CONTRIBUTORS

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ Contributors:
1111
* Nick Ethier (nickethier)
1212
* Pier-Hugues Pellerin (ph)
1313
* Richard Pijnenburg (electrical)
14+
* Andrew Gaul (andrewgaul)
1415

1516
Note: If you've sent us patches, bug reports, or otherwise contributed to
1617
Logstash, and you aren't on the list above and want to be, please let us know

lib/logstash/outputs/s3.rb

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
require "pathname"
1414
require "aws-sdk"
1515
require "logstash/outputs/s3/patch"
16+
require "uri"
1617

1718
Aws.eager_autoload!
1819

@@ -64,9 +65,11 @@
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

Comments
 (0)