logstash-core 6.0.0.alpha2-java → 6.0.0.beta1-java

Sign up to get free protection for your applications and to get access to all the features.
Files changed (110) hide show
  1. checksums.yaml +5 -5
  2. data/gemspec_jars.rb +6 -4
  3. data/lib/logstash-core/logstash-core.jar +0 -0
  4. data/lib/logstash-core/logstash-core.rb +2 -2
  5. data/lib/logstash-core/version.rb +1 -1
  6. data/lib/logstash-core_jars.rb +14 -10
  7. data/lib/logstash/agent.rb +4 -2
  8. data/lib/logstash/api/commands/default_metadata.rb +1 -1
  9. data/lib/logstash/api/commands/hot_threads_reporter.rb +8 -2
  10. data/lib/logstash/api/commands/node.rb +2 -2
  11. data/lib/logstash/api/commands/stats.rb +2 -2
  12. data/lib/logstash/bootstrap_check/bad_ruby.rb +2 -2
  13. data/lib/logstash/bootstrap_check/default_config.rb +2 -3
  14. data/lib/logstash/compiler.rb +12 -12
  15. data/lib/logstash/compiler/lscl.rb +17 -7
  16. data/lib/logstash/compiler/treetop_monkeypatches.rb +1 -0
  17. data/lib/logstash/config/config_ast.rb +11 -1
  18. data/lib/logstash/config/mixin.rb +5 -0
  19. data/lib/logstash/config/modules_common.rb +101 -0
  20. data/lib/logstash/config/source/base.rb +75 -0
  21. data/lib/logstash/config/source/local.rb +52 -50
  22. data/lib/logstash/config/source/modules.rb +55 -0
  23. data/lib/logstash/config/source/multi_local.rb +54 -10
  24. data/lib/logstash/config/source_loader.rb +1 -0
  25. data/lib/logstash/config/string_escape.rb +27 -0
  26. data/lib/logstash/elasticsearch_client.rb +142 -0
  27. data/lib/logstash/environment.rb +5 -1
  28. data/lib/logstash/event.rb +0 -1
  29. data/lib/logstash/instrument/global_metrics.rb +13 -0
  30. data/lib/logstash/instrument/metric_store.rb +16 -13
  31. data/lib/logstash/instrument/metric_type/counter.rb +6 -18
  32. data/lib/logstash/instrument/metric_type/gauge.rb +6 -12
  33. data/lib/logstash/instrument/periodic_poller/dlq.rb +19 -0
  34. data/lib/logstash/instrument/periodic_pollers.rb +3 -1
  35. data/lib/logstash/logging/logger.rb +43 -14
  36. data/lib/logstash/modules/cli_parser.rb +74 -0
  37. data/lib/logstash/modules/elasticsearch_config.rb +22 -0
  38. data/lib/logstash/modules/elasticsearch_importer.rb +37 -0
  39. data/lib/logstash/modules/elasticsearch_resource.rb +10 -0
  40. data/lib/logstash/modules/file_reader.rb +36 -0
  41. data/lib/logstash/modules/kibana_base.rb +24 -0
  42. data/lib/logstash/modules/kibana_client.rb +122 -0
  43. data/lib/logstash/modules/kibana_config.rb +125 -0
  44. data/lib/logstash/modules/kibana_dashboards.rb +36 -0
  45. data/lib/logstash/modules/kibana_importer.rb +17 -0
  46. data/lib/logstash/modules/kibana_resource.rb +10 -0
  47. data/lib/logstash/modules/kibana_settings.rb +40 -0
  48. data/lib/logstash/modules/logstash_config.rb +120 -0
  49. data/lib/logstash/modules/resource_base.rb +38 -0
  50. data/lib/logstash/modules/scaffold.rb +50 -0
  51. data/lib/logstash/modules/settings_merger.rb +23 -0
  52. data/lib/logstash/modules/util.rb +17 -0
  53. data/lib/logstash/namespace.rb +1 -0
  54. data/lib/logstash/pipeline.rb +66 -27
  55. data/lib/logstash/pipeline_settings.rb +1 -0
  56. data/lib/logstash/plugins/registry.rb +1 -0
  57. data/lib/logstash/runner.rb +47 -3
  58. data/lib/logstash/settings.rb +20 -1
  59. data/lib/logstash/util/dead_letter_queue_manager.rb +1 -1
  60. data/lib/logstash/util/safe_uri.rb +146 -11
  61. data/lib/logstash/util/thread_dump.rb +4 -3
  62. data/lib/logstash/util/wrapped_acked_queue.rb +28 -24
  63. data/lib/logstash/util/wrapped_synchronous_queue.rb +19 -20
  64. data/lib/logstash/version.rb +1 -1
  65. data/locales/en.yml +56 -1
  66. data/logstash-core.gemspec +6 -4
  67. data/spec/logstash/agent/converge_spec.rb +2 -2
  68. data/spec/logstash/agent_spec.rb +11 -3
  69. data/spec/logstash/api/modules/logging_spec.rb +13 -7
  70. data/spec/logstash/api/modules/node_plugins_spec.rb +23 -5
  71. data/spec/logstash/api/modules/node_spec.rb +17 -15
  72. data/spec/logstash/api/modules/node_stats_spec.rb +0 -1
  73. data/spec/logstash/api/modules/plugins_spec.rb +40 -9
  74. data/spec/logstash/api/modules/root_spec.rb +0 -1
  75. data/spec/logstash/api/rack_app_spec.rb +2 -1
  76. data/spec/logstash/compiler/compiler_spec.rb +54 -7
  77. data/spec/logstash/config/config_ast_spec.rb +47 -8
  78. data/spec/logstash/config/mixin_spec.rb +14 -2
  79. data/spec/logstash/config/pipeline_config_spec.rb +7 -7
  80. data/spec/logstash/config/source/local_spec.rb +5 -2
  81. data/spec/logstash/config/source/multi_local_spec.rb +56 -10
  82. data/spec/logstash/config/source_loader_spec.rb +1 -1
  83. data/spec/logstash/config/string_escape_spec.rb +24 -0
  84. data/spec/logstash/event_spec.rb +9 -0
  85. data/spec/logstash/filters/base_spec.rb +1 -1
  86. data/spec/logstash/instrument/metric_store_spec.rb +2 -3
  87. data/spec/logstash/instrument/metric_type/counter_spec.rb +0 -12
  88. data/spec/logstash/instrument/metric_type/gauge_spec.rb +1 -8
  89. data/spec/logstash/instrument/periodic_poller/dlq_spec.rb +17 -0
  90. data/spec/logstash/instrument/periodic_poller/jvm_spec.rb +1 -1
  91. data/spec/logstash/legacy_ruby_event_spec.rb +0 -9
  92. data/spec/logstash/legacy_ruby_timestamp_spec.rb +19 -14
  93. data/spec/logstash/modules/cli_parser_spec.rb +129 -0
  94. data/spec/logstash/modules/logstash_config_spec.rb +56 -0
  95. data/spec/logstash/modules/scaffold_spec.rb +239 -0
  96. data/spec/logstash/pipeline_dlq_commit_spec.rb +1 -1
  97. data/spec/logstash/pipeline_spec.rb +87 -20
  98. data/spec/logstash/runner_spec.rb +122 -5
  99. data/spec/logstash/setting_spec.rb +2 -2
  100. data/spec/logstash/settings/splittable_string_array_spec.rb +51 -0
  101. data/spec/logstash/timestamp_spec.rb +8 -2
  102. data/spec/logstash/util/safe_uri_spec.rb +16 -0
  103. data/spec/logstash/util/wrapped_acked_queue_spec.rb +63 -0
  104. data/spec/logstash/util/wrapped_synchronous_queue_spec.rb +0 -22
  105. data/spec/support/helpers.rb +1 -1
  106. data/spec/support/matchers.rb +21 -4
  107. metadata +102 -19
  108. data/lib/logstash/instrument/metric_type/base.rb +0 -31
  109. data/lib/logstash/program.rb +0 -14
  110. data/lib/logstash/string_interpolation.rb +0 -18
@@ -537,8 +537,27 @@ module LogStash
537
537
  end
538
538
  end
539
539
  end
540
- end
541
540
 
541
+ class SplittableStringArray < ArrayCoercible
542
+ DEFAULT_TOKEN = ","
543
+
544
+ def initialize(name, klass, default, strict=true, tokenizer = DEFAULT_TOKEN, &validator_proc)
545
+ @element_class = klass
546
+ @token = tokenizer
547
+ super(name, klass, default, strict, &validator_proc)
548
+ end
549
+
550
+ def coerce(value)
551
+ if value.is_a?(Array)
552
+ value
553
+ elsif value.nil?
554
+ []
555
+ else
556
+ value.split(@token).map(&:strip)
557
+ end
558
+ end
559
+ end
560
+ end
542
561
 
543
562
  SETTINGS = Settings.new
544
563
  end
@@ -48,7 +48,7 @@ module LogStash; module Util
48
48
  def self.get(pipeline_id)
49
49
  if LogStash::SETTINGS.get("dead_letter_queue.enable")
50
50
  return DeadLetterQueueWriter.new(
51
- DeadLetterQueueFactory.getWriter(pipeline_id, LogStash::SETTINGS.get("path.dead_letter_queue")))
51
+ DeadLetterQueueFactory.getWriter(pipeline_id, LogStash::SETTINGS.get("path.dead_letter_queue"), LogStash::SETTINGS.get('dead_letter_queue.max_bytes')))
52
52
  else
53
53
  return DeadLetterQueueWriter.new(nil)
54
54
  end
@@ -11,20 +11,21 @@ class LogStash::Util::SafeURI
11
11
 
12
12
  extend Forwardable
13
13
 
14
- def_delegators :@uri, :coerce, :query=, :route_from, :port=, :default_port, :select, :normalize!, :absolute?, :registry=, :path, :password, :hostname, :merge, :normalize, :host, :component_ary, :userinfo=, :query, :set_opaque, :+, :merge!, :-, :password=, :parser, :port, :set_host, :set_path, :opaque=, :scheme, :fragment=, :set_query, :set_fragment, :userinfo, :hostname=, :set_port, :path=, :registry, :opaque, :route_to, :set_password, :hierarchical?, :set_user, :set_registry, :set_userinfo, :fragment, :component, :user=, :set_scheme, :absolute, :host=, :relative?, :scheme=, :user
15
14
 
16
15
  attr_reader :uri
17
-
16
+
18
17
  public
19
18
  def initialize(arg)
20
19
  @uri = case arg
21
20
  when String
22
21
  arg = "//#{arg}" if HOSTNAME_PORT_REGEX.match(arg)
23
- URI.parse(arg)
24
- when URI
22
+ java.net.URI.new(arg)
23
+ when java.net.URI
25
24
  arg
25
+ when URI
26
+ java.net.URI.new(arg.to_s)
26
27
  else
27
- raise ArgumentError, "Expected a string or URI, got a #{arg.class} creating a URL"
28
+ raise ArgumentError, "Expected a string, java.net.URI, or URI, got a #{arg.class} creating a URL"
28
29
  end
29
30
  end
30
31
 
@@ -37,11 +38,11 @@ class LogStash::Util::SafeURI
37
38
  end
38
39
 
39
40
  def sanitized
40
- return uri unless uri.password # nothing to sanitize here!
41
+ return uri unless password # nothing to sanitize here!
41
42
 
42
- safe = uri.clone
43
- safe.password = PASS_PLACEHOLDER
44
- safe
43
+ user_info = user ? "#{user}:#{PASS_PLACEHOLDER}" : nil
44
+
45
+ make_uri(scheme, user_info, host, port, path, query, fragment)
45
46
  end
46
47
 
47
48
  def ==(other)
@@ -49,8 +50,142 @@ class LogStash::Util::SafeURI
49
50
  end
50
51
 
51
52
  def clone
52
- cloned_uri = uri.clone
53
- self.class.new(cloned_uri)
53
+ # No need to clone the URI, in java its immutable
54
+ self.class.new(uri)
55
+ end
56
+
57
+ def update(field, value)
58
+ new_scheme = scheme
59
+ new_user = user
60
+ new_password = password
61
+ new_host = host
62
+ new_port = port
63
+ new_path = path
64
+ new_query = query
65
+ new_fragment = fragment
66
+
67
+ case field
68
+ when :scheme
69
+ new_scheme = value
70
+ when :user
71
+ new_user = value
72
+ when :password
73
+ new_password = value
74
+ when :host
75
+ new_host = value
76
+ when :port
77
+ new_port = value
78
+ when :path
79
+ new_path = value
80
+ when :query
81
+ new_query = value
82
+ when :fragment
83
+ new_fragment = value
84
+ end
85
+
86
+ user_info = new_user
87
+ if new_user && new_password
88
+ user_info += ":" + new_password
89
+ end
90
+
91
+ @uri = make_uri(new_scheme, user_info, new_host, new_port, new_path, new_query, new_fragment)
92
+ end
93
+
94
+ def user
95
+ if userinfo
96
+ userinfo.split(":")[0]
97
+ end
98
+ end
99
+
100
+ def user=(new_user)
101
+ update(:user, new_user)
102
+ end
103
+
104
+ def password
105
+ if userinfo
106
+ userinfo.split(":")[1]
107
+ end
108
+ end
109
+
110
+ def password=(new_password)
111
+ update(:password, new_password)
112
+ end
113
+
114
+ def hostname
115
+ # Alias from the ruby library
116
+ host
117
+ end
118
+
119
+ def host=(new_host)
120
+ update(:host, new_host)
121
+ end
122
+
123
+ def port
124
+ # In java this is an int
125
+ uri.port < 1 ? nil : uri.port
126
+ end
127
+
128
+ def port=(new_port)
129
+ update(:port, new_port)
130
+ end
131
+
132
+ def path=(new_path)
133
+ update(:path, new_path)
134
+ end
135
+
136
+ def query=(new_query)
137
+ update(:query, new_query)
138
+ end
139
+
140
+ def fragment=(new_fragment)
141
+ update(:fragment, new_fragment)
142
+ end
143
+
144
+ # Same algorithm as Ruby's URI class uses
145
+ def normalize!
146
+ if path && path == ''
147
+ path = '/'
148
+ end
149
+ if scheme && scheme != scheme.downcase
150
+ scheme = self.scheme.downcase
151
+ end
152
+ if host && host != host.downcase
153
+ host = self.host.downcase
154
+ end
155
+ end
156
+
157
+ def normalize
158
+ d = self.dup
159
+ d.normalize!
160
+ d
161
+ end
162
+
163
+ def path
164
+ @uri.raw_path
165
+ end
166
+
167
+ def query
168
+ @uri.raw_query
169
+ end
170
+
171
+ def fragment
172
+ @uri.raw_fragment
173
+ end
174
+
175
+ def userinfo
176
+ @uri.raw_user_info
177
+ end
178
+
179
+ def_delegators :@uri, :absolute?, :scheme, :host
180
+
181
+ private
182
+
183
+ # Jruby doesn't guess the constructor correctly if there are some nil things in place
184
+ # hence, this method
185
+ def make_uri(scheme, user_info, host, port, path, query, fragment)
186
+ # It is lot legal to have a path not starting with a /
187
+ prefixed_path = path && path[0] != "/" ? "/#{path}" : path
188
+ java.net.URI.new(scheme, user_info, host, port || -1, prefixed_path, query, fragment)
54
189
  end
55
190
  end
56
191
 
@@ -19,12 +19,13 @@ module LogStash
19
19
 
20
20
  def each(&block)
21
21
  i=0
22
- dump.each_pair do |thread_name, _hash|
22
+ dump.each do |hash|
23
+ thread_name = hash["thread.name"]
23
24
  break if i >= top_count
24
25
  if ignore
25
- next if idle_thread?(thread_name, _hash)
26
+ next if idle_thread?(thread_name, hash)
26
27
  end
27
- block.call(thread_name, _hash)
28
+ block.call(hash)
28
29
  i += 1
29
30
  end
30
31
  end
@@ -57,24 +57,6 @@ module LogStash; module Util
57
57
  end
58
58
  alias_method(:<<, :push)
59
59
 
60
- # TODO - fix doc for this noop method
61
- # Offer an object to the queue, wait for the specified amount of time.
62
- # If adding to the queue was successful it will return true, false otherwise.
63
- #
64
- # @param [Object] Object to add to the queue
65
- # @param [Integer] Time in milliseconds to wait before giving up
66
- # @return [Boolean] True if adding was successful if not it return false
67
- def offer(obj, timeout_ms)
68
- raise NotImplementedError.new("The offer method is not implemented. There is no non blocking write operation yet.")
69
- end
70
-
71
- # Blocking
72
- def take
73
- check_closed("read a batch")
74
- # TODO - determine better arbitrary timeout millis
75
- @queue.read_batch(1, 200).get_elements.first
76
- end
77
-
78
60
  # Block for X millis
79
61
  def poll(millis)
80
62
  check_closed("read")
@@ -100,6 +82,10 @@ module LogStash; module Util
100
82
  end
101
83
  end
102
84
 
85
+ def is_empty?
86
+ @queue.is_empty?
87
+ end
88
+
103
89
  def close
104
90
  @queue.close
105
91
  @closed.make_true
@@ -127,7 +113,12 @@ module LogStash; module Util
127
113
  end
128
114
 
129
115
  def empty?
130
- @mutex.synchronize { @queue.is_fully_acked? }
116
+ @mutex.lock
117
+ begin
118
+ @queue.is_empty?
119
+ ensure
120
+ @mutex.unlock
121
+ end
131
122
  end
132
123
 
133
124
  def set_batch_dimensions(batch_size, wait_for)
@@ -152,8 +143,11 @@ module LogStash; module Util
152
143
  end
153
144
 
154
145
  def inflight_batches
155
- @mutex.synchronize do
146
+ @mutex.lock
147
+ begin
156
148
  yield(@inflight_batches)
149
+ ensure
150
+ @mutex.unlock
157
151
  end
158
152
  end
159
153
 
@@ -173,16 +167,24 @@ module LogStash; module Util
173
167
  end
174
168
 
175
169
  batch = new_batch
176
- @mutex.synchronize { batch.read_next }
170
+ @mutex.lock
171
+ begin
172
+ batch.read_next
173
+ ensure
174
+ @mutex.unlock
175
+ end
177
176
  start_metrics(batch)
178
177
  batch
179
178
  end
180
179
 
181
180
  def start_metrics(batch)
182
- @mutex.synchronize do
181
+ @mutex.lock
182
+ begin
183
183
  # there seems to be concurrency issues with metrics, keep it in the mutex
184
184
  set_current_thread_inflight_batch(batch)
185
185
  start_clock
186
+ ensure
187
+ @mutex.unlock
186
188
  end
187
189
  end
188
190
 
@@ -191,12 +193,14 @@ module LogStash; module Util
191
193
  end
192
194
 
193
195
  def close_batch(batch)
194
- @mutex.synchronize do
196
+ @mutex.lock
197
+ begin
195
198
  batch.close
196
-
197
199
  # there seems to be concurrency issues with metrics, keep it in the mutex
198
200
  @inflight_batches.delete(Thread.current)
199
201
  stop_clock(batch)
202
+ ensure
203
+ @mutex.unlock
200
204
  end
201
205
  end
202
206
 
@@ -18,21 +18,6 @@ module LogStash; module Util
18
18
  end
19
19
  alias_method(:<<, :push)
20
20
 
21
- # Offer an object to the queue, wait for the specified amount of time.
22
- # If adding to the queue was successful it wil return true, false otherwise.
23
- #
24
- # @param [Object] Object to add to the queue
25
- # @param [Integer] Time in milliseconds to wait before giving up
26
- # @return [Boolean] True if adding was successful if not it return false
27
- def offer(obj, timeout_ms)
28
- @queue.offer(obj, timeout_ms, TimeUnit::MILLISECONDS)
29
- end
30
-
31
- # Blocking
32
- def take
33
- @queue.take
34
- end
35
-
36
21
  # Block for X millis
37
22
  def poll(millis)
38
23
  @queue.poll(millis, TimeUnit::MILLISECONDS)
@@ -98,8 +83,11 @@ module LogStash; module Util
98
83
  end
99
84
 
100
85
  def inflight_batches
101
- @mutex.synchronize do
86
+ @mutex.lock
87
+ begin
102
88
  yield(@inflight_batches)
89
+ ensure
90
+ @mutex.unlock
103
91
  end
104
92
  end
105
93
 
@@ -115,16 +103,24 @@ module LogStash; module Util
115
103
 
116
104
  def read_batch
117
105
  batch = new_batch
118
- @mutex.synchronize { batch.read_next }
106
+ @mutex.lock
107
+ begin
108
+ batch.read_next
109
+ ensure
110
+ @mutex.unlock
111
+ end
119
112
  start_metrics(batch)
120
113
  batch
121
114
  end
122
115
 
123
116
  def start_metrics(batch)
124
- @mutex.synchronize do
125
- # there seems to be concurrency issues with metrics, keep it in the mutex
117
+ @mutex.lock
118
+ # there seems to be concurrency issues with metrics, keep it in the mutex
119
+ begin
126
120
  set_current_thread_inflight_batch(batch)
127
121
  start_clock
122
+ ensure
123
+ @mutex.unlock
128
124
  end
129
125
  end
130
126
 
@@ -133,10 +129,13 @@ module LogStash; module Util
133
129
  end
134
130
 
135
131
  def close_batch(batch)
136
- @mutex.synchronize do
132
+ @mutex.lock
133
+ begin
137
134
  # there seems to be concurrency issues with metrics, keep it in the mutex
138
135
  @inflight_batches.delete(Thread.current)
139
136
  stop_clock(batch)
137
+ ensure
138
+ @mutex.unlock
140
139
  end
141
140
  end
142
141
 
@@ -11,4 +11,4 @@
11
11
  # eventually this file should be in the root logstash lib fir and dependencies in logstash-core should be
12
12
  # fixed.
13
13
 
14
- LOGSTASH_VERSION = "6.0.0-alpha2"
14
+ LOGSTASH_VERSION = "6.0.0-beta1"
data/locales/en.yml CHANGED
@@ -81,14 +81,37 @@ en:
81
81
  ::: {%{hostname}}
82
82
  Hot threads at %{time}, busiestThreads=%{top_count}:
83
83
  thread_title: |-
84
- %{percent_of_cpu_time} % of cpu usage, state: %{thread_state}, thread name: '%{thread_name}'
84
+ %{percent_of_cpu_time} % of cpu usage, state: %{thread_state}, thread name: '%{thread_name}', thread id: %{thread_id}
85
85
  logging:
86
86
  unrecognized_option: |-
87
87
  unrecognized option [%{option}]
88
+ modules:
89
+ configuration:
90
+ parse-failed: |-
91
+ Failed to parse the module configuration: [%{error}]
92
+ modules-must-be-unique: >-
93
+ Only a single instance of any module can be run at a time. Duplicate
94
+ modules: %{duplicate_modules}
95
+ modules-invalid-name: >-
96
+ Invalid module name: %{module_name}
97
+ modules-variables-malformed: >-
98
+ Failed to parse module variable %{rawvar}. Must be in -M
99
+ "MODULE_NAME.KEY.SUBKEY=VALUE" format
100
+ modules-unavailable: >-
101
+ The modules specified are not available yet.
102
+ Specified modules: %{specified_modules}
103
+ Available modules: %{available_modules}
104
+ elasticsearch_connection_failed: >-
105
+ Failed to import module configurations to Elasticsearch and/or Kibana.
106
+ Module: %{module_name} has Elasticsearch hosts: %{elasticsearch_hosts} and Kibana hosts: %{kibana_hosts}
107
+ modules-too-many-specified: >-
108
+ Too many modules specified. Maximum allowed: %{max}, specified: %{specified_modules}
109
+
88
110
  runner:
89
111
  short-help: |-
90
112
  usage:
91
113
  bin/logstash -f CONFIG_PATH [-t] [-r] [] [-w COUNT] [-l LOG]
114
+ bin/logstash --modules MODULE_NAME [-M "MODULE_NAME.var.PLUGIN_TYPE.PLUGIN_NAME.VARIABLE_NAME=VALUE"] [-t] [-w COUNT] [-l LOG]
92
115
  bin/logstash -e CONFIG_STR [-t] [--log.level fatal|error|warn|info|debug|trace] [-w COUNT] [-l LOG]
93
116
  bin/logstash -i SHELL [--log.level fatal|error|warn|info|debug|trace]
94
117
  bin/logstash -V [--log.level fatal|error|warn|info|debug|trace]
@@ -100,6 +123,20 @@ en:
100
123
  the '-f yourlogstash.conf' flag?
101
124
  config-string-path-exclusive:
102
125
  Settings 'path.config' (-f) and 'config.string' (-e) can't be used simultaneously.
126
+ config-module-exclusive: >-
127
+ Settings 'path.config' (-f) or 'config.string' (-e) can't be used in conjunction with
128
+ (--modules) or the "modules:" block in the logstash.yml file.
129
+ reload-with-modules: >-
130
+ Configuration reloading can't be used with command-line or logstash.yml specified modules.
131
+ cli-module-override: >-
132
+ Both command-line and logstash.yml modules configurations detected.
133
+ Using command-line module configuration to override logstash.yml module configuration.
134
+ config-pipelines-failed-read: >-
135
+ Failed to read pipelines yaml file. Location: %{path}
136
+ config-pipelines-empty: >-
137
+ Pipelines YAML file is empty. Location: %{path}
138
+ config-pipelines-invalid: >-
139
+ Pipelines YAML file must contain an array of pipeline configs. Found "%{invalid_class}" in %{path}
103
140
  reload-without-config-path: >-
104
141
  Configuration reloading also requires passing a configuration path with '-f yourlogstash.conf'
105
142
  reload-with-config-string: >-
@@ -187,6 +224,24 @@ en:
187
224
  "%{default_output}"
188
225
  If you wish to use both defaults, please use
189
226
  the empty string for the '-e' flag.
227
+ modules: |+
228
+ Load Logstash modules.
229
+ Modules can be defined using multiple instances
230
+ '--modules module1 --modules module2',
231
+ or comma-separated syntax
232
+ '--modules=module1,module2'
233
+ Cannot be used in conjunction with '-e' or '-f'
234
+ Use of '--modules' will override modules declared
235
+ in the 'logstash.yml' file.
236
+ modules_variable: |+
237
+ Load variables for module template.
238
+ Multiple instances of '-M' or
239
+ '--modules.variable' are supported.
240
+ Ignored if '--modules' flag is not used.
241
+ Should be in the format of
242
+ '-M "MODULE_NAME.var.PLUGIN_TYPE.PLUGIN_NAME.VARIABLE_NAME=VALUE"'
243
+ as in
244
+ '-M "example.var.filter.mutate.fieldname=fieldvalue"'
190
245
  configtest: |+
191
246
  Check configuration for valid syntax and then exit.
192
247
  http_host: Web API binding host