8
8
require "thread"
9
9
require "tmpdir"
10
10
require "fileutils"
11
+ require "uri"
11
12
12
13
13
14
# INFORMATION:
59
60
# This is an example of logstash config:
60
61
# [source,ruby]
61
62
# output {
62
- # s3{
63
+ # s3 {
63
64
# access_key_id => "crazy_key" (required)
64
65
# secret_access_key => "monkey_access_key" (required)
66
+ # endpoint => "http://127.0.0.1:8080" (optional, used for non-AWS endpoints, default = "")
65
67
# region => "eu-west-1" (optional, default = "us-east-1")
66
68
# bucket => "boss_please_open_your_bucket" (required)
67
69
# size_file => 2048 (optional) - Bytes
@@ -84,6 +86,10 @@ class LogStash::Outputs::S3 < LogStash::Outputs::Base
84
86
# S3 bucket
85
87
config :bucket , :validate => :string
86
88
89
+ # Specify a custom endpoint for use with non-AWS S3 implementations, e.g.,
90
+ # Ceph. Provide a URL in the format http://127.0.0.1:8080/
91
+ config :endpoint , :validate => :string
92
+
87
93
# 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.
88
94
# If you have tags then it will generate a specific size file for every tags
89
95
##NOTE: define size of file is the better thing, because generate a local temporary file on disk and then put it in bucket.
@@ -147,6 +153,7 @@ def aws_s3_config
147
153
148
154
def full_options
149
155
aws_options_hash . merge ( signature_options )
156
+ . merge ( endpoint_options )
150
157
end
151
158
152
159
def signature_options
@@ -157,6 +164,20 @@ def signature_options
157
164
end
158
165
end
159
166
167
+ def endpoint_options
168
+ if @endpoint
169
+ uri = URI ( @endpoint )
170
+ {
171
+ :s3_force_path_style => true ,
172
+ :s3_endpoint => uri . host ,
173
+ :s3_port => uri . port ,
174
+ :use_ssl => uri . scheme == "https" ,
175
+ }
176
+ else
177
+ { }
178
+ end
179
+ end
180
+
160
181
def aws_service_endpoint ( region )
161
182
return {
162
183
:s3_endpoint => region == 'us-east-1' ? 's3.amazonaws.com' : "s3-#{ region } .amazonaws.com"
0 commit comments