fluent-plugin-elasticsearch 2.12.5 → 3.0.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 +5 -0
- data/README.md +25 -0
- data/fluent-plugin-elasticsearch.gemspec +1 -1
- data/lib/fluent/plugin/elasticsearch_index_template.rb +5 -2
- data/lib/fluent/plugin/out_elasticsearch.rb +10 -26
- data/lib/fluent/plugin/out_elasticsearch_dynamic.rb +4 -23
- data/test/plugin/test_out_elasticsearch.rb +46 -135
- data/test/plugin/test_out_elasticsearch_dynamic.rb +47 -87
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c5f8aa97feb4191caf5f4bb14fcdd6de7e453ccabee8b0fc50a3b256e56ebc93
|
4
|
+
data.tar.gz: 35df640f4f7c7944ea2190fe4627ad2385c102c551fcf3b8bbf25984a00bdd58
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9bb28681d6b85d4260a4797a244c37cfcedd4f23a1d0b5b690df45845c287e0c20741033eb4f6289d7ed2bff5517d0749b5258361fe056bdf628445d69979920
|
7
|
+
data.tar.gz: 2947d2e1fa50a87b507b1e8792a254ae0d595472e40553d0d14ec74a533c2be8c1fcbc59347c098440354f5949e3e07bbf4f7aa397ed3fd2c3a7ff16e692aacd
|
data/History.md
CHANGED
@@ -2,6 +2,11 @@
|
|
2
2
|
|
3
3
|
### [Unreleased]
|
4
4
|
|
5
|
+
### 3.0.0
|
6
|
+
- Use fluentd core retry mechanism (#519)
|
7
|
+
- Depends on builtin retrying mechanism (#518)
|
8
|
+
- Loosen ConnectionRetryFailure condition when flush_thread_count > 1 and depends on Fluentd core retrying mechanism (#516)
|
9
|
+
|
5
10
|
### 2.12.5
|
6
11
|
- Ensure sniffer class constants definition before calling #client (#515)
|
7
12
|
|
data/README.md
CHANGED
@@ -83,6 +83,7 @@ Current maintainers: @cosmo0920
|
|
83
83
|
+ [Cannot see detailed failure log](#cannot-see-detailed-failure-log)
|
84
84
|
+ [Cannot connect TLS enabled reverse Proxy](#cannot-connect-tls-enabled-reverse-proxy)
|
85
85
|
+ [Declined logs are resubmitted forever, why?](#declined-logs-are-resubmitted-forever-why)
|
86
|
+
+ [Suggested to increase flush_thread_count, why?](#suggested-to-increase-flush_thread_count-why)
|
86
87
|
* [Contact](#contact)
|
87
88
|
* [Contributing](#contributing)
|
88
89
|
* [Running tests](#running-tests)
|
@@ -1226,6 +1227,30 @@ The following configuration uses label:
|
|
1226
1227
|
</label>
|
1227
1228
|
```
|
1228
1229
|
|
1230
|
+
### Suggested to increase flush_thread_count, why?
|
1231
|
+
|
1232
|
+
fluent-plugin-elasticsearch default behavior has a possibility to cause events traffic jam.
|
1233
|
+
When users use `flush_thread_count` = 1, ES plugin retries to send events if connection errors are disappeared.
|
1234
|
+
|
1235
|
+
To prevent the following warning and sending events blocking, you must specify `flush_thread_count` > 2:
|
1236
|
+
|
1237
|
+
```log
|
1238
|
+
2018-12-24 14:32:06 +0900 [warn]: #0 To prevent events traffic jam, you should specify 2 or more 'flush_thread_count'.
|
1239
|
+
```
|
1240
|
+
|
1241
|
+
```aconf
|
1242
|
+
<match out.elasticsearch.**>
|
1243
|
+
@type elasticsearch
|
1244
|
+
host localhost
|
1245
|
+
port 9200
|
1246
|
+
# ...
|
1247
|
+
<buffer tag>
|
1248
|
+
@type memory # or file
|
1249
|
+
flush_thread_count 4
|
1250
|
+
</buffer>
|
1251
|
+
</match>
|
1252
|
+
```
|
1253
|
+
|
1229
1254
|
## Contact
|
1230
1255
|
|
1231
1256
|
If you have a question, [open an Issue](https://github.com/uken/fluent-plugin-elasticsearch/issues).
|
@@ -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 = '
|
6
|
+
s.version = '3.0.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}
|
@@ -1,4 +1,7 @@
|
|
1
|
+
require 'fluent/error'
|
2
|
+
|
1
3
|
module Fluent::ElasticsearchIndexTemplate
|
4
|
+
class TemplateInstallationFailure < Fluent::UnrecoverableError; end
|
2
5
|
|
3
6
|
def get_template(template_file)
|
4
7
|
if !File.exists?(template_file)
|
@@ -31,7 +34,7 @@ module Fluent::ElasticsearchIndexTemplate
|
|
31
34
|
retries = 0
|
32
35
|
begin
|
33
36
|
yield
|
34
|
-
rescue
|
37
|
+
rescue *client.transport.host_unreachable_exceptions, Timeout::Error => e
|
35
38
|
@_es = nil
|
36
39
|
@_es_info = nil
|
37
40
|
if retries < max_retries
|
@@ -40,7 +43,7 @@ module Fluent::ElasticsearchIndexTemplate
|
|
40
43
|
log.warn "Could not push template(s) to Elasticsearch, resetting connection and trying again. #{e.message}"
|
41
44
|
retry
|
42
45
|
end
|
43
|
-
raise
|
46
|
+
raise TemplateInstallationFailure, "Could not push template(s) to Elasticsearch after #{retries} retries. #{e.message}"
|
44
47
|
end
|
45
48
|
end
|
46
49
|
|
@@ -22,8 +22,8 @@ end
|
|
22
22
|
|
23
23
|
module Fluent::Plugin
|
24
24
|
class ElasticsearchOutput < Output
|
25
|
-
class
|
26
|
-
class
|
25
|
+
class RecoverableRequestFailure < StandardError; end
|
26
|
+
class UnrecoverableRequestFailure < Fluent::UnrecoverableError; end
|
27
27
|
|
28
28
|
# MissingIdFieldError is raised for records that do not
|
29
29
|
# include the field for the unique record identifier
|
@@ -264,6 +264,10 @@ EOC
|
|
264
264
|
end
|
265
265
|
end
|
266
266
|
end
|
267
|
+
|
268
|
+
if @buffer_config.flush_thread_count < 2
|
269
|
+
log.warn "To prevent events traffic jam, you should specify 2 or more 'flush_thread_count'."
|
270
|
+
end
|
267
271
|
end
|
268
272
|
|
269
273
|
def backend_options
|
@@ -342,7 +346,6 @@ EOC
|
|
342
346
|
reload_connections: local_reload_connections,
|
343
347
|
reload_on_failure: @reload_on_failure,
|
344
348
|
resurrect_after: @resurrect_after,
|
345
|
-
retry_on_failure: 5,
|
346
349
|
logger: @transport_logger,
|
347
350
|
transport_options: {
|
348
351
|
headers: { 'Content-Type' => @content_type.to_s },
|
@@ -356,16 +359,7 @@ EOC
|
|
356
359
|
sniffer_class: @sniffer_class,
|
357
360
|
serializer_class: @serializer_class,
|
358
361
|
}), &adapter_conf)
|
359
|
-
|
360
|
-
|
361
|
-
begin
|
362
|
-
raise ConnectionFailure, "Can not reach Elasticsearch cluster (#{connection_options_description})!" unless es.ping
|
363
|
-
rescue *es.transport.host_unreachable_exceptions => e
|
364
|
-
raise ConnectionFailure, "Can not reach Elasticsearch cluster (#{connection_options_description})! #{e.message}"
|
365
|
-
end
|
366
|
-
|
367
|
-
log.info "Connection opened to Elasticsearch cluster => #{connection_options_description}"
|
368
|
-
es
|
362
|
+
Elasticsearch::Client.new transport: transport
|
369
363
|
end
|
370
364
|
end
|
371
365
|
|
@@ -632,7 +626,6 @@ EOC
|
|
632
626
|
# send_bulk given a specific bulk request, the original tag,
|
633
627
|
# chunk, and bulk_message_count
|
634
628
|
def send_bulk(data, tag, chunk, bulk_message_count, extracted_values, index)
|
635
|
-
retries = 0
|
636
629
|
begin
|
637
630
|
|
638
631
|
log.on_trace { log.trace "bulk request: #{data}" }
|
@@ -646,20 +639,11 @@ EOC
|
|
646
639
|
rescue RetryStreamError => e
|
647
640
|
emit_tag = @retry_tag ? @retry_tag : tag
|
648
641
|
router.emit_stream(emit_tag, e.retry_stream)
|
649
|
-
rescue
|
650
|
-
if retries < 2
|
651
|
-
retries += 1
|
652
|
-
@_es = nil
|
653
|
-
@_es_info = nil
|
654
|
-
log.warn "Could not push logs to Elasticsearch, resetting connection and trying again. #{e.message}"
|
655
|
-
sleep 2**retries
|
656
|
-
retry
|
657
|
-
end
|
658
|
-
raise ConnectionRetryFailure, "Could not push logs to Elasticsearch after #{retries} retries. #{e.message}"
|
659
|
-
rescue Exception
|
642
|
+
rescue => e
|
660
643
|
@_es = nil if @reconnect_on_error
|
661
644
|
@_es_info = nil if @reconnect_on_error
|
662
|
-
raise
|
645
|
+
# FIXME: identify unrecoverable errors and raise UnrecoverableRequestFailure instead
|
646
|
+
raise RecoverableRequestFailure, "could not push logs to Elasticsearch cluster (#{connection_options_description}): #{e.message}"
|
663
647
|
end
|
664
648
|
end
|
665
649
|
end
|
@@ -50,7 +50,6 @@ module Fluent::Plugin
|
|
50
50
|
reload_connections: @reload_connections,
|
51
51
|
reload_on_failure: @reload_on_failure,
|
52
52
|
resurrect_after: @resurrect_after,
|
53
|
-
retry_on_failure: 5,
|
54
53
|
logger: @transport_logger,
|
55
54
|
transport_options: {
|
56
55
|
headers: { 'Content-Type' => @content_type.to_s },
|
@@ -62,16 +61,7 @@ module Fluent::Plugin
|
|
62
61
|
password: @password
|
63
62
|
}
|
64
63
|
}), &adapter_conf)
|
65
|
-
|
66
|
-
|
67
|
-
begin
|
68
|
-
raise ConnectionFailure, "Can not reach Elasticsearch cluster (#{connection_options_description(host)})!" unless es.ping
|
69
|
-
rescue *es.transport.host_unreachable_exceptions => e
|
70
|
-
raise ConnectionFailure, "Can not reach Elasticsearch cluster (#{connection_options_description(host)})! #{e.message}"
|
71
|
-
end
|
72
|
-
|
73
|
-
log.info "Connection opened to Elasticsearch cluster => #{connection_options_description(host)}"
|
74
|
-
es
|
64
|
+
Elasticsearch::Client.new transport: transport
|
75
65
|
end
|
76
66
|
end
|
77
67
|
|
@@ -220,24 +210,15 @@ module Fluent::Plugin
|
|
220
210
|
end
|
221
211
|
|
222
212
|
def send_bulk(data, host, index)
|
223
|
-
retries = 0
|
224
213
|
begin
|
225
214
|
response = client(host).bulk body: data, index: index
|
226
215
|
if response['errors']
|
227
216
|
log.error "Could not push log to Elasticsearch: #{response}"
|
228
217
|
end
|
229
|
-
rescue
|
230
|
-
if retries < 2
|
231
|
-
retries += 1
|
232
|
-
@_es = nil
|
233
|
-
log.warn "Could not push logs to Elasticsearch, resetting connection and trying again. #{e.message}"
|
234
|
-
sleep 2**retries
|
235
|
-
retry
|
236
|
-
end
|
237
|
-
raise ConnectionRetryFailure, "Could not push logs to Elasticsearch after #{retries} retries. #{e.message}"
|
238
|
-
rescue Exception
|
218
|
+
rescue => e
|
239
219
|
@_es = nil if @reconnect_on_error
|
240
|
-
raise
|
220
|
+
# FIXME: identify unrecoverable errors and raise UnrecoverableRequestFailure instead
|
221
|
+
raise RecoverableRequestFailure, "could not push logs to Elasticsearch cluster (#{connection_options_description(host)}): #{e.message}"
|
241
222
|
end
|
242
223
|
end
|
243
224
|
|
@@ -59,10 +59,6 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
59
59
|
}
|
60
60
|
end
|
61
61
|
|
62
|
-
def stub_elastic_ping(url="http://localhost:9200")
|
63
|
-
stub_request(:head, url).to_return(:status => 200, :body => "", :headers => {})
|
64
|
-
end
|
65
|
-
|
66
62
|
def stub_elastic_info(url="http://localhost:9200/", version="6.4.2")
|
67
63
|
body ="{\"version\":{\"number\":\"#{version}\"}}"
|
68
64
|
stub_request(:get, url).to_return({:status => 200, :body => body, :headers => { 'Content-Type' => 'json' } })
|
@@ -333,6 +329,27 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
333
329
|
end
|
334
330
|
end
|
335
331
|
|
332
|
+
sub_test_case 'connection exceptions' do
|
333
|
+
test 'default connection exception' do
|
334
|
+
driver(Fluent::Config::Element.new(
|
335
|
+
'ROOT', '', {
|
336
|
+
'@type' => 'elasticsearch',
|
337
|
+
'host' => 'log.google.com',
|
338
|
+
'port' => 777,
|
339
|
+
'scheme' => 'https',
|
340
|
+
'path' => '/es/',
|
341
|
+
'user' => 'john',
|
342
|
+
'pasword' => 'doe',
|
343
|
+
}, [
|
344
|
+
Fluent::Config::Element.new('buffer', 'tag', {
|
345
|
+
}, [])
|
346
|
+
]
|
347
|
+
))
|
348
|
+
logs = driver.logs
|
349
|
+
assert_logs_include(logs, /you should specify 2 or more 'flush_thread_count'/, 1)
|
350
|
+
end
|
351
|
+
end
|
352
|
+
|
336
353
|
def test_template_already_present
|
337
354
|
config = %{
|
338
355
|
host logs.google.com
|
@@ -613,20 +630,13 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
613
630
|
}
|
614
631
|
|
615
632
|
connection_resets = 0
|
616
|
-
# connection start
|
617
|
-
stub_request(:head, "https://john:doe@logs.google.com:778/es//").with do |req|
|
618
|
-
connection_resets += 1
|
619
|
-
end
|
620
633
|
# check if template exists
|
621
634
|
stub_request(:get, "https://john:doe@logs.google.com:778/es//_template/logstash").with do |req|
|
622
|
-
|
623
|
-
|
624
|
-
# creation
|
625
|
-
stub_request(:put, "https://john:doe@logs.google.com:778/es//_template/logstash").with do |req|
|
626
|
-
raise Fluent::Plugin::ElasticsearchOutput::ConnectionFailure, "Test message"
|
635
|
+
connection_resets += 1
|
636
|
+
raise Faraday::ConnectionFailed, "Test message"
|
627
637
|
end
|
628
638
|
|
629
|
-
assert_raise(Fluent::
|
639
|
+
assert_raise(Fluent::ElasticsearchIndexTemplate::TemplateInstallationFailure) do
|
630
640
|
driver(config)
|
631
641
|
end
|
632
642
|
|
@@ -913,7 +923,6 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
913
923
|
|
914
924
|
def test_write_message_with_bad_chunk
|
915
925
|
driver.configure("target_index_key bad_value\n@log_level debug\n")
|
916
|
-
stub_elastic_ping
|
917
926
|
stub_elastic
|
918
927
|
driver.run(default_tag: 'test') do
|
919
928
|
driver.feed({'bad_value'=>"\255"})
|
@@ -924,7 +933,6 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
924
933
|
end
|
925
934
|
|
926
935
|
def test_writes_to_default_index
|
927
|
-
stub_elastic_ping
|
928
936
|
stub_elastic
|
929
937
|
driver.run(default_tag: 'test') do
|
930
938
|
driver.feed(sample_record)
|
@@ -933,7 +941,6 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
933
941
|
end
|
934
942
|
|
935
943
|
def test_writes_to_default_type
|
936
|
-
stub_elastic_ping
|
937
944
|
stub_elastic
|
938
945
|
driver.run(default_tag: 'test') do
|
939
946
|
driver.feed(sample_record)
|
@@ -943,7 +950,6 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
943
950
|
|
944
951
|
def test_writes_to_speficied_index
|
945
952
|
driver.configure("index_name myindex\n")
|
946
|
-
stub_elastic_ping
|
947
953
|
stub_elastic
|
948
954
|
driver.run(default_tag: 'test') do
|
949
955
|
driver.feed(sample_record)
|
@@ -954,7 +960,6 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
954
960
|
class IndexNamePlaceholdersTest < self
|
955
961
|
def test_writes_to_speficied_index_with_tag_placeholder
|
956
962
|
driver.configure("index_name myindex.${tag}\n")
|
957
|
-
stub_elastic_ping
|
958
963
|
stub_elastic
|
959
964
|
driver.run(default_tag: 'test') do
|
960
965
|
driver.feed(sample_record)
|
@@ -974,7 +979,6 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
974
979
|
}, [])
|
975
980
|
]
|
976
981
|
))
|
977
|
-
stub_elastic_ping
|
978
982
|
stub_elastic
|
979
983
|
time = Time.parse Date.today.iso8601
|
980
984
|
driver.run(default_tag: 'test') do
|
@@ -995,7 +999,6 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
995
999
|
time = Time.parse Date.today.iso8601
|
996
1000
|
pipeline_id = "mypipeline"
|
997
1001
|
logstash_index = "myindex.#{pipeline_id}"
|
998
|
-
stub_elastic_ping
|
999
1002
|
stub_elastic
|
1000
1003
|
driver.run(default_tag: 'test') do
|
1001
1004
|
driver.feed(time.to_i, sample_record.merge({"pipeline_id" => pipeline_id}))
|
@@ -1006,7 +1009,6 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
1006
1009
|
|
1007
1010
|
def test_writes_to_speficied_index_uppercase
|
1008
1011
|
driver.configure("index_name MyIndex\n")
|
1009
|
-
stub_elastic_ping
|
1010
1012
|
stub_elastic
|
1011
1013
|
driver.run(default_tag: 'test') do
|
1012
1014
|
driver.feed(sample_record)
|
@@ -1018,7 +1020,6 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
1018
1020
|
|
1019
1021
|
def test_writes_to_target_index_key
|
1020
1022
|
driver.configure("target_index_key @target_index\n")
|
1021
|
-
stub_elastic_ping
|
1022
1023
|
stub_elastic
|
1023
1024
|
record = sample_record.clone
|
1024
1025
|
driver.run(default_tag: 'test') do
|
@@ -1032,7 +1033,6 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
1032
1033
|
driver.configure("target_index_key @target_index
|
1033
1034
|
logstash_format true")
|
1034
1035
|
time = Time.parse Date.today.iso8601
|
1035
|
-
stub_elastic_ping
|
1036
1036
|
stub_elastic
|
1037
1037
|
driver.run(default_tag: 'test') do
|
1038
1038
|
driver.feed(time.to_i, sample_record.merge('@target_index' => 'local-override'))
|
@@ -1044,7 +1044,6 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
1044
1044
|
driver.configure("target_index_key @target_index
|
1045
1045
|
logstash_format true")
|
1046
1046
|
time = Time.parse Date.today.iso8601
|
1047
|
-
stub_elastic_ping
|
1048
1047
|
stub_elastic
|
1049
1048
|
driver.run(default_tag: 'test') do
|
1050
1049
|
driver.feed(time.to_i, sample_record.merge('@target_index' => 'local-override'))
|
@@ -1057,7 +1056,6 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
1057
1056
|
def test_writes_to_default_index_with_pipeline
|
1058
1057
|
pipeline = "fluentd"
|
1059
1058
|
driver.configure("pipeline #{pipeline}")
|
1060
|
-
stub_elastic_ping
|
1061
1059
|
stub_elastic
|
1062
1060
|
driver.run(default_tag: 'test') do
|
1063
1061
|
driver.feed(sample_record)
|
@@ -1067,7 +1065,6 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
1067
1065
|
|
1068
1066
|
def test_writes_to_target_index_key_fallack
|
1069
1067
|
driver.configure("target_index_key @target_index\n")
|
1070
|
-
stub_elastic_ping
|
1071
1068
|
stub_elastic
|
1072
1069
|
driver.run(default_tag: 'test') do
|
1073
1070
|
driver.feed(sample_record)
|
@@ -1080,7 +1077,6 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
1080
1077
|
logstash_format true")
|
1081
1078
|
time = Time.parse Date.today.iso8601
|
1082
1079
|
logstash_index = "logstash-#{time.getutc.strftime("%Y.%m.%d")}"
|
1083
|
-
stub_elastic_ping
|
1084
1080
|
stub_elastic
|
1085
1081
|
driver.run(default_tag: 'test') do
|
1086
1082
|
driver.feed(time.to_i, sample_record)
|
@@ -1093,7 +1089,6 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
1093
1089
|
)
|
1094
1090
|
def test_writes_to_speficied_type(data)
|
1095
1091
|
driver('', data["es_version"]).configure("type_name mytype\n")
|
1096
|
-
stub_elastic_ping
|
1097
1092
|
stub_elastic
|
1098
1093
|
driver.run(default_tag: 'test') do
|
1099
1094
|
driver.feed(sample_record)
|
@@ -1106,7 +1101,6 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
1106
1101
|
)
|
1107
1102
|
def test_writes_to_speficied_type_with_placeholders(data)
|
1108
1103
|
driver('', data["es_version"]).configure("type_name mytype.${tag}\n")
|
1109
|
-
stub_elastic_ping
|
1110
1104
|
stub_elastic
|
1111
1105
|
driver.run(default_tag: 'test') do
|
1112
1106
|
driver.feed(sample_record)
|
@@ -1121,7 +1115,6 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
1121
1115
|
)
|
1122
1116
|
def test_writes_to_target_type_key(data)
|
1123
1117
|
driver('', data["es_version"]).configure("target_type_key @target_type\n")
|
1124
|
-
stub_elastic_ping
|
1125
1118
|
stub_elastic
|
1126
1119
|
record = sample_record.clone
|
1127
1120
|
driver.run(default_tag: 'test') do
|
@@ -1133,7 +1126,6 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
1133
1126
|
|
1134
1127
|
def test_writes_to_target_type_key_fallack_to_default
|
1135
1128
|
driver.configure("target_type_key @target_type\n")
|
1136
|
-
stub_elastic_ping
|
1137
1129
|
stub_elastic
|
1138
1130
|
driver.run(default_tag: 'test') do
|
1139
1131
|
driver.feed(sample_record)
|
@@ -1144,7 +1136,6 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
1144
1136
|
def test_writes_to_target_type_key_fallack_to_type_name
|
1145
1137
|
driver.configure("target_type_key @target_type
|
1146
1138
|
type_name mytype")
|
1147
|
-
stub_elastic_ping
|
1148
1139
|
stub_elastic
|
1149
1140
|
driver.run(default_tag: 'test') do
|
1150
1141
|
driver.feed(sample_record)
|
@@ -1159,7 +1150,6 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
1159
1150
|
)
|
1160
1151
|
def test_writes_to_target_type_key_nested(data)
|
1161
1152
|
driver('', data["es_version"]).configure("target_type_key kubernetes.labels.log_type\n")
|
1162
|
-
stub_elastic_ping
|
1163
1153
|
stub_elastic
|
1164
1154
|
driver.run(default_tag: 'test') do
|
1165
1155
|
driver.feed(sample_record.merge('kubernetes' => {
|
@@ -1174,7 +1164,6 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
1174
1164
|
|
1175
1165
|
def test_writes_to_target_type_key_fallack_to_default_nested
|
1176
1166
|
driver.configure("target_type_key kubernetes.labels.log_type\n")
|
1177
|
-
stub_elastic_ping
|
1178
1167
|
stub_elastic
|
1179
1168
|
driver.run(default_tag: 'test') do
|
1180
1169
|
driver.feed(sample_record.merge('kubernetes' => {
|
@@ -1188,7 +1177,6 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
1188
1177
|
|
1189
1178
|
def test_writes_to_speficied_host
|
1190
1179
|
driver.configure("host 192.168.33.50\n")
|
1191
|
-
stub_elastic_ping("http://192.168.33.50:9200")
|
1192
1180
|
elastic_request = stub_elastic("http://192.168.33.50:9200/_bulk")
|
1193
1181
|
driver.run(default_tag: 'test') do
|
1194
1182
|
driver.feed(sample_record)
|
@@ -1198,7 +1186,6 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
1198
1186
|
|
1199
1187
|
def test_writes_to_speficied_port
|
1200
1188
|
driver.configure("port 9201\n")
|
1201
|
-
stub_elastic_ping("http://localhost:9201")
|
1202
1189
|
elastic_request = stub_elastic("http://localhost:9201/_bulk")
|
1203
1190
|
driver.run(default_tag: 'test') do
|
1204
1191
|
driver.feed(sample_record)
|
@@ -1214,7 +1201,6 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
1214
1201
|
|
1215
1202
|
hosts.each do |host_info|
|
1216
1203
|
host, port = host_info
|
1217
|
-
stub_elastic_ping("http://#{host}:#{port}")
|
1218
1204
|
stub_elastic_with_store_index_command_counts("http://#{host}:#{port}/_bulk")
|
1219
1205
|
end
|
1220
1206
|
|
@@ -1251,7 +1237,6 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
1251
1237
|
{"age" => "30", "height" => "2ft"}
|
1252
1238
|
]}
|
1253
1239
|
|
1254
|
-
stub_elastic_ping
|
1255
1240
|
stub_elastic
|
1256
1241
|
driver.run(default_tag: 'test') do
|
1257
1242
|
driver.feed(original_hash)
|
@@ -1265,7 +1250,6 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
1265
1250
|
original_hash = {"foo" => {"bar" => "baz"}}
|
1266
1251
|
expected_output = {"foo" => {"bar" => "baz"}}
|
1267
1252
|
|
1268
|
-
stub_elastic_ping
|
1269
1253
|
stub_elastic
|
1270
1254
|
driver.run(default_tag: 'test') do
|
1271
1255
|
driver.feed(original_hash)
|
@@ -1274,7 +1258,6 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
1274
1258
|
end
|
1275
1259
|
|
1276
1260
|
def test_makes_bulk_request
|
1277
|
-
stub_elastic_ping
|
1278
1261
|
stub_elastic
|
1279
1262
|
driver.run(default_tag: 'test') do
|
1280
1263
|
driver.feed(sample_record)
|
@@ -1284,7 +1267,6 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
1284
1267
|
end
|
1285
1268
|
|
1286
1269
|
def test_all_records_are_preserved_in_bulk
|
1287
|
-
stub_elastic_ping
|
1288
1270
|
stub_elastic
|
1289
1271
|
driver.run(default_tag: 'test') do
|
1290
1272
|
driver.feed(sample_record)
|
@@ -1300,7 +1282,6 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
1300
1282
|
# This is 1 second past midnight in BST, so the UTC index should be the day before
|
1301
1283
|
dt = DateTime.new(2015, 6, 1, 0, 0, 1, "+01:00")
|
1302
1284
|
logstash_index = "logstash-2015.05.31"
|
1303
|
-
stub_elastic_ping
|
1304
1285
|
stub_elastic
|
1305
1286
|
driver.run(default_tag: 'test') do
|
1306
1287
|
driver.feed(dt.to_time.to_i, sample_record)
|
@@ -1315,7 +1296,6 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
1315
1296
|
# ingestion time
|
1316
1297
|
time = Date.today.to_time
|
1317
1298
|
index = "logstash-#{time.strftime("%Y.%m.%d")}"
|
1318
|
-
stub_elastic_ping
|
1319
1299
|
stub_elastic
|
1320
1300
|
driver.run(default_tag: 'test') do
|
1321
1301
|
driver.feed(time.to_i, sample_record)
|
@@ -1328,7 +1308,6 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
1328
1308
|
logstash_prefix myprefix")
|
1329
1309
|
time = Time.parse Date.today.iso8601
|
1330
1310
|
logstash_index = "myprefix-#{time.getutc.strftime("%Y.%m.%d")}"
|
1331
|
-
stub_elastic_ping
|
1332
1311
|
stub_elastic
|
1333
1312
|
driver.run(default_tag: 'test') do
|
1334
1313
|
driver.feed(time.to_i, sample_record)
|
@@ -1343,7 +1322,6 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
1343
1322
|
logstash_prefix myprefix")
|
1344
1323
|
time = Time.parse Date.today.iso8601
|
1345
1324
|
logstash_index = "myprefix#{separator}#{time.getutc.strftime("%Y.%m.%d")}"
|
1346
|
-
stub_elastic_ping
|
1347
1325
|
stub_elastic
|
1348
1326
|
driver.run(default_tag: 'test') do
|
1349
1327
|
driver.feed(time.to_i, sample_record)
|
@@ -1357,7 +1335,6 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
1357
1335
|
logstash_prefix myprefix-${tag}")
|
1358
1336
|
time = Time.parse Date.today.iso8601
|
1359
1337
|
logstash_index = "myprefix-test-#{time.getutc.strftime("%Y.%m.%d")}"
|
1360
|
-
stub_elastic_ping
|
1361
1338
|
stub_elastic
|
1362
1339
|
driver.run(default_tag: 'test') do
|
1363
1340
|
driver.feed(time.to_i, sample_record)
|
@@ -1380,7 +1357,6 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
1380
1357
|
))
|
1381
1358
|
time = Time.parse Date.today.iso8601
|
1382
1359
|
logstash_index = "myprefix-#{time.getutc.strftime("%H")}-#{time.getutc.strftime("%Y.%m.%d")}"
|
1383
|
-
stub_elastic_ping
|
1384
1360
|
stub_elastic
|
1385
1361
|
driver.run(default_tag: 'test') do
|
1386
1362
|
driver.feed(time.to_i, sample_record)
|
@@ -1401,7 +1377,6 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
1401
1377
|
time = Time.parse Date.today.iso8601
|
1402
1378
|
pipeline_id = "mypipeline"
|
1403
1379
|
logstash_index = "myprefix-#{pipeline_id}-#{time.getutc.strftime("%Y.%m.%d")}"
|
1404
|
-
stub_elastic_ping
|
1405
1380
|
stub_elastic
|
1406
1381
|
driver.run(default_tag: 'test') do
|
1407
1382
|
driver.feed(time.to_i, sample_record.merge({"pipeline_id" => pipeline_id}))
|
@@ -1415,7 +1390,6 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
1415
1390
|
logstash_prefix MyPrefix")
|
1416
1391
|
time = Time.parse Date.today.iso8601
|
1417
1392
|
logstash_index = "myprefix-#{time.getutc.strftime("%Y.%m.%d")}"
|
1418
|
-
stub_elastic_ping
|
1419
1393
|
stub_elastic
|
1420
1394
|
driver.run(default_tag: 'test') do
|
1421
1395
|
driver.feed(time.to_i, sample_record)
|
@@ -1430,7 +1404,6 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
1430
1404
|
logstash_dateformat %Y.%m")
|
1431
1405
|
time = Time.parse Date.today.iso8601
|
1432
1406
|
logstash_index = "logstash-#{time.getutc.strftime("%Y.%m")}"
|
1433
|
-
stub_elastic_ping
|
1434
1407
|
stub_elastic
|
1435
1408
|
driver.run(default_tag: 'test') do
|
1436
1409
|
driver.feed(time.to_i, sample_record)
|
@@ -1444,7 +1417,6 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
1444
1417
|
logstash_dateformat %Y.%m")
|
1445
1418
|
time = Time.parse Date.today.iso8601
|
1446
1419
|
logstash_index = "myprefix-#{time.getutc.strftime("%Y.%m")}"
|
1447
|
-
stub_elastic_ping
|
1448
1420
|
stub_elastic
|
1449
1421
|
driver.run(default_tag: 'test') do
|
1450
1422
|
driver.feed(time.to_i, sample_record)
|
@@ -1471,7 +1443,6 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
1471
1443
|
end
|
1472
1444
|
|
1473
1445
|
def test_doesnt_add_logstash_timestamp_by_default
|
1474
|
-
stub_elastic_ping
|
1475
1446
|
stub_elastic
|
1476
1447
|
driver.run(default_tag: 'test') do
|
1477
1448
|
driver.feed(sample_record)
|
@@ -1481,7 +1452,6 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
1481
1452
|
|
1482
1453
|
def test_adds_timestamp_when_logstash
|
1483
1454
|
driver.configure("logstash_format true\n")
|
1484
|
-
stub_elastic_ping
|
1485
1455
|
stub_elastic
|
1486
1456
|
ts = DateTime.now
|
1487
1457
|
time = Fluent::EventTime.from_time(ts.to_time)
|
@@ -1494,7 +1464,6 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
1494
1464
|
|
1495
1465
|
def test_adds_timestamp_when_include_timestamp
|
1496
1466
|
driver.configure("include_timestamp true\n")
|
1497
|
-
stub_elastic_ping
|
1498
1467
|
stub_elastic
|
1499
1468
|
ts = DateTime.now
|
1500
1469
|
time = Fluent::EventTime.from_time(ts.to_time)
|
@@ -1507,7 +1476,6 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
1507
1476
|
|
1508
1477
|
def test_uses_custom_timestamp_when_included_in_record
|
1509
1478
|
driver.configure("logstash_format true\n")
|
1510
|
-
stub_elastic_ping
|
1511
1479
|
stub_elastic
|
1512
1480
|
ts = DateTime.new(2001,2,3).iso8601
|
1513
1481
|
driver.run(default_tag: 'test') do
|
@@ -1519,7 +1487,6 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
1519
1487
|
|
1520
1488
|
def test_uses_custom_timestamp_when_included_in_record_without_logstash
|
1521
1489
|
driver.configure("include_timestamp true\n")
|
1522
|
-
stub_elastic_ping
|
1523
1490
|
stub_elastic
|
1524
1491
|
ts = DateTime.new(2001,2,3).iso8601
|
1525
1492
|
driver.run(default_tag: 'test') do
|
@@ -1532,7 +1499,6 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
1532
1499
|
def test_uses_custom_time_key
|
1533
1500
|
driver.configure("logstash_format true
|
1534
1501
|
time_key vtm\n")
|
1535
|
-
stub_elastic_ping
|
1536
1502
|
stub_elastic
|
1537
1503
|
ts = DateTime.new(2001,2,3).iso8601(9)
|
1538
1504
|
driver.run(default_tag: 'test') do
|
@@ -1546,7 +1512,6 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
1546
1512
|
driver.configure("logstash_format true
|
1547
1513
|
time_key_format %Y-%m-%d %H:%M:%S.%N%z
|
1548
1514
|
time_key vtm\n")
|
1549
|
-
stub_elastic_ping
|
1550
1515
|
stub_elastic
|
1551
1516
|
ts = "2001-02-03 13:14:01.673+02:00"
|
1552
1517
|
driver.run(default_tag: 'test') do
|
@@ -1562,7 +1527,6 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
1562
1527
|
index_name test
|
1563
1528
|
time_key_format %Y-%m-%d %H:%M:%S.%N%z
|
1564
1529
|
time_key vtm\n")
|
1565
|
-
stub_elastic_ping
|
1566
1530
|
stub_elastic
|
1567
1531
|
ts = "2001-02-03 13:14:01.673+02:00"
|
1568
1532
|
driver.run(default_tag: 'test') do
|
@@ -1577,7 +1541,6 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
1577
1541
|
driver.configure("logstash_format true
|
1578
1542
|
time_key vtm
|
1579
1543
|
time_key_exclude_timestamp true\n")
|
1580
|
-
stub_elastic_ping
|
1581
1544
|
stub_elastic
|
1582
1545
|
ts = DateTime.new(2001,2,3).iso8601
|
1583
1546
|
driver.run(default_tag: 'test') do
|
@@ -1589,7 +1552,6 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
1589
1552
|
def test_uses_custom_time_key_format
|
1590
1553
|
driver.configure("logstash_format true
|
1591
1554
|
time_key_format %Y-%m-%dT%H:%M:%S.%N%z\n")
|
1592
|
-
stub_elastic_ping
|
1593
1555
|
stub_elastic
|
1594
1556
|
ts = "2001-02-03T13:14:01.673+02:00"
|
1595
1557
|
driver.run(default_tag: 'test') do
|
@@ -1604,7 +1566,6 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
1604
1566
|
driver.configure("include_timestamp true
|
1605
1567
|
index_name test
|
1606
1568
|
time_key_format %Y-%m-%dT%H:%M:%S.%N%z\n")
|
1607
|
-
stub_elastic_ping
|
1608
1569
|
stub_elastic
|
1609
1570
|
ts = "2001-02-03T13:14:01.673+02:00"
|
1610
1571
|
driver.run(default_tag: 'test') do
|
@@ -1622,7 +1583,6 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
1622
1583
|
tag_for_error = 'Fluent::ElasticsearchOutput::TimeParser.error' if tag_for_error.nil?
|
1623
1584
|
driver.configure("logstash_format true
|
1624
1585
|
time_key_format %Y-%m-%dT%H:%M:%S.%N%z\n#{tag_config}\n")
|
1625
|
-
stub_elastic_ping
|
1626
1586
|
stub_elastic
|
1627
1587
|
|
1628
1588
|
ts = "2001/02/03 13:14:01,673+02:00"
|
@@ -1643,7 +1603,6 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
1643
1603
|
def test_uses_custom_time_key_format_obscure_format
|
1644
1604
|
driver.configure("logstash_format true
|
1645
1605
|
time_key_format %a %b %d %H:%M:%S %Z %Y\n")
|
1646
|
-
stub_elastic_ping
|
1647
1606
|
stub_elastic
|
1648
1607
|
ts = "Thu Nov 29 14:33:20 GMT 2001"
|
1649
1608
|
driver.run(default_tag: 'test') do
|
@@ -1656,7 +1615,6 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
1656
1615
|
|
1657
1616
|
def test_uses_nanosecond_precision_by_default
|
1658
1617
|
driver.configure("logstash_format true\n")
|
1659
|
-
stub_elastic_ping
|
1660
1618
|
stub_elastic
|
1661
1619
|
time = Fluent::EventTime.new(Time.now.to_i, 123456789)
|
1662
1620
|
driver.run(default_tag: 'test') do
|
@@ -1669,7 +1627,6 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
1669
1627
|
def test_uses_subsecond_precision_when_configured
|
1670
1628
|
driver.configure("logstash_format true
|
1671
1629
|
time_precision 3\n")
|
1672
|
-
stub_elastic_ping
|
1673
1630
|
stub_elastic
|
1674
1631
|
time = Fluent::EventTime.new(Time.now.to_i, 123456789)
|
1675
1632
|
driver.run(default_tag: 'test') do
|
@@ -1680,7 +1637,6 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
1680
1637
|
end
|
1681
1638
|
|
1682
1639
|
def test_doesnt_add_tag_key_by_default
|
1683
|
-
stub_elastic_ping
|
1684
1640
|
stub_elastic
|
1685
1641
|
driver.run(default_tag: 'test') do
|
1686
1642
|
driver.feed(sample_record)
|
@@ -1690,7 +1646,6 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
1690
1646
|
|
1691
1647
|
def test_adds_tag_key_when_configured
|
1692
1648
|
driver.configure("include_tag_key true\n")
|
1693
|
-
stub_elastic_ping
|
1694
1649
|
stub_elastic
|
1695
1650
|
driver.run(default_tag: 'mytag') do
|
1696
1651
|
driver.feed(sample_record)
|
@@ -1701,7 +1656,6 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
1701
1656
|
|
1702
1657
|
def test_adds_id_key_when_configured
|
1703
1658
|
driver.configure("id_key request_id\n")
|
1704
|
-
stub_elastic_ping
|
1705
1659
|
stub_elastic
|
1706
1660
|
driver.run(default_tag: 'test') do
|
1707
1661
|
driver.feed(sample_record)
|
@@ -1712,7 +1666,6 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
1712
1666
|
class NestedIdKeyTest < self
|
1713
1667
|
def test_adds_nested_id_key_with_dot
|
1714
1668
|
driver.configure("id_key nested.request_id\n")
|
1715
|
-
stub_elastic_ping
|
1716
1669
|
stub_elastic
|
1717
1670
|
driver.run(default_tag: 'test') do
|
1718
1671
|
driver.feed(nested_sample_record)
|
@@ -1722,7 +1675,6 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
1722
1675
|
|
1723
1676
|
def test_adds_nested_id_key_with_dollar_dot
|
1724
1677
|
driver.configure("id_key $.nested.request_id\n")
|
1725
|
-
stub_elastic_ping
|
1726
1678
|
stub_elastic
|
1727
1679
|
driver.run(default_tag: 'test') do
|
1728
1680
|
driver.feed(nested_sample_record)
|
@@ -1732,7 +1684,6 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
1732
1684
|
|
1733
1685
|
def test_adds_nested_id_key_with_bracket
|
1734
1686
|
driver.configure("id_key $['nested']['request_id']\n")
|
1735
|
-
stub_elastic_ping
|
1736
1687
|
stub_elastic
|
1737
1688
|
driver.run(default_tag: 'test') do
|
1738
1689
|
driver.feed(nested_sample_record)
|
@@ -1743,7 +1694,6 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
1743
1694
|
|
1744
1695
|
def test_doesnt_add_id_key_if_missing_when_configured
|
1745
1696
|
driver.configure("id_key another_request_id\n")
|
1746
|
-
stub_elastic_ping
|
1747
1697
|
stub_elastic
|
1748
1698
|
driver.run(default_tag: 'test') do
|
1749
1699
|
driver.feed(sample_record)
|
@@ -1752,7 +1702,6 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
1752
1702
|
end
|
1753
1703
|
|
1754
1704
|
def test_adds_id_key_when_not_configured
|
1755
|
-
stub_elastic_ping
|
1756
1705
|
stub_elastic
|
1757
1706
|
driver.run(default_tag: 'test') do
|
1758
1707
|
driver.feed(sample_record)
|
@@ -1762,7 +1711,6 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
1762
1711
|
|
1763
1712
|
def test_adds_parent_key_when_configured
|
1764
1713
|
driver.configure("parent_key parent_id\n")
|
1765
|
-
stub_elastic_ping
|
1766
1714
|
stub_elastic
|
1767
1715
|
driver.run(default_tag: 'test') do
|
1768
1716
|
driver.feed(sample_record)
|
@@ -1773,7 +1721,6 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
1773
1721
|
class NestedParentKeyTest < self
|
1774
1722
|
def test_adds_nested_parent_key_with_dot
|
1775
1723
|
driver.configure("parent_key nested.parent_id\n")
|
1776
|
-
stub_elastic_ping
|
1777
1724
|
stub_elastic
|
1778
1725
|
driver.run(default_tag: 'test') do
|
1779
1726
|
driver.feed(nested_sample_record)
|
@@ -1783,7 +1730,6 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
1783
1730
|
|
1784
1731
|
def test_adds_nested_parent_key_with_dollar_dot
|
1785
1732
|
driver.configure("parent_key $.nested.parent_id\n")
|
1786
|
-
stub_elastic_ping
|
1787
1733
|
stub_elastic
|
1788
1734
|
driver.run(default_tag: 'test') do
|
1789
1735
|
driver.feed(nested_sample_record)
|
@@ -1793,7 +1739,6 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
1793
1739
|
|
1794
1740
|
def test_adds_nested_parent_key_with_bracket
|
1795
1741
|
driver.configure("parent_key $['nested']['parent_id']\n")
|
1796
|
-
stub_elastic_ping
|
1797
1742
|
stub_elastic
|
1798
1743
|
driver.run(default_tag: 'test') do
|
1799
1744
|
driver.feed(nested_sample_record)
|
@@ -1804,7 +1749,6 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
1804
1749
|
|
1805
1750
|
def test_doesnt_add_parent_key_if_missing_when_configured
|
1806
1751
|
driver.configure("parent_key another_parent_id\n")
|
1807
|
-
stub_elastic_ping
|
1808
1752
|
stub_elastic
|
1809
1753
|
driver.run(default_tag: 'test') do
|
1810
1754
|
driver.feed(sample_record)
|
@@ -1813,7 +1757,6 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
1813
1757
|
end
|
1814
1758
|
|
1815
1759
|
def test_adds_parent_key_when_not_configured
|
1816
|
-
stub_elastic_ping
|
1817
1760
|
stub_elastic
|
1818
1761
|
driver.run(default_tag: 'test') do
|
1819
1762
|
driver.feed(sample_record)
|
@@ -1823,7 +1766,6 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
1823
1766
|
|
1824
1767
|
def test_adds_routing_key_when_configured
|
1825
1768
|
driver.configure("routing_key routing_id\n")
|
1826
|
-
stub_elastic_ping
|
1827
1769
|
stub_elastic
|
1828
1770
|
driver.run(default_tag: 'test') do
|
1829
1771
|
driver.feed(sample_record)
|
@@ -1834,7 +1776,6 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
1834
1776
|
class NestedRoutingKeyTest < self
|
1835
1777
|
def test_adds_nested_routing_key_with_dot
|
1836
1778
|
driver.configure("routing_key nested.routing_id\n")
|
1837
|
-
stub_elastic_ping
|
1838
1779
|
stub_elastic
|
1839
1780
|
driver.run(default_tag: 'test') do
|
1840
1781
|
driver.feed(nested_sample_record)
|
@@ -1844,7 +1785,6 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
1844
1785
|
|
1845
1786
|
def test_adds_nested_routing_key_with_dollar_dot
|
1846
1787
|
driver.configure("routing_key $.nested.routing_id\n")
|
1847
|
-
stub_elastic_ping
|
1848
1788
|
stub_elastic
|
1849
1789
|
driver.run(default_tag: 'test') do
|
1850
1790
|
driver.feed(nested_sample_record)
|
@@ -1854,7 +1794,6 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
1854
1794
|
|
1855
1795
|
def test_adds_nested_routing_key_with_bracket
|
1856
1796
|
driver.configure("routing_key $['nested']['routing_id']\n")
|
1857
|
-
stub_elastic_ping
|
1858
1797
|
stub_elastic
|
1859
1798
|
driver.run(default_tag: 'test') do
|
1860
1799
|
driver.feed(nested_sample_record)
|
@@ -1865,7 +1804,6 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
1865
1804
|
|
1866
1805
|
def test_doesnt_add_routing_key_if_missing_when_configured
|
1867
1806
|
driver.configure("routing_key another_routing_id\n")
|
1868
|
-
stub_elastic_ping
|
1869
1807
|
stub_elastic
|
1870
1808
|
driver.run(default_tag: 'test') do
|
1871
1809
|
driver.feed(sample_record)
|
@@ -1874,7 +1812,6 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
1874
1812
|
end
|
1875
1813
|
|
1876
1814
|
def test_adds_routing_key_when_not_configured
|
1877
|
-
stub_elastic_ping
|
1878
1815
|
stub_elastic
|
1879
1816
|
driver.run(default_tag: 'test') do
|
1880
1817
|
driver.feed(sample_record)
|
@@ -1884,7 +1821,6 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
1884
1821
|
|
1885
1822
|
def test_remove_one_key
|
1886
1823
|
driver.configure("remove_keys key1\n")
|
1887
|
-
stub_elastic_ping
|
1888
1824
|
stub_elastic
|
1889
1825
|
driver.run(default_tag: 'test') do
|
1890
1826
|
driver.feed(sample_record.merge('key1' => 'v1', 'key2' => 'v2'))
|
@@ -1895,7 +1831,6 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
1895
1831
|
|
1896
1832
|
def test_remove_multi_keys
|
1897
1833
|
driver.configure("remove_keys key1, key2\n")
|
1898
|
-
stub_elastic_ping
|
1899
1834
|
stub_elastic
|
1900
1835
|
driver.run(default_tag: 'test') do
|
1901
1836
|
driver.feed(sample_record.merge('key1' => 'v1', 'key2' => 'v2'))
|
@@ -1905,17 +1840,16 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
1905
1840
|
end
|
1906
1841
|
|
1907
1842
|
def test_request_error
|
1908
|
-
stub_elastic_ping
|
1909
1843
|
stub_elastic_unavailable
|
1910
|
-
assert_raise(
|
1911
|
-
driver.run(default_tag: 'test') do
|
1844
|
+
assert_raise(Fluent::Plugin::ElasticsearchOutput::RecoverableRequestFailure) {
|
1845
|
+
driver.run(default_tag: 'test', shutdown: false) do
|
1912
1846
|
driver.feed(sample_record)
|
1913
1847
|
end
|
1914
1848
|
}
|
1915
1849
|
end
|
1916
1850
|
|
1917
1851
|
def test_request_forever
|
1918
|
-
|
1852
|
+
omit("retry_forever test is unstable.") if ENV["CI"]
|
1919
1853
|
stub_elastic
|
1920
1854
|
driver.configure(Fluent::Config::Element.new(
|
1921
1855
|
'ROOT', '', {
|
@@ -1927,42 +1861,40 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
1927
1861
|
]
|
1928
1862
|
))
|
1929
1863
|
stub_elastic_timeout
|
1930
|
-
|
1931
|
-
driver.
|
1932
|
-
|
1864
|
+
assert_raise(Timeout::Error) {
|
1865
|
+
driver.run(default_tag: 'test', timeout: 10, force_flush_retry: true) do
|
1866
|
+
driver.feed(sample_record)
|
1867
|
+
end
|
1868
|
+
}
|
1933
1869
|
end
|
1934
1870
|
|
1935
|
-
def
|
1871
|
+
def test_connection_failed
|
1936
1872
|
connection_resets = 0
|
1937
1873
|
|
1938
|
-
stub_elastic_ping(url="http://localhost:9200").with do |req|
|
1939
|
-
connection_resets += 1
|
1940
|
-
end
|
1941
|
-
|
1942
1874
|
stub_request(:post, "http://localhost:9200/_bulk").with do |req|
|
1875
|
+
connection_resets += 1
|
1943
1876
|
raise Faraday::ConnectionFailed, "Test message"
|
1944
1877
|
end
|
1945
1878
|
|
1946
|
-
|
1947
|
-
driver.
|
1948
|
-
|
1949
|
-
|
1879
|
+
assert_raise(Fluent::Plugin::ElasticsearchOutput::RecoverableRequestFailure) {
|
1880
|
+
driver.run(default_tag: 'test', shutdown: false) do
|
1881
|
+
driver.feed(sample_record)
|
1882
|
+
end
|
1883
|
+
}
|
1884
|
+
assert_equal(connection_resets, 1)
|
1950
1885
|
end
|
1951
1886
|
|
1952
1887
|
def test_reconnect_on_error_enabled
|
1953
1888
|
connection_resets = 0
|
1954
1889
|
|
1955
|
-
stub_elastic_ping(url="http://localhost:9200").with do |req|
|
1956
|
-
connection_resets += 1
|
1957
|
-
end
|
1958
|
-
|
1959
1890
|
stub_request(:post, "http://localhost:9200/_bulk").with do |req|
|
1891
|
+
connection_resets += 1
|
1960
1892
|
raise ZeroDivisionError, "any not host_unreachable_exceptions exception"
|
1961
1893
|
end
|
1962
1894
|
|
1963
1895
|
driver.configure("reconnect_on_error true\n")
|
1964
1896
|
|
1965
|
-
assert_raise(
|
1897
|
+
assert_raise(Fluent::Plugin::ElasticsearchOutput::RecoverableRequestFailure) {
|
1966
1898
|
driver.run(default_tag: 'test', shutdown: false) do
|
1967
1899
|
driver.feed(sample_record)
|
1968
1900
|
end
|
@@ -1981,17 +1913,14 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
1981
1913
|
def test_reconnect_on_error_disabled
|
1982
1914
|
connection_resets = 0
|
1983
1915
|
|
1984
|
-
stub_elastic_ping(url="http://localhost:9200").with do |req|
|
1985
|
-
connection_resets += 1
|
1986
|
-
end
|
1987
|
-
|
1988
1916
|
stub_request(:post, "http://localhost:9200/_bulk").with do |req|
|
1917
|
+
connection_resets += 1
|
1989
1918
|
raise ZeroDivisionError, "any not host_unreachable_exceptions exception"
|
1990
1919
|
end
|
1991
1920
|
|
1992
1921
|
driver.configure("reconnect_on_error false\n")
|
1993
1922
|
|
1994
|
-
assert_raise(
|
1923
|
+
assert_raise(Fluent::Plugin::ElasticsearchOutput::RecoverableRequestFailure) {
|
1995
1924
|
driver.run(default_tag: 'test', shutdown: false) do
|
1996
1925
|
driver.feed(sample_record)
|
1997
1926
|
end
|
@@ -2007,7 +1936,6 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
2007
1936
|
|
2008
1937
|
def test_bulk_error_retags_when_configured
|
2009
1938
|
driver.configure("retry_tag retry\n")
|
2010
|
-
stub_elastic_ping
|
2011
1939
|
stub_request(:post, 'http://localhost:9200/_bulk')
|
2012
1940
|
.to_return(lambda do |req|
|
2013
1941
|
{ :status => 200,
|
@@ -2042,7 +1970,6 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
2042
1970
|
|
2043
1971
|
def test_create_should_write_records_with_ids_and_skip_those_without
|
2044
1972
|
driver.configure("write_operation create\nid_key my_id\n@log_level debug")
|
2045
|
-
stub_elastic_ping
|
2046
1973
|
stub_request(:post, 'http://localhost:9200/_bulk')
|
2047
1974
|
.to_return(lambda do |req|
|
2048
1975
|
{ :status => 200,
|
@@ -2092,7 +2019,6 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
2092
2019
|
|
2093
2020
|
def test_create_should_write_records_with_ids_and_emit_those_without
|
2094
2021
|
driver.configure("write_operation create\nid_key my_id\nemit_error_for_missing_id true\n@log_level debug")
|
2095
|
-
stub_elastic_ping
|
2096
2022
|
stub_request(:post, 'http://localhost:9200/_bulk')
|
2097
2023
|
.to_return(lambda do |req|
|
2098
2024
|
{ :status => 200,
|
@@ -2141,7 +2067,6 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
2141
2067
|
end
|
2142
2068
|
|
2143
2069
|
def test_bulk_error
|
2144
|
-
stub_elastic_ping
|
2145
2070
|
stub_request(:post, 'http://localhost:9200/_bulk')
|
2146
2071
|
.to_return(lambda do |req|
|
2147
2072
|
{ :status => 200,
|
@@ -2210,7 +2135,6 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
2210
2135
|
|
2211
2136
|
def test_update_should_not_write_if_theres_no_id
|
2212
2137
|
driver.configure("write_operation update\n")
|
2213
|
-
stub_elastic_ping
|
2214
2138
|
stub_elastic
|
2215
2139
|
driver.run(default_tag: 'test') do
|
2216
2140
|
driver.feed(sample_record)
|
@@ -2220,7 +2144,6 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
2220
2144
|
|
2221
2145
|
def test_upsert_should_not_write_if_theres_no_id
|
2222
2146
|
driver.configure("write_operation upsert\n")
|
2223
|
-
stub_elastic_ping
|
2224
2147
|
stub_elastic
|
2225
2148
|
driver.run(default_tag: 'test') do
|
2226
2149
|
driver.feed(sample_record)
|
@@ -2230,7 +2153,6 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
2230
2153
|
|
2231
2154
|
def test_create_should_not_write_if_theres_no_id
|
2232
2155
|
driver.configure("write_operation create\n")
|
2233
|
-
stub_elastic_ping
|
2234
2156
|
stub_elastic
|
2235
2157
|
driver.run(default_tag: 'test') do
|
2236
2158
|
driver.feed(sample_record)
|
@@ -2241,7 +2163,6 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
2241
2163
|
def test_update_should_write_update_op_and_doc_as_upsert_is_false
|
2242
2164
|
driver.configure("write_operation update
|
2243
2165
|
id_key request_id")
|
2244
|
-
stub_elastic_ping
|
2245
2166
|
stub_elastic
|
2246
2167
|
driver.run(default_tag: 'test') do
|
2247
2168
|
driver.feed(sample_record)
|
@@ -2255,7 +2176,6 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
2255
2176
|
driver.configure("write_operation update
|
2256
2177
|
id_key request_id
|
2257
2178
|
remove_keys_on_update parent_id")
|
2258
|
-
stub_elastic_ping
|
2259
2179
|
stub_elastic
|
2260
2180
|
driver.run(default_tag: 'test') do
|
2261
2181
|
driver.feed(sample_record)
|
@@ -2267,7 +2187,6 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
2267
2187
|
def test_upsert_should_write_update_op_and_doc_as_upsert_is_true
|
2268
2188
|
driver.configure("write_operation upsert
|
2269
2189
|
id_key request_id")
|
2270
|
-
stub_elastic_ping
|
2271
2190
|
stub_elastic
|
2272
2191
|
driver.run(default_tag: 'test') do
|
2273
2192
|
driver.feed(sample_record)
|
@@ -2281,7 +2200,6 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
2281
2200
|
driver.configure("write_operation upsert
|
2282
2201
|
id_key request_id
|
2283
2202
|
remove_keys_on_update parent_id")
|
2284
|
-
stub_elastic_ping
|
2285
2203
|
stub_elastic
|
2286
2204
|
driver.run(default_tag: 'test') do
|
2287
2205
|
driver.feed(sample_record)
|
@@ -2296,7 +2214,6 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
2296
2214
|
driver.configure("write_operation upsert
|
2297
2215
|
id_key request_id
|
2298
2216
|
remove_keys_on_update parent_id")
|
2299
|
-
stub_elastic_ping
|
2300
2217
|
stub_elastic
|
2301
2218
|
driver.run(default_tag: 'test') do
|
2302
2219
|
driver.feed(sample_record)
|
@@ -2310,7 +2227,6 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
2310
2227
|
driver.configure("write_operation upsert
|
2311
2228
|
id_key id
|
2312
2229
|
remove_keys_on_update foo,baz")
|
2313
|
-
stub_elastic_ping
|
2314
2230
|
stub_elastic
|
2315
2231
|
driver.run(default_tag: 'test') do
|
2316
2232
|
driver.feed("id" => 1, "foo" => "bar", "baz" => "quix", "zip" => "zam")
|
@@ -2335,7 +2251,6 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
2335
2251
|
driver.configure("write_operation upsert
|
2336
2252
|
id_key id
|
2337
2253
|
remove_keys_on_update_key keys_to_skip")
|
2338
|
-
stub_elastic_ping
|
2339
2254
|
stub_elastic
|
2340
2255
|
driver.run(default_tag: 'test') do
|
2341
2256
|
driver.feed("id" => 1, "foo" => "bar", "baz" => "quix", "keys_to_skip" => ["baz"])
|
@@ -2360,7 +2275,6 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
2360
2275
|
id_key id
|
2361
2276
|
remove_keys_on_update foo,bar
|
2362
2277
|
remove_keys_on_update_key keys_to_skip")
|
2363
|
-
stub_elastic_ping
|
2364
2278
|
stub_elastic
|
2365
2279
|
driver.run(default_tag: 'test') do
|
2366
2280
|
driver.feed("id" => 1, "foo" => "bar", "baz" => "quix", "keys_to_skip" => ["baz"])
|
@@ -2385,7 +2299,6 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
2385
2299
|
def test_create_should_write_create_op
|
2386
2300
|
driver.configure("write_operation create
|
2387
2301
|
id_key request_id")
|
2388
|
-
stub_elastic_ping
|
2389
2302
|
stub_elastic
|
2390
2303
|
driver.run(default_tag: 'test') do
|
2391
2304
|
driver.feed(sample_record)
|
@@ -2394,7 +2307,6 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
2394
2307
|
end
|
2395
2308
|
|
2396
2309
|
def test_include_index_in_url
|
2397
|
-
stub_elastic_ping
|
2398
2310
|
stub_elastic('http://localhost:9200/logstash-2018.01.01/_bulk')
|
2399
2311
|
|
2400
2312
|
driver.configure("index_name logstash-2018.01.01
|
@@ -2409,7 +2321,6 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
2409
2321
|
|
2410
2322
|
def test_use_simple_sniffer
|
2411
2323
|
require 'fluent/plugin/elasticsearch_simple_sniffer'
|
2412
|
-
stub_elastic_ping
|
2413
2324
|
stub_elastic_info
|
2414
2325
|
stub_elastic
|
2415
2326
|
config = %[
|
@@ -2425,8 +2336,8 @@ class ElasticsearchOutput < Test::Unit::TestCase
|
|
2425
2336
|
end
|
2426
2337
|
log = driver.logs
|
2427
2338
|
# 2 or 3 - one for the ping, one for the _bulk, (and client.info)
|
2428
|
-
assert_logs_include_compare_size(
|
2429
|
-
assert_logs_include_compare_size(
|
2339
|
+
assert_logs_include_compare_size(3, ">", log, /In Fluent::Plugin::ElasticsearchSimpleSniffer hosts/)
|
2340
|
+
assert_logs_include_compare_size(1, "<=", log, /In Fluent::Plugin::ElasticsearchSimpleSniffer hosts/)
|
2430
2341
|
end
|
2431
2342
|
|
2432
2343
|
end
|