logstash-core 6.0.0.alpha1-java → 6.0.0.alpha2-java
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/logstash-core/logstash-core.jar +0 -0
- data/lib/logstash-core/version.rb +1 -1
- data/lib/logstash/agent.rb +81 -45
- data/lib/logstash/api/commands/hot_threads_reporter.rb +3 -3
- data/lib/logstash/api/commands/node.rb +13 -6
- data/lib/logstash/api/commands/stats.rb +18 -6
- data/lib/logstash/api/modules/node.rb +7 -0
- data/lib/logstash/api/modules/node_stats.rb +12 -5
- data/lib/logstash/bootstrap_check/default_config.rb +3 -7
- data/lib/logstash/compiler.rb +33 -15
- data/lib/logstash/compiler/lscl.rb +16 -8
- data/lib/logstash/config/mixin.rb +5 -42
- data/lib/logstash/config/pipeline_config.rb +1 -1
- data/lib/logstash/config/source/local.rb +28 -13
- data/lib/logstash/config/source/multi_local.rb +72 -0
- data/lib/logstash/config/source_loader.rb +1 -2
- data/lib/logstash/environment.rb +12 -3
- data/lib/logstash/execution_context.rb +7 -3
- data/lib/logstash/inputs/base.rb +2 -0
- data/lib/logstash/instrument/metric_type.rb +0 -2
- data/lib/logstash/instrument/periodic_poller/jvm.rb +5 -5
- data/lib/logstash/instrument/periodic_poller/pq.rb +1 -1
- data/lib/logstash/outputs/base.rb +2 -0
- data/lib/logstash/pipeline.rb +31 -14
- data/lib/logstash/pipeline_action/create.rb +1 -2
- data/lib/logstash/pipeline_action/reload.rb +2 -1
- data/lib/logstash/pipeline_settings.rb +50 -0
- data/lib/logstash/plugin.rb +1 -0
- data/lib/logstash/runner.rb +7 -5
- data/lib/logstash/settings.rb +11 -3
- data/lib/logstash/shutdown_watcher.rb +26 -0
- data/lib/logstash/state_resolver.rb +1 -3
- data/lib/logstash/util/dead_letter_queue_manager.rb +61 -0
- data/lib/logstash/util/environment_variables.rb +43 -0
- data/lib/logstash/util/thread_dump.rb +3 -1
- data/lib/logstash/version.rb +1 -1
- data/locales/en.yml +4 -0
- data/logstash-core.gemspec +4 -1
- data/spec/logstash/agent/converge_spec.rb +36 -35
- data/spec/logstash/agent_spec.rb +48 -177
- data/spec/{api/lib/commands/stats.rb → logstash/api/commands/stats_spec.rb} +7 -2
- data/spec/{api/lib → logstash/api}/errors_spec.rb +1 -1
- data/spec/{api/lib/api → logstash/api/modules}/logging_spec.rb +1 -10
- data/spec/{api/lib/api → logstash/api/modules}/node_plugins_spec.rb +1 -2
- data/spec/{api/lib/api → logstash/api/modules}/node_spec.rb +9 -8
- data/spec/{api/lib/api → logstash/api/modules}/node_stats_spec.rb +11 -9
- data/spec/{api/lib/api → logstash/api/modules}/plugins_spec.rb +4 -3
- data/spec/{api/lib/api → logstash/api/modules}/root_spec.rb +2 -2
- data/spec/{api/lib → logstash/api}/rack_app_spec.rb +0 -0
- data/spec/logstash/compiler/compiler_spec.rb +72 -9
- data/spec/logstash/config/source/local_spec.rb +20 -4
- data/spec/logstash/config/source/multi_local_spec.rb +113 -0
- data/spec/logstash/execution_context_spec.rb +14 -4
- data/spec/logstash/inputs/base_spec.rb +1 -1
- data/spec/logstash/instrument/wrapped_write_client_spec.rb +34 -19
- data/spec/logstash/output_delegator_spec.rb +1 -1
- data/spec/logstash/outputs/base_spec.rb +1 -1
- data/spec/logstash/pipeline_action/reload_spec.rb +1 -1
- data/spec/logstash/pipeline_action/stop_spec.rb +1 -1
- data/spec/logstash/pipeline_dlq_commit_spec.rb +107 -0
- data/spec/logstash/pipeline_pq_file_spec.rb +3 -1
- data/spec/logstash/pipeline_reporter_spec.rb +2 -1
- data/spec/logstash/pipeline_spec.rb +54 -43
- data/spec/logstash/runner_spec.rb +27 -36
- data/spec/logstash/settings/array_coercible_spec.rb +65 -0
- data/spec/logstash/settings_spec.rb +91 -0
- data/spec/logstash/shutdown_watcher_spec.rb +10 -16
- data/spec/logstash/state_resolver_spec.rb +6 -4
- data/spec/support/helpers.rb +16 -3
- data/spec/support/shared_contexts.rb +26 -2
- metadata +42 -39
- data/lib/logstash/instrument/metric_type/mean.rb +0 -33
- data/spec/api/lib/api/support/resource_dsl_methods.rb +0 -87
- data/spec/api/spec_helper.rb +0 -106
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 58e1606b49e2fe865d648c113d2316ba19a4604d
|
4
|
+
data.tar.gz: 7c50f49a82f7bd2dec47546ddb51459e35d44c0c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c8d297ddd76d6f6c2167f934169a041c7b1df0b76a39a661ddc308405159407fa0800a3a41cf0bd8aeca2a1684ebd45482672f83985f442f500b6f4ce6e9edad
|
7
|
+
data.tar.gz: 8e5e40ab3a364110604e825a43f05a83ea1b8da136f50f8ee6ae475edb69d25c6f70e076c20175eabacf6dddb9032e4d111a1d251ed22d9e5f393ee3c06ef90f
|
Binary file
|
data/lib/logstash/agent.rb
CHANGED
@@ -25,7 +25,7 @@ class LogStash::Agent
|
|
25
25
|
include LogStash::Util::Loggable
|
26
26
|
STARTED_AT = Time.now.freeze
|
27
27
|
|
28
|
-
attr_reader :metric, :name, :
|
28
|
+
attr_reader :metric, :name, :settings, :webserver, :dispatcher
|
29
29
|
attr_accessor :logger
|
30
30
|
|
31
31
|
# initialize method for LogStash::Agent
|
@@ -38,7 +38,10 @@ class LogStash::Agent
|
|
38
38
|
@settings = settings
|
39
39
|
@auto_reload = setting("config.reload.automatic")
|
40
40
|
|
41
|
+
# Do not use @pipelines directly. Use #with_pipelines which does locking
|
41
42
|
@pipelines = {}
|
43
|
+
@pipelines_lock = java.util.concurrent.locks.ReentrantLock.new
|
44
|
+
|
42
45
|
@name = setting("node.name")
|
43
46
|
@http_host = setting("http.host")
|
44
47
|
@http_port = setting("http.port")
|
@@ -48,14 +51,13 @@ class LogStash::Agent
|
|
48
51
|
|
49
52
|
# This is for backward compatibility in the tests
|
50
53
|
if source_loader.nil?
|
51
|
-
@source_loader = LogStash::Config::
|
54
|
+
@source_loader = LogStash::Config::SourceLoader.new
|
52
55
|
@source_loader.add_source(LogStash::Config::Source::Local.new(@settings))
|
53
56
|
else
|
54
57
|
@source_loader = source_loader
|
55
58
|
end
|
56
59
|
|
57
60
|
@reload_interval = setting("config.reload.interval")
|
58
|
-
@pipelines_mutex = Mutex.new
|
59
61
|
|
60
62
|
@collect_metric = setting("metric.collect")
|
61
63
|
|
@@ -129,6 +131,17 @@ class LogStash::Agent
|
|
129
131
|
!@running.value
|
130
132
|
end
|
131
133
|
|
134
|
+
# Safely perform an operation on the pipelines hash
|
135
|
+
# Using the correct synchronization
|
136
|
+
def with_pipelines
|
137
|
+
begin
|
138
|
+
@pipelines_lock.lock
|
139
|
+
yield @pipelines
|
140
|
+
ensure
|
141
|
+
@pipelines_lock.unlock
|
142
|
+
end
|
143
|
+
end
|
144
|
+
|
132
145
|
def converge_state_and_update
|
133
146
|
results = @source_loader.fetch
|
134
147
|
|
@@ -145,13 +158,14 @@ class LogStash::Agent
|
|
145
158
|
# content of it.
|
146
159
|
converge_result = nil
|
147
160
|
|
148
|
-
|
161
|
+
# we don't use the variable here, but we want the locking
|
162
|
+
with_pipelines do |pipelines|
|
149
163
|
pipeline_actions = resolve_actions(results.response)
|
150
164
|
converge_result = converge_state(pipeline_actions)
|
165
|
+
update_metrics(converge_result)
|
151
166
|
end
|
152
167
|
|
153
168
|
report_currently_running_pipelines(converge_result)
|
154
|
-
update_metrics(converge_result)
|
155
169
|
dispatch_events(converge_result)
|
156
170
|
|
157
171
|
converge_result
|
@@ -220,52 +234,64 @@ class LogStash::Agent
|
|
220
234
|
end
|
221
235
|
|
222
236
|
def get_pipeline(pipeline_id)
|
223
|
-
|
224
|
-
|
237
|
+
with_pipelines do |pipelines|
|
238
|
+
pipelines[pipeline_id]
|
225
239
|
end
|
226
240
|
end
|
227
241
|
|
228
242
|
def pipelines_count
|
229
|
-
|
243
|
+
with_pipelines do |pipelines|
|
230
244
|
pipelines.size
|
231
245
|
end
|
232
246
|
end
|
233
247
|
|
234
|
-
def
|
235
|
-
|
236
|
-
|
248
|
+
def with_running_pipelines
|
249
|
+
with_pipelines do |pipelines|
|
250
|
+
yield pipelines.select {|pipeline_id, _| running_pipeline?(pipeline_id) }
|
237
251
|
end
|
238
252
|
end
|
239
253
|
|
240
254
|
def running_pipelines?
|
241
|
-
|
242
|
-
|
255
|
+
running_pipelines_count > 0
|
256
|
+
end
|
257
|
+
|
258
|
+
def running_pipelines_count
|
259
|
+
with_running_pipelines do |pipelines|
|
260
|
+
pipelines.size
|
243
261
|
end
|
244
262
|
end
|
245
263
|
|
246
264
|
def running_user_defined_pipelines?
|
247
|
-
|
265
|
+
with_running_user_defined_pipelines do |pipelines|
|
266
|
+
pipelines.size > 0
|
267
|
+
end
|
248
268
|
end
|
249
269
|
|
250
|
-
def
|
251
|
-
|
252
|
-
|
270
|
+
def with_running_user_defined_pipelines
|
271
|
+
with_pipelines do |pipelines|
|
272
|
+
found = pipelines.select do |_, pipeline|
|
253
273
|
pipeline.running? && !pipeline.system?
|
254
274
|
end
|
275
|
+
|
276
|
+
yield found
|
255
277
|
end
|
256
278
|
end
|
257
279
|
|
258
280
|
def close_pipeline(id)
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
|
281
|
+
with_pipelines do |pipelines|
|
282
|
+
pipeline = pipelines[id]
|
283
|
+
if pipeline
|
284
|
+
@logger.warn("closing pipeline", :id => id)
|
285
|
+
pipeline.close
|
286
|
+
end
|
263
287
|
end
|
264
288
|
end
|
265
289
|
|
266
290
|
def close_pipelines
|
267
|
-
|
268
|
-
|
291
|
+
with_pipelines do |pipelines|
|
292
|
+
pipelines.each do |id, _|
|
293
|
+
close_pipeline(id)
|
294
|
+
end
|
269
295
|
end
|
270
296
|
end
|
271
297
|
|
@@ -308,20 +334,22 @@ class LogStash::Agent
|
|
308
334
|
#
|
309
335
|
# This give us a bit more extensibility with the current startup/validation model
|
310
336
|
# that we currently have.
|
311
|
-
|
312
|
-
|
313
|
-
|
314
|
-
|
315
|
-
|
316
|
-
|
317
|
-
|
318
|
-
|
337
|
+
with_pipelines do |pipelines|
|
338
|
+
begin
|
339
|
+
logger.debug("Executing action", :action => action)
|
340
|
+
action_result = action.execute(self, pipelines)
|
341
|
+
converge_result.add(action, action_result)
|
342
|
+
|
343
|
+
unless action_result.successful?
|
344
|
+
logger.error("Failed to execute action", :id => action.pipeline_id,
|
345
|
+
:action_type => action_result.class, :message => action_result.message)
|
346
|
+
end
|
347
|
+
rescue SystemExit => e
|
348
|
+
converge_result.add(action, e)
|
349
|
+
rescue Exception => e
|
350
|
+
logger.error("Failed to execute action", :action => action, :exception => e.class.name, :message => e.message)
|
351
|
+
converge_result.add(action, e)
|
319
352
|
end
|
320
|
-
rescue SystemExit => e
|
321
|
-
converge_result.add(action, e)
|
322
|
-
rescue Exception => e
|
323
|
-
logger.error("Failed to execute action", :action => action, :exception => e.class.name, :message => e.message)
|
324
|
-
converge_result.add(action, e)
|
325
353
|
end
|
326
354
|
end
|
327
355
|
|
@@ -335,13 +363,17 @@ class LogStash::Agent
|
|
335
363
|
end
|
336
364
|
|
337
365
|
def resolve_actions(pipeline_configs)
|
338
|
-
|
366
|
+
with_pipelines do |pipelines|
|
367
|
+
@state_resolver.resolve(pipelines, pipeline_configs)
|
368
|
+
end
|
339
369
|
end
|
340
370
|
|
341
371
|
def report_currently_running_pipelines(converge_result)
|
342
372
|
if converge_result.success? && converge_result.total > 0
|
343
|
-
|
344
|
-
|
373
|
+
with_running_pipelines do |pipelines|
|
374
|
+
number_of_running_pipeline = pipelines.size
|
375
|
+
logger.info("Pipelines running", :count => number_of_running_pipeline, :pipelines => pipelines.values.collect(&:pipeline_id) )
|
376
|
+
end
|
345
377
|
end
|
346
378
|
end
|
347
379
|
|
@@ -394,9 +426,11 @@ class LogStash::Agent
|
|
394
426
|
end
|
395
427
|
|
396
428
|
def force_shutdown_pipelines!
|
397
|
-
|
398
|
-
|
399
|
-
|
429
|
+
with_pipelines do |pipelines|
|
430
|
+
pipelines.each do |_, pipeline|
|
431
|
+
# TODO(ph): should it be his own action?
|
432
|
+
pipeline.force_shutdown!
|
433
|
+
end
|
400
434
|
end
|
401
435
|
end
|
402
436
|
|
@@ -406,19 +440,21 @@ class LogStash::Agent
|
|
406
440
|
# In this context I could just call shutdown, but I've decided to
|
407
441
|
# use the stop action implementation for that so we have the same code.
|
408
442
|
# This also give us some context into why a shutdown is failing
|
409
|
-
|
443
|
+
with_pipelines do |pipelines|
|
410
444
|
pipeline_actions = resolve_actions([]) # We stop all the pipeline, so we converge to a empty state
|
411
445
|
converge_state(pipeline_actions)
|
412
446
|
end
|
413
447
|
end
|
414
448
|
|
415
449
|
def running_pipeline?(pipeline_id)
|
416
|
-
thread =
|
450
|
+
thread = get_pipeline(pipeline_id).thread
|
417
451
|
thread.is_a?(Thread) && thread.alive?
|
418
452
|
end
|
419
453
|
|
420
454
|
def clean_state?
|
421
|
-
|
455
|
+
with_pipelines do |pipelines|
|
456
|
+
pipelines.empty?
|
457
|
+
end
|
422
458
|
end
|
423
459
|
|
424
460
|
def setting(key)
|
@@ -1,4 +1,5 @@
|
|
1
1
|
# encoding: utf-8
|
2
|
+
java_import 'org.logstash.instrument.reports.ThreadsReport'
|
2
3
|
|
3
4
|
class HotThreadsReport
|
4
5
|
STRING_SEPARATOR_LENGTH = 80.freeze
|
@@ -7,8 +8,7 @@ class HotThreadsReport
|
|
7
8
|
def initialize(cmd, options)
|
8
9
|
@cmd = cmd
|
9
10
|
filter = { :stacktrace_size => options.fetch(:stacktrace_size, HOT_THREADS_STACK_TRACES_SIZE_DEFAULT) }
|
10
|
-
|
11
|
-
@thread_dump = ::LogStash::Util::ThreadDump.new(options.merge(:dump => jr_dump))
|
11
|
+
@thread_dump = ::LogStash::Util::ThreadDump.new(options.merge(:dump => ThreadsReport.generate(filter)))
|
12
12
|
end
|
13
13
|
|
14
14
|
def to_s
|
@@ -42,7 +42,7 @@ class HotThreadsReport
|
|
42
42
|
_hash["thread.stacktrace"].each do |trace|
|
43
43
|
traces << trace
|
44
44
|
end
|
45
|
-
thread[:traces] = traces
|
45
|
+
thread[:traces] = traces
|
46
46
|
hash[:threads] << thread
|
47
47
|
end
|
48
48
|
{ :hot_threads => hash }
|
@@ -9,7 +9,7 @@ module LogStash
|
|
9
9
|
|
10
10
|
def all(selected_fields=[])
|
11
11
|
payload = {
|
12
|
-
:
|
12
|
+
:pipelines => pipelines,
|
13
13
|
:os => os,
|
14
14
|
:jvm => jvm
|
15
15
|
}
|
@@ -17,12 +17,20 @@ module LogStash
|
|
17
17
|
payload
|
18
18
|
end
|
19
19
|
|
20
|
-
def
|
21
|
-
|
22
|
-
|
20
|
+
def pipelines
|
21
|
+
pipeline_ids = service.get_shallow(:stats, :pipelines).keys
|
22
|
+
pipeline_ids.each_with_object({}) do |pipeline_id, result|
|
23
|
+
result[pipeline_id] = pipeline(pipeline_id)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def pipeline(pipeline_id)
|
28
|
+
extract_metrics(
|
29
|
+
[:stats, :pipelines, pipeline_id.to_sym, :config],
|
23
30
|
:workers, :batch_size, :batch_delay, :config_reload_automatic, :config_reload_interval
|
24
31
|
)
|
25
|
-
|
32
|
+
rescue
|
33
|
+
{}
|
26
34
|
end
|
27
35
|
|
28
36
|
def os
|
@@ -40,7 +48,6 @@ module LogStash
|
|
40
48
|
{
|
41
49
|
:pid => ManagementFactory.getRuntimeMXBean().getName().split("@").first.to_i,
|
42
50
|
:version => java.lang.System.getProperty("java.version"),
|
43
|
-
:vm_name => java.lang.System.getProperty("java.vm.name"),
|
44
51
|
:vm_version => java.lang.System.getProperty("java.version"),
|
45
52
|
:vm_vendor => java.lang.System.getProperty("java.vendor"),
|
46
53
|
:vm_name => java.lang.System.getProperty("java.vm.name"),
|
@@ -41,20 +41,26 @@ module LogStash
|
|
41
41
|
def events
|
42
42
|
extract_metrics(
|
43
43
|
[:stats, :events],
|
44
|
-
:in, :filtered, :out, :duration_in_millis
|
44
|
+
:in, :filtered, :out, :duration_in_millis, :queue_push_duration_in_millis
|
45
45
|
)
|
46
46
|
end
|
47
47
|
|
48
|
-
def pipeline(pipeline_id =
|
49
|
-
|
50
|
-
|
51
|
-
|
48
|
+
def pipeline(pipeline_id = nil)
|
49
|
+
if pipeline_id.nil?
|
50
|
+
pipeline_ids = service.get_shallow(:stats, :pipelines).keys
|
51
|
+
pipeline_ids.each_with_object({}) do |pipeline_id, result|
|
52
|
+
result[pipeline_id] = plugins_stats_report(pipeline_id)
|
53
|
+
end
|
54
|
+
else
|
55
|
+
{ pipeline_id => plugins_stats_report(pipeline_id) }
|
56
|
+
end
|
57
|
+
rescue # failed to find pipeline
|
58
|
+
{}
|
52
59
|
end
|
53
60
|
|
54
61
|
def memory
|
55
62
|
memory = service.get_shallow(:jvm, :memory)
|
56
63
|
{
|
57
|
-
:heap_used_in_bytes => memory[:heap][:used_in_bytes],
|
58
64
|
:heap_used_percent => memory[:heap][:used_percent],
|
59
65
|
:heap_committed_in_bytes => memory[:heap][:committed_in_bytes],
|
60
66
|
:heap_max_in_bytes => memory[:heap][:max_in_bytes],
|
@@ -85,6 +91,12 @@ module LogStash
|
|
85
91
|
HotThreadsReport.new(self, options)
|
86
92
|
end
|
87
93
|
|
94
|
+
private
|
95
|
+
def plugins_stats_report(pipeline_id)
|
96
|
+
stats = service.get_shallow(:stats, :pipelines, pipeline_id.to_sym)
|
97
|
+
PluginsStats.report(stats)
|
98
|
+
end
|
99
|
+
|
88
100
|
module PluginsStats
|
89
101
|
module_function
|
90
102
|
|
@@ -20,6 +20,13 @@ module LogStash
|
|
20
20
|
respond_with(node.hot_threads(options), {:as => as})
|
21
21
|
end
|
22
22
|
|
23
|
+
get "/pipelines/:id" do
|
24
|
+
pipeline_id = params["id"]
|
25
|
+
payload = node.pipeline(pipeline_id)
|
26
|
+
halt(404) if payload.empty?
|
27
|
+
respond_with(:pipelines => { pipeline_id => payload } )
|
28
|
+
end
|
29
|
+
|
23
30
|
get "/?:filter?" do
|
24
31
|
selected_fields = extract_fields(params["filter"].to_s.strip)
|
25
32
|
values = node.all(selected_fields)
|
@@ -8,12 +8,19 @@ module LogStash
|
|
8
8
|
@stats = factory.build(:stats)
|
9
9
|
end
|
10
10
|
|
11
|
+
get "/pipelines/:id?" do
|
12
|
+
payload = pipeline_payload(params["id"])
|
13
|
+
halt(404) if payload.empty?
|
14
|
+
respond_with(:pipelines => payload)
|
15
|
+
end
|
16
|
+
|
11
17
|
get "/?:filter?" do
|
12
18
|
payload = {
|
13
19
|
:jvm => jvm_payload,
|
14
20
|
:process => process_payload,
|
15
|
-
:
|
16
|
-
:
|
21
|
+
:events => events_payload,
|
22
|
+
:pipelines => pipeline_payload,
|
23
|
+
:reloads => reloads_payload,
|
17
24
|
:os => os_payload
|
18
25
|
}
|
19
26
|
respond_with(payload, {:filter => params["filter"]})
|
@@ -32,7 +39,7 @@ module LogStash
|
|
32
39
|
@stats.jvm
|
33
40
|
end
|
34
41
|
|
35
|
-
def
|
42
|
+
def reloads_payload
|
36
43
|
@stats.reloads
|
37
44
|
end
|
38
45
|
|
@@ -44,8 +51,8 @@ module LogStash
|
|
44
51
|
@stats.memory
|
45
52
|
end
|
46
53
|
|
47
|
-
def pipeline_payload
|
48
|
-
@stats.pipeline
|
54
|
+
def pipeline_payload(val = nil)
|
55
|
+
@stats.pipeline(val)
|
49
56
|
end
|
50
57
|
end
|
51
58
|
end
|
@@ -4,13 +4,9 @@ require "logstash/errors"
|
|
4
4
|
module LogStash module BootstrapCheck
|
5
5
|
class DefaultConfig
|
6
6
|
def self.check(settings)
|
7
|
-
if
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
if settings.get("config.reload.automatic") && settings.get("path.config").nil?
|
12
|
-
# there's nothing to reload
|
13
|
-
raise LogStash::BootstrapCheckError, I18n.t("logstash.runner.reload-without-config-path")
|
7
|
+
# currently none of the checks applies if there are multiple pipelines
|
8
|
+
if settings.get("config.reload.automatic") && settings.get_setting("config.string").set?
|
9
|
+
raise LogStash::BootstrapCheckError, I18n.t("logstash.runner.reload-with-config-string")
|
14
10
|
end
|
15
11
|
end
|
16
12
|
end
|