fluent-plugin-elasticsearch 1.7.0 → 1.8.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/History.md +4 -1
- data/README.md +11 -0
- data/fluent-plugin-elasticsearch.gemspec +1 -1
- data/lib/fluent/plugin/elasticsearch_index_template.rb +6 -0
- data/lib/fluent/plugin/out_elasticsearch.rb +6 -2
- data/lib/fluent/plugin/out_elasticsearch_dynamic.rb +3 -3
- data/test/plugin/test_out_elasticsearch.rb +114 -1
- data/test/plugin/test_out_elasticsearch_dynamic.rb +20 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f279ccf2181eb8582234fb5b417439dfd8f22ac9
|
4
|
+
data.tar.gz: e3b8e02a2aa972ac0e07971369dd9381b58401e3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a576bf1cd9ff05130d1f71cabfc6b264ffc53f86cb9780af42ee0aa4f647a24905e5d41c22dd446474896bf2ee17b7ad942011bc2f6dd10cf4231fde348e35aa
|
7
|
+
data.tar.gz: b938736ba3ed0fbf8846e864c5f7273c1b059a930a4b91165d2513e6038de6bdf48968570479047dce33a7ad3fa727a02f48215d3be724a6d60414c024010ae4
|
data/History.md
CHANGED
@@ -1,6 +1,9 @@
|
|
1
1
|
## Changelog [[tags]](https://github.com/uken/fluent-plugin-elasticsearch/tags)
|
2
2
|
|
3
|
-
###
|
3
|
+
### [Unreleased]
|
4
|
+
- fix typo in defaults for ssl_verify on elasticsearch_dynamic (#202)
|
5
|
+
- add support for `templates` (#196)
|
6
|
+
- rename `send` method to `send_bulk` (#206)
|
4
7
|
|
5
8
|
### 1.7.0
|
6
9
|
- add support for `template_name` and `template_file` (#194)
|
data/README.md
CHANGED
@@ -28,6 +28,7 @@ Note: For Amazon Elasticsearch Service please consider using [fluent-plugin-aws-
|
|
28
28
|
+ [target_type_key](#target_type_key)
|
29
29
|
+ [template_name](#template_name)
|
30
30
|
+ [template_file](#template_file)
|
31
|
+
+ [templates](#templates)
|
31
32
|
+ [request_timeout](#request_timeout)
|
32
33
|
+ [reload_connections](#reload_connections)
|
33
34
|
+ [reload_on_failure](#reload_on_failure)
|
@@ -240,6 +241,16 @@ The path to the file containing the template to install.
|
|
240
241
|
|
241
242
|
[template_name](#template_name) must also be specified.
|
242
243
|
|
244
|
+
### templates
|
245
|
+
|
246
|
+
Specify index templates in form of hash. Can contain multiple templates.
|
247
|
+
|
248
|
+
```
|
249
|
+
templates { "templane_name_1": "path_to_template_1_file", "templane_name_2": "path_to_template_2_file"}
|
250
|
+
```
|
251
|
+
|
252
|
+
If `template_file` and `template_name` are set, then this parameter will be ignored.
|
253
|
+
|
243
254
|
### request_timeout
|
244
255
|
|
245
256
|
You can specify HTTP request timeout.
|
@@ -3,7 +3,7 @@ $:.push File.expand_path('../lib', __FILE__)
|
|
3
3
|
|
4
4
|
Gem::Specification.new do |s|
|
5
5
|
s.name = 'fluent-plugin-elasticsearch'
|
6
|
-
s.version = '1.
|
6
|
+
s.version = '1.8.0'
|
7
7
|
s.authors = ['diogo', 'pitr']
|
8
8
|
s.email = ['pitr.vern@gmail.com', 'me@diogoterror.com']
|
9
9
|
s.description = %q{ElasticSearch output plugin for Fluent event collector}
|
@@ -54,6 +54,7 @@ class Fluent::ElasticsearchOutput < Fluent::BufferedOutput
|
|
54
54
|
config_param :flatten_hashes_separator, :string, :default => "_"
|
55
55
|
config_param :template_name, :string, :default => nil
|
56
56
|
config_param :template_file, :string, :default => nil
|
57
|
+
config_param :templates, :hash, :default => nil
|
57
58
|
|
58
59
|
include Fluent::SetTagKeyMixin
|
59
60
|
include Fluent::ElasticsearchIndexTemplate
|
@@ -86,7 +87,10 @@ class Fluent::ElasticsearchOutput < Fluent::BufferedOutput
|
|
86
87
|
|
87
88
|
if @template_name && @template_file
|
88
89
|
template_install(@template_name, @template_file)
|
90
|
+
elsif @templates
|
91
|
+
templates_hash_install (@templates)
|
89
92
|
end
|
93
|
+
|
90
94
|
end
|
91
95
|
|
92
96
|
def start
|
@@ -315,7 +319,7 @@ class Fluent::ElasticsearchOutput < Fluent::BufferedOutput
|
|
315
319
|
append_record_to_messages(@write_operation, meta, record, bulk_message)
|
316
320
|
end
|
317
321
|
|
318
|
-
|
322
|
+
send_bulk(bulk_message) unless bulk_message.empty?
|
319
323
|
bulk_message.clear
|
320
324
|
end
|
321
325
|
|
@@ -328,7 +332,7 @@ class Fluent::ElasticsearchOutput < Fluent::BufferedOutput
|
|
328
332
|
[parent_object, path[-1]]
|
329
333
|
end
|
330
334
|
|
331
|
-
def
|
335
|
+
def send_bulk(data)
|
332
336
|
retries = 0
|
333
337
|
begin
|
334
338
|
client.bulk body: data
|
@@ -15,7 +15,7 @@ class Fluent::ElasticsearchOutputDynamic < Fluent::ElasticsearchOutput
|
|
15
15
|
config_param :reload_connections, :string, :default => "true"
|
16
16
|
config_param :reload_on_failure, :string, :default => "false"
|
17
17
|
config_param :resurrect_after, :string, :default => "60"
|
18
|
-
config_param :ssl_verify, :string, :
|
18
|
+
config_param :ssl_verify, :string, :default => "true"
|
19
19
|
|
20
20
|
def configure(conf)
|
21
21
|
super
|
@@ -178,12 +178,12 @@ class Fluent::ElasticsearchOutputDynamic < Fluent::ElasticsearchOutput
|
|
178
178
|
end
|
179
179
|
|
180
180
|
bulk_message.each do | hKey, array |
|
181
|
-
|
181
|
+
send_bulk(array, hKey) unless array.empty?
|
182
182
|
array.clear
|
183
183
|
end
|
184
184
|
end
|
185
185
|
|
186
|
-
def
|
186
|
+
def send_bulk(data, host)
|
187
187
|
retries = 0
|
188
188
|
begin
|
189
189
|
client(host).bulk body: data
|
@@ -113,7 +113,8 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
113
113
|
to_return(:status => 200, :body => "", :headers => {})
|
114
114
|
|
115
115
|
driver('test', config)
|
116
|
-
end
|
116
|
+
end
|
117
|
+
|
117
118
|
|
118
119
|
def test_template_create_invalid_filename
|
119
120
|
config = %{
|
@@ -139,6 +140,118 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
139
140
|
}
|
140
141
|
end
|
141
142
|
|
143
|
+
def test_templates_create
|
144
|
+
cwd = File.dirname(__FILE__)
|
145
|
+
template_file = File.join(cwd, 'test_template.json')
|
146
|
+
config = %{
|
147
|
+
host logs.google.com
|
148
|
+
port 777
|
149
|
+
scheme https
|
150
|
+
path /es/
|
151
|
+
user john
|
152
|
+
password doe
|
153
|
+
templates {"logstash1":"#{template_file}", "logstash2":"#{template_file}","logstash3":"#{template_file}" }
|
154
|
+
}
|
155
|
+
|
156
|
+
stub_request(:head, "https://john:doe@logs.google.com:777/es//").
|
157
|
+
to_return(:status => 200, :body => "", :headers => {})
|
158
|
+
# check if template exists
|
159
|
+
stub_request(:get, "https://john:doe@logs.google.com:777/es//_template/logstash1").
|
160
|
+
to_return(:status => 404, :body => "", :headers => {})
|
161
|
+
stub_request(:get, "https://john:doe@logs.google.com:777/es//_template/logstash2").
|
162
|
+
to_return(:status => 404, :body => "", :headers => {})
|
163
|
+
|
164
|
+
stub_request(:get, "https://john:doe@logs.google.com:777/es//_template/logstash3").
|
165
|
+
to_return(:status => 200, :body => "", :headers => {}) #exists
|
166
|
+
|
167
|
+
stub_request(:put, "https://john:doe@logs.google.com:777/es//_template/logstash1").
|
168
|
+
to_return(:status => 200, :body => "", :headers => {})
|
169
|
+
stub_request(:put, "https://john:doe@logs.google.com:777/es//_template/logstash2").
|
170
|
+
to_return(:status => 200, :body => "", :headers => {})
|
171
|
+
stub_request(:put, "https://john:doe@logs.google.com:777/es//_template/logstash3").
|
172
|
+
to_return(:status => 200, :body => "", :headers => {})
|
173
|
+
|
174
|
+
driver('test', config)
|
175
|
+
|
176
|
+
assert_requested( :put, "https://john:doe@logs.google.com:777/es//_template/logstash1", times: 1)
|
177
|
+
assert_requested( :put, "https://john:doe@logs.google.com:777/es//_template/logstash2", times: 1)
|
178
|
+
assert_not_requested(:put, "https://john:doe@logs.google.com:777/es//_template/logstash3") #exists
|
179
|
+
end
|
180
|
+
|
181
|
+
def test_templates_not_used
|
182
|
+
cwd = File.dirname(__FILE__)
|
183
|
+
template_file = File.join(cwd, 'test_template.json')
|
184
|
+
|
185
|
+
config = %{
|
186
|
+
host logs.google.com
|
187
|
+
port 777
|
188
|
+
scheme https
|
189
|
+
path /es/
|
190
|
+
user john
|
191
|
+
password doe
|
192
|
+
template_name logstash
|
193
|
+
template_file #{template_file}
|
194
|
+
templates {"logstash1":"#{template_file}", "logstash2":"#{template_file}" }
|
195
|
+
}
|
196
|
+
# connection start
|
197
|
+
stub_request(:head, "https://john:doe@logs.google.com:777/es//").
|
198
|
+
to_return(:status => 200, :body => "", :headers => {})
|
199
|
+
# check if template exists
|
200
|
+
stub_request(:get, "https://john:doe@logs.google.com:777/es//_template/logstash").
|
201
|
+
to_return(:status => 404, :body => "", :headers => {})
|
202
|
+
stub_request(:get, "https://john:doe@logs.google.com:777/es//_template/logstash1").
|
203
|
+
to_return(:status => 404, :body => "", :headers => {})
|
204
|
+
stub_request(:get, "https://john:doe@logs.google.com:777/es//_template/logstash2").
|
205
|
+
to_return(:status => 404, :body => "", :headers => {})
|
206
|
+
#creation
|
207
|
+
stub_request(:put, "https://john:doe@logs.google.com:777/es//_template/logstash").
|
208
|
+
to_return(:status => 200, :body => "", :headers => {})
|
209
|
+
stub_request(:put, "https://john:doe@logs.google.com:777/es//_template/logstash1").
|
210
|
+
to_return(:status => 200, :body => "", :headers => {})
|
211
|
+
stub_request(:put, "https://john:doe@logs.google.com:777/es//_template/logstash2").
|
212
|
+
to_return(:status => 200, :body => "", :headers => {})
|
213
|
+
|
214
|
+
driver('test', config)
|
215
|
+
|
216
|
+
assert_requested(:put, "https://john:doe@logs.google.com:777/es//_template/logstash", times: 1)
|
217
|
+
|
218
|
+
assert_not_requested(:put, "https://john:doe@logs.google.com:777/es//_template/logstash1")
|
219
|
+
assert_not_requested(:put, "https://john:doe@logs.google.com:777/es//_template/logstash2")
|
220
|
+
end
|
221
|
+
|
222
|
+
def test_templates_can_be_partially_created_if_error_occurs
|
223
|
+
cwd = File.dirname(__FILE__)
|
224
|
+
template_file = File.join(cwd, 'test_template.json')
|
225
|
+
config = %{
|
226
|
+
host logs.google.com
|
227
|
+
port 777
|
228
|
+
scheme https
|
229
|
+
path /es/
|
230
|
+
user john
|
231
|
+
password doe
|
232
|
+
templates {"logstash1":"#{template_file}", "logstash2":"/abc" }
|
233
|
+
}
|
234
|
+
stub_request(:head, "https://john:doe@logs.google.com:777/es//").
|
235
|
+
to_return(:status => 200, :body => "", :headers => {})
|
236
|
+
# check if template exists
|
237
|
+
stub_request(:get, "https://john:doe@logs.google.com:777/es//_template/logstash1").
|
238
|
+
to_return(:status => 404, :body => "", :headers => {})
|
239
|
+
stub_request(:get, "https://john:doe@logs.google.com:777/es//_template/logstash2").
|
240
|
+
to_return(:status => 404, :body => "", :headers => {})
|
241
|
+
|
242
|
+
stub_request(:put, "https://john:doe@logs.google.com:777/es//_template/logstash1").
|
243
|
+
to_return(:status => 200, :body => "", :headers => {})
|
244
|
+
stub_request(:put, "https://john:doe@logs.google.com:777/es//_template/logstash2").
|
245
|
+
to_return(:status => 200, :body => "", :headers => {})
|
246
|
+
|
247
|
+
assert_raise(RuntimeError) {
|
248
|
+
driver('test', config)
|
249
|
+
}
|
250
|
+
|
251
|
+
assert_requested(:put, "https://john:doe@logs.google.com:777/es//_template/logstash1", times: 1)
|
252
|
+
assert_not_requested(:put, "https://john:doe@logs.google.com:777/es//_template/logstash2")
|
253
|
+
end
|
254
|
+
|
142
255
|
def test_legacy_hosts_list
|
143
256
|
config = %{
|
144
257
|
hosts host1:50,host2:100,host3
|
@@ -63,6 +63,26 @@ class ElasticsearchOutputDynamic < Test::Unit::TestCase
|
|
63
63
|
assert_equal 'doe', instance.password
|
64
64
|
end
|
65
65
|
|
66
|
+
def test_defaults
|
67
|
+
config = %{
|
68
|
+
host logs.google.com
|
69
|
+
scheme https
|
70
|
+
path /es/
|
71
|
+
user john
|
72
|
+
password doe
|
73
|
+
}
|
74
|
+
instance = driver('test', config).instance
|
75
|
+
|
76
|
+
assert_equal "9200", instance.port
|
77
|
+
assert_equal "false", instance.logstash_format
|
78
|
+
assert_equal "true", instance.utc_index
|
79
|
+
assert_equal false, instance.time_key_exclude_timestamp
|
80
|
+
assert_equal "true", instance.reload_connections
|
81
|
+
assert_equal "false", instance.reload_on_failure
|
82
|
+
assert_equal "60", instance.resurrect_after
|
83
|
+
assert_equal "true", instance.ssl_verify
|
84
|
+
end
|
85
|
+
|
66
86
|
def test_legacy_hosts_list
|
67
87
|
config = %{
|
68
88
|
hosts host1:50,host2:100,host3
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fluent-plugin-elasticsearch
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.8.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- diogo
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2016-
|
12
|
+
date: 2016-10-24 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: fluentd
|