logstash-core 6.0.0.alpha2-java → 6.0.0.beta1-java
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/gemspec_jars.rb +6 -4
- data/lib/logstash-core/logstash-core.jar +0 -0
- data/lib/logstash-core/logstash-core.rb +2 -2
- data/lib/logstash-core/version.rb +1 -1
- data/lib/logstash-core_jars.rb +14 -10
- data/lib/logstash/agent.rb +4 -2
- data/lib/logstash/api/commands/default_metadata.rb +1 -1
- data/lib/logstash/api/commands/hot_threads_reporter.rb +8 -2
- data/lib/logstash/api/commands/node.rb +2 -2
- data/lib/logstash/api/commands/stats.rb +2 -2
- data/lib/logstash/bootstrap_check/bad_ruby.rb +2 -2
- data/lib/logstash/bootstrap_check/default_config.rb +2 -3
- data/lib/logstash/compiler.rb +12 -12
- data/lib/logstash/compiler/lscl.rb +17 -7
- data/lib/logstash/compiler/treetop_monkeypatches.rb +1 -0
- data/lib/logstash/config/config_ast.rb +11 -1
- data/lib/logstash/config/mixin.rb +5 -0
- data/lib/logstash/config/modules_common.rb +101 -0
- data/lib/logstash/config/source/base.rb +75 -0
- data/lib/logstash/config/source/local.rb +52 -50
- data/lib/logstash/config/source/modules.rb +55 -0
- data/lib/logstash/config/source/multi_local.rb +54 -10
- data/lib/logstash/config/source_loader.rb +1 -0
- data/lib/logstash/config/string_escape.rb +27 -0
- data/lib/logstash/elasticsearch_client.rb +142 -0
- data/lib/logstash/environment.rb +5 -1
- data/lib/logstash/event.rb +0 -1
- data/lib/logstash/instrument/global_metrics.rb +13 -0
- data/lib/logstash/instrument/metric_store.rb +16 -13
- data/lib/logstash/instrument/metric_type/counter.rb +6 -18
- data/lib/logstash/instrument/metric_type/gauge.rb +6 -12
- data/lib/logstash/instrument/periodic_poller/dlq.rb +19 -0
- data/lib/logstash/instrument/periodic_pollers.rb +3 -1
- data/lib/logstash/logging/logger.rb +43 -14
- data/lib/logstash/modules/cli_parser.rb +74 -0
- data/lib/logstash/modules/elasticsearch_config.rb +22 -0
- data/lib/logstash/modules/elasticsearch_importer.rb +37 -0
- data/lib/logstash/modules/elasticsearch_resource.rb +10 -0
- data/lib/logstash/modules/file_reader.rb +36 -0
- data/lib/logstash/modules/kibana_base.rb +24 -0
- data/lib/logstash/modules/kibana_client.rb +122 -0
- data/lib/logstash/modules/kibana_config.rb +125 -0
- data/lib/logstash/modules/kibana_dashboards.rb +36 -0
- data/lib/logstash/modules/kibana_importer.rb +17 -0
- data/lib/logstash/modules/kibana_resource.rb +10 -0
- data/lib/logstash/modules/kibana_settings.rb +40 -0
- data/lib/logstash/modules/logstash_config.rb +120 -0
- data/lib/logstash/modules/resource_base.rb +38 -0
- data/lib/logstash/modules/scaffold.rb +50 -0
- data/lib/logstash/modules/settings_merger.rb +23 -0
- data/lib/logstash/modules/util.rb +17 -0
- data/lib/logstash/namespace.rb +1 -0
- data/lib/logstash/pipeline.rb +66 -27
- data/lib/logstash/pipeline_settings.rb +1 -0
- data/lib/logstash/plugins/registry.rb +1 -0
- data/lib/logstash/runner.rb +47 -3
- data/lib/logstash/settings.rb +20 -1
- data/lib/logstash/util/dead_letter_queue_manager.rb +1 -1
- data/lib/logstash/util/safe_uri.rb +146 -11
- data/lib/logstash/util/thread_dump.rb +4 -3
- data/lib/logstash/util/wrapped_acked_queue.rb +28 -24
- data/lib/logstash/util/wrapped_synchronous_queue.rb +19 -20
- data/lib/logstash/version.rb +1 -1
- data/locales/en.yml +56 -1
- data/logstash-core.gemspec +6 -4
- data/spec/logstash/agent/converge_spec.rb +2 -2
- data/spec/logstash/agent_spec.rb +11 -3
- data/spec/logstash/api/modules/logging_spec.rb +13 -7
- data/spec/logstash/api/modules/node_plugins_spec.rb +23 -5
- data/spec/logstash/api/modules/node_spec.rb +17 -15
- data/spec/logstash/api/modules/node_stats_spec.rb +0 -1
- data/spec/logstash/api/modules/plugins_spec.rb +40 -9
- data/spec/logstash/api/modules/root_spec.rb +0 -1
- data/spec/logstash/api/rack_app_spec.rb +2 -1
- data/spec/logstash/compiler/compiler_spec.rb +54 -7
- data/spec/logstash/config/config_ast_spec.rb +47 -8
- data/spec/logstash/config/mixin_spec.rb +14 -2
- data/spec/logstash/config/pipeline_config_spec.rb +7 -7
- data/spec/logstash/config/source/local_spec.rb +5 -2
- data/spec/logstash/config/source/multi_local_spec.rb +56 -10
- data/spec/logstash/config/source_loader_spec.rb +1 -1
- data/spec/logstash/config/string_escape_spec.rb +24 -0
- data/spec/logstash/event_spec.rb +9 -0
- data/spec/logstash/filters/base_spec.rb +1 -1
- data/spec/logstash/instrument/metric_store_spec.rb +2 -3
- data/spec/logstash/instrument/metric_type/counter_spec.rb +0 -12
- data/spec/logstash/instrument/metric_type/gauge_spec.rb +1 -8
- data/spec/logstash/instrument/periodic_poller/dlq_spec.rb +17 -0
- data/spec/logstash/instrument/periodic_poller/jvm_spec.rb +1 -1
- data/spec/logstash/legacy_ruby_event_spec.rb +0 -9
- data/spec/logstash/legacy_ruby_timestamp_spec.rb +19 -14
- data/spec/logstash/modules/cli_parser_spec.rb +129 -0
- data/spec/logstash/modules/logstash_config_spec.rb +56 -0
- data/spec/logstash/modules/scaffold_spec.rb +239 -0
- data/spec/logstash/pipeline_dlq_commit_spec.rb +1 -1
- data/spec/logstash/pipeline_spec.rb +87 -20
- data/spec/logstash/runner_spec.rb +122 -5
- data/spec/logstash/setting_spec.rb +2 -2
- data/spec/logstash/settings/splittable_string_array_spec.rb +51 -0
- data/spec/logstash/timestamp_spec.rb +8 -2
- data/spec/logstash/util/safe_uri_spec.rb +16 -0
- data/spec/logstash/util/wrapped_acked_queue_spec.rb +63 -0
- data/spec/logstash/util/wrapped_synchronous_queue_spec.rb +0 -22
- data/spec/support/helpers.rb +1 -1
- data/spec/support/matchers.rb +21 -4
- metadata +102 -19
- data/lib/logstash/instrument/metric_type/base.rb +0 -31
- data/lib/logstash/program.rb +0 -14
- data/lib/logstash/string_interpolation.rb +0 -18
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 46f57cb18b555e501983b0d9d9ae61c3be63fd5925f444a4018adce705fe6b1f
|
4
|
+
data.tar.gz: 963cbd763704c8c84ca8bb5055412baa6b57d22d3e65ac03cd7f6b2434ec227a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 93a8a8282730e5c5e687b5bf2bc48d0aab82fa5ec8398336114f3e4a3d73d6705dac0854827ab9bfd5c52173177c72db87da5e6bb9a1ca95b14a826c51ec2860
|
7
|
+
data.tar.gz: 61df6640d1d26a96b014c9eb7399982a9829465472f9f05f5b4882c4a8720a821c6e4eca9548286dcb907e792f32f91ab1ca90fdb3f9c96dfbdb1b45d9e0b6a0
|
data/gemspec_jars.rb
CHANGED
@@ -2,9 +2,11 @@
|
|
2
2
|
# runtime dependencies to generate this gemspec dependencies file to be eval'ed by the gemspec
|
3
3
|
# for the jar-dependencies requirements.
|
4
4
|
|
5
|
+
gem.requirements << "jar org.apache.logging.log4j:log4j-slf4j-impl, 2.6.2"
|
5
6
|
gem.requirements << "jar org.apache.logging.log4j:log4j-api, 2.6.2"
|
6
7
|
gem.requirements << "jar org.apache.logging.log4j:log4j-core, 2.6.2"
|
7
|
-
gem.requirements << "jar com.fasterxml.jackson.core:jackson-core, 2.7.
|
8
|
-
gem.requirements << "jar com.fasterxml.jackson.core:jackson-databind, 2.7.
|
9
|
-
gem.requirements << "jar com.fasterxml.jackson.
|
10
|
-
gem.requirements << "jar com.fasterxml.jackson.
|
8
|
+
gem.requirements << "jar com.fasterxml.jackson.core:jackson-core, 2.7.3"
|
9
|
+
gem.requirements << "jar com.fasterxml.jackson.core:jackson-databind, 2.7.3"
|
10
|
+
gem.requirements << "jar com.fasterxml.jackson.core:jackson-annotations, 2.7.3"
|
11
|
+
gem.requirements << "jar com.fasterxml.jackson.module:jackson-module-afterburner, 2.7.3"
|
12
|
+
gem.requirements << "jar com.fasterxml.jackson.dataformat:jackson-dataformat-cbor, 2.7.3"
|
Binary file
|
@@ -8,8 +8,8 @@ end
|
|
8
8
|
require "logstash-core_jars"
|
9
9
|
|
10
10
|
# local dev setup
|
11
|
-
classes_dir = File.expand_path("../../../
|
12
|
-
resources_dir = File.expand_path("../../../
|
11
|
+
classes_dir = File.expand_path("../../../out/production/classes", __FILE__)
|
12
|
+
resources_dir = File.expand_path("../../../out/production/resources", __FILE__)
|
13
13
|
|
14
14
|
if File.directory?(classes_dir) && File.directory?(resources_dir)
|
15
15
|
# if in local dev setup, add target to classpath
|
data/lib/logstash-core_jars.rb
CHANGED
@@ -2,21 +2,25 @@
|
|
2
2
|
begin
|
3
3
|
require 'jar_dependencies'
|
4
4
|
rescue LoadError
|
5
|
+
require 'com/fasterxml/jackson/core/jackson-databind/2.7.3/jackson-databind-2.7.3.jar'
|
5
6
|
require 'org/apache/logging/log4j/log4j-core/2.6.2/log4j-core-2.6.2.jar'
|
6
|
-
require 'com/fasterxml/jackson/module/jackson-module-afterburner/2.7.4/jackson-module-afterburner-2.7.4.jar'
|
7
7
|
require 'org/apache/logging/log4j/log4j-api/2.6.2/log4j-api-2.6.2.jar'
|
8
|
-
require '
|
9
|
-
require 'com/fasterxml/jackson/core/jackson-annotations/2.7.
|
10
|
-
require '
|
11
|
-
require 'com/fasterxml/jackson/
|
8
|
+
require 'org/slf4j/slf4j-api/1.7.21/slf4j-api-1.7.21.jar'
|
9
|
+
require 'com/fasterxml/jackson/core/jackson-annotations/2.7.3/jackson-annotations-2.7.3.jar'
|
10
|
+
require 'org/apache/logging/log4j/log4j-slf4j-impl/2.6.2/log4j-slf4j-impl-2.6.2.jar'
|
11
|
+
require 'com/fasterxml/jackson/module/jackson-module-afterburner/2.7.3/jackson-module-afterburner-2.7.3.jar'
|
12
|
+
require 'com/fasterxml/jackson/dataformat/jackson-dataformat-cbor/2.7.3/jackson-dataformat-cbor-2.7.3.jar'
|
13
|
+
require 'com/fasterxml/jackson/core/jackson-core/2.7.3/jackson-core-2.7.3.jar'
|
12
14
|
end
|
13
15
|
|
14
16
|
if defined? Jars
|
17
|
+
require_jar( 'com.fasterxml.jackson.core', 'jackson-databind', '2.7.3' )
|
15
18
|
require_jar( 'org.apache.logging.log4j', 'log4j-core', '2.6.2' )
|
16
|
-
require_jar( 'com.fasterxml.jackson.module', 'jackson-module-afterburner', '2.7.4' )
|
17
19
|
require_jar( 'org.apache.logging.log4j', 'log4j-api', '2.6.2' )
|
18
|
-
require_jar( '
|
19
|
-
require_jar( 'com.fasterxml.jackson.core', 'jackson-annotations', '2.7.
|
20
|
-
require_jar( '
|
21
|
-
require_jar( 'com.fasterxml.jackson.
|
20
|
+
require_jar( 'org.slf4j', 'slf4j-api', '1.7.21' )
|
21
|
+
require_jar( 'com.fasterxml.jackson.core', 'jackson-annotations', '2.7.3' )
|
22
|
+
require_jar( 'org.apache.logging.log4j', 'log4j-slf4j-impl', '2.6.2' )
|
23
|
+
require_jar( 'com.fasterxml.jackson.module', 'jackson-module-afterburner', '2.7.3' )
|
24
|
+
require_jar( 'com.fasterxml.jackson.dataformat', 'jackson-dataformat-cbor', '2.7.3' )
|
25
|
+
require_jar( 'com.fasterxml.jackson.core', 'jackson-core', '2.7.3' )
|
22
26
|
end
|
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, :settings, :webserver, :dispatcher
|
28
|
+
attr_reader :metric, :name, :settings, :webserver, :dispatcher, :ephemeral_id
|
29
29
|
attr_accessor :logger
|
30
30
|
|
31
31
|
# initialize method for LogStash::Agent
|
@@ -37,6 +37,7 @@ class LogStash::Agent
|
|
37
37
|
@logger = self.class.logger
|
38
38
|
@settings = settings
|
39
39
|
@auto_reload = setting("config.reload.automatic")
|
40
|
+
@ephemeral_id = SecureRandom.uuid
|
40
41
|
|
41
42
|
# Do not use @pipelines directly. Use #with_pipelines which does locking
|
42
43
|
@pipelines = {}
|
@@ -57,7 +58,8 @@ class LogStash::Agent
|
|
57
58
|
@source_loader = source_loader
|
58
59
|
end
|
59
60
|
|
60
|
-
|
61
|
+
# Normalize time interval to seconds
|
62
|
+
@reload_interval = setting("config.reload.interval") / 1_000_000_000.0
|
61
63
|
|
62
64
|
@collect_metric = setting("metric.collect")
|
63
65
|
|
@@ -17,7 +17,12 @@ class HotThreadsReport
|
|
17
17
|
report << '=' * STRING_SEPARATOR_LENGTH
|
18
18
|
report << "\n"
|
19
19
|
hash[:threads].each do |thread|
|
20
|
-
|
20
|
+
line_str = I18n.t("logstash.web_api.hot_threads.thread_title",
|
21
|
+
:percent_of_cpu_time => thread[:percent_of_cpu_time],
|
22
|
+
:thread_state => thread[:state],
|
23
|
+
:thread_name => thread[:name],
|
24
|
+
:thread_id => thread[:thread_id])
|
25
|
+
thread_report = "#{line_str} \n"
|
21
26
|
thread_report << "#{thread[:path]}\n" if thread[:path]
|
22
27
|
thread[:traces].each do |trace|
|
23
28
|
thread_report << "\t#{trace}\n"
|
@@ -31,9 +36,10 @@ class HotThreadsReport
|
|
31
36
|
|
32
37
|
def to_hash
|
33
38
|
hash = { :time => Time.now.iso8601, :busiest_threads => @thread_dump.top_count, :threads => [] }
|
34
|
-
@thread_dump.each do |
|
39
|
+
@thread_dump.each do |_hash|
|
35
40
|
thread_name, thread_path = _hash["thread.name"].split(": ")
|
36
41
|
thread = { :name => thread_name,
|
42
|
+
:thread_id => _hash["thread.id"],
|
37
43
|
:percent_of_cpu_time => cpu_time_as_percent(_hash),
|
38
44
|
:state => _hash["thread.state"]
|
39
45
|
}
|
@@ -27,8 +27,8 @@ module LogStash
|
|
27
27
|
def pipeline(pipeline_id)
|
28
28
|
extract_metrics(
|
29
29
|
[:stats, :pipelines, pipeline_id.to_sym, :config],
|
30
|
-
:workers, :batch_size, :batch_delay, :config_reload_automatic, :config_reload_interval
|
31
|
-
)
|
30
|
+
:workers, :batch_size, :batch_delay, :config_reload_automatic, :config_reload_interval, :dead_letter_queue_enabled, :dead_letter_queue_path
|
31
|
+
).reject{|_, v|v.nil?}
|
32
32
|
rescue
|
33
33
|
{}
|
34
34
|
end
|
@@ -4,8 +4,8 @@ require "logstash/errors"
|
|
4
4
|
module LogStash module BootstrapCheck
|
5
5
|
class BadRuby
|
6
6
|
def self.check(settings)
|
7
|
-
if RUBY_VERSION < "
|
8
|
-
raise LogStash::BootstrapCheckError, "Ruby
|
7
|
+
if RUBY_VERSION < "2.0"
|
8
|
+
raise LogStash::BootstrapCheckError, "Ruby 2.0 or later is required. (You are running: " + RUBY_VERSION + ")"
|
9
9
|
end
|
10
10
|
end
|
11
11
|
end
|
@@ -1,13 +1,12 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
require "logstash/errors"
|
3
|
+
require "logstash/logging"
|
3
4
|
|
4
5
|
module LogStash module BootstrapCheck
|
5
6
|
class DefaultConfig
|
6
7
|
def self.check(settings)
|
7
8
|
# currently none of the checks applies if there are multiple pipelines
|
8
|
-
|
9
|
-
raise LogStash::BootstrapCheckError, I18n.t("logstash.runner.reload-with-config-string")
|
10
|
-
end
|
9
|
+
# See LogStash::Config::Source::Base for any further settings conflict checks
|
11
10
|
end
|
12
11
|
end
|
13
12
|
end end
|
data/lib/logstash/compiler.rb
CHANGED
@@ -2,19 +2,18 @@ require 'logstash/util/loggable'
|
|
2
2
|
require 'logstash/compiler/lscl/lscl_grammar'
|
3
3
|
|
4
4
|
java_import org.logstash.config.ir.PipelineIR
|
5
|
-
java_import org.logstash.config.ir.graph.Graph
|
6
|
-
java_import org.logstash.config.ir.graph.PluginVertex;
|
5
|
+
java_import org.logstash.config.ir.graph.Graph
|
7
6
|
|
8
7
|
module LogStash; class Compiler
|
9
8
|
include ::LogStash::Util::Loggable
|
10
9
|
|
11
|
-
def self.compile_sources(
|
10
|
+
def self.compile_sources(sources_with_metadata, settings)
|
12
11
|
graph_sections = sources_with_metadata.map do |swm|
|
13
|
-
self.compile_graph(swm)
|
12
|
+
self.compile_graph(swm, settings)
|
14
13
|
end
|
15
14
|
|
16
|
-
input_graph =
|
17
|
-
output_graph =
|
15
|
+
input_graph = Graph.combine(*graph_sections.map {|s| s[:input] }).graph
|
16
|
+
output_graph = Graph.combine(*graph_sections.map {|s| s[:output] }).graph
|
18
17
|
|
19
18
|
filter_graph = graph_sections.reduce(nil) do |acc, s|
|
20
19
|
filter_section = s[:filter]
|
@@ -28,10 +27,10 @@ module LogStash; class Compiler
|
|
28
27
|
|
29
28
|
original_source = sources_with_metadata.map(&:text).join("\n")
|
30
29
|
|
31
|
-
|
30
|
+
PipelineIR.new(input_graph, filter_graph, output_graph, original_source)
|
32
31
|
end
|
33
32
|
|
34
|
-
def self.compile_ast(source_with_metadata)
|
33
|
+
def self.compile_ast(source_with_metadata, settings)
|
35
34
|
if !source_with_metadata.is_a?(org.logstash.common.SourceWithMetadata)
|
36
35
|
raise ArgumentError, "Expected 'org.logstash.common.SourceWithMetadata', got #{source_with_metadata.class}"
|
37
36
|
end
|
@@ -43,14 +42,15 @@ module LogStash; class Compiler
|
|
43
42
|
raise ConfigurationError, grammar.failure_reason
|
44
43
|
end
|
45
44
|
|
45
|
+
config.process_escape_sequences = settings.get_value("config.support_escapes")
|
46
46
|
config.compile(source_with_metadata)
|
47
47
|
end
|
48
48
|
|
49
|
-
def self.compile_imperative(source_with_metadata)
|
50
|
-
compile_ast(source_with_metadata)
|
49
|
+
def self.compile_imperative(source_with_metadata, settings)
|
50
|
+
compile_ast(source_with_metadata, settings)
|
51
51
|
end
|
52
52
|
|
53
|
-
def self.compile_graph(source_with_metadata)
|
54
|
-
Hash[compile_imperative(source_with_metadata).map {|section,icompiled| [section, icompiled.toGraph]}]
|
53
|
+
def self.compile_graph(source_with_metadata, settings)
|
54
|
+
Hash[compile_imperative(source_with_metadata, settings).map {|section,icompiled| [section, icompiled.toGraph]}]
|
55
55
|
end
|
56
56
|
end; end
|
@@ -2,10 +2,14 @@
|
|
2
2
|
require 'logstash/errors'
|
3
3
|
require "treetop"
|
4
4
|
require "logstash/compiler/treetop_monkeypatches"
|
5
|
+
require "logstash/config/string_escape"
|
6
|
+
|
5
7
|
java_import org.logstash.config.ir.DSL
|
6
8
|
java_import org.logstash.common.SourceWithMetadata
|
7
9
|
|
8
10
|
module LogStashCompilerLSCLGrammar; module LogStash; module Compiler; module LSCL; module AST
|
11
|
+
PROCESS_ESCAPE_SEQUENCES = :process_escape_sequences
|
12
|
+
|
9
13
|
# Helpers for parsing LSCL files
|
10
14
|
module Helpers
|
11
15
|
def source_meta
|
@@ -46,10 +50,6 @@ module LogStashCompilerLSCLGrammar; module LogStash; module Compiler; module LSC
|
|
46
50
|
[self.input.line_of(start), self.input.column_of(start)]
|
47
51
|
end
|
48
52
|
|
49
|
-
def empty_source_meta()
|
50
|
-
org.logstash.common.SourceWithMetadata.new(base_protocol, base_id, nil)
|
51
|
-
end
|
52
|
-
|
53
53
|
def jdsl
|
54
54
|
org.logstash.config.ir.DSL
|
55
55
|
end
|
@@ -77,6 +77,10 @@ module LogStashCompilerLSCLGrammar; module LogStash; module Compiler; module LSC
|
|
77
77
|
|
78
78
|
class Config < Node
|
79
79
|
include Helpers
|
80
|
+
|
81
|
+
def process_escape_sequences=(val)
|
82
|
+
set_meta(PROCESS_ESCAPE_SEQUENCES, val)
|
83
|
+
end
|
80
84
|
|
81
85
|
def compile(base_source_with_metadata=nil)
|
82
86
|
# There is no way to move vars across nodes in treetop :(
|
@@ -99,11 +103,12 @@ module LogStashCompilerLSCLGrammar; module LogStash; module Compiler; module LSC
|
|
99
103
|
end
|
100
104
|
end
|
101
105
|
|
106
|
+
compiled_section_map = {}
|
102
107
|
section_map.keys.each do |key|
|
103
|
-
|
108
|
+
compiled_section_map[key] = compose_for(key).call(*section_map[key])
|
104
109
|
end
|
105
110
|
|
106
|
-
|
111
|
+
compiled_section_map
|
107
112
|
end
|
108
113
|
end
|
109
114
|
|
@@ -179,7 +184,12 @@ module LogStashCompilerLSCLGrammar; module LogStash; module Compiler; module LSC
|
|
179
184
|
|
180
185
|
class String < Value
|
181
186
|
def expr
|
182
|
-
|
187
|
+
value = if get_meta(PROCESS_ESCAPE_SEQUENCES)
|
188
|
+
::LogStash::Config::StringEscape.process_escapes(text_value[1...-1])
|
189
|
+
else
|
190
|
+
text_value[1...-1]
|
191
|
+
end
|
192
|
+
jdsl.eValue(source_meta, value)
|
183
193
|
end
|
184
194
|
end
|
185
195
|
|
@@ -5,6 +5,7 @@ require "treetop"
|
|
5
5
|
require "logstash/compiler/treetop_monkeypatches"
|
6
6
|
|
7
7
|
module LogStash; module Config; module AST
|
8
|
+
PROCESS_ESCAPE_SEQUENCES = :process_escape_sequences
|
8
9
|
|
9
10
|
def self.deferred_conditionals=(val)
|
10
11
|
@deferred_conditionals = val
|
@@ -37,6 +38,11 @@ module LogStash; module Config; module AST
|
|
37
38
|
end
|
38
39
|
|
39
40
|
class Config < Node
|
41
|
+
def process_escape_sequences=(val)
|
42
|
+
set_meta(PROCESS_ESCAPE_SEQUENCES, val)
|
43
|
+
end
|
44
|
+
|
45
|
+
|
40
46
|
def compile
|
41
47
|
LogStash::Config::AST.deferred_conditionals = []
|
42
48
|
LogStash::Config::AST.deferred_conditionals_index = 0
|
@@ -279,7 +285,11 @@ module LogStash; module Config; module AST
|
|
279
285
|
end
|
280
286
|
class String < Value
|
281
287
|
def compile
|
282
|
-
|
288
|
+
if get_meta(PROCESS_ESCAPE_SEQUENCES)
|
289
|
+
Unicode.wrap(LogStash::Config::StringEscape.process_escapes(text_value[1...-1]))
|
290
|
+
else
|
291
|
+
Unicode.wrap(text_value[1...-1])
|
292
|
+
end
|
283
293
|
end
|
284
294
|
end
|
285
295
|
class RegExp < Value
|
@@ -143,6 +143,9 @@ module LogStash::Config::Mixin
|
|
143
143
|
end # def config_init
|
144
144
|
|
145
145
|
module DSL
|
146
|
+
|
147
|
+
include LogStash::Util::EnvironmentVariables
|
148
|
+
|
146
149
|
attr_accessor :flags
|
147
150
|
|
148
151
|
# If name is given, set the name and return it.
|
@@ -388,6 +391,8 @@ module LogStash::Config::Mixin
|
|
388
391
|
# (see LogStash::Inputs::File for example)
|
389
392
|
result = nil
|
390
393
|
|
394
|
+
value = deep_replace(value)
|
395
|
+
|
391
396
|
if validator.nil?
|
392
397
|
return true, value
|
393
398
|
elsif validator.is_a?(Array)
|
@@ -0,0 +1,101 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require "logstash/util/loggable"
|
3
|
+
require "logstash/elasticsearch_client"
|
4
|
+
require "logstash/modules/kibana_client"
|
5
|
+
require "logstash/modules/elasticsearch_importer"
|
6
|
+
require "logstash/modules/kibana_importer"
|
7
|
+
require "logstash/modules/settings_merger"
|
8
|
+
require "logstash/errors"
|
9
|
+
|
10
|
+
module LogStash module Config
|
11
|
+
class ModulesCommon # extracted here for bwc with 5.x
|
12
|
+
include LogStash::Util::Loggable
|
13
|
+
|
14
|
+
MODULES_MAX_PIPELINES = 1
|
15
|
+
|
16
|
+
def self.pipeline_configs(settings)
|
17
|
+
pipelines = []
|
18
|
+
plugin_modules = LogStash::PLUGIN_REGISTRY.plugins_with_type(:modules)
|
19
|
+
|
20
|
+
cli_settings = settings.get("modules.cli")
|
21
|
+
yml_settings = settings.get("modules")
|
22
|
+
|
23
|
+
modules_array = if !(cli_settings.empty? && yml_settings.empty?)
|
24
|
+
LogStash::Modules::SettingsMerger.merge(cli_settings, yml_settings)
|
25
|
+
elsif cli_settings.empty?
|
26
|
+
yml_settings
|
27
|
+
else
|
28
|
+
cli_settings
|
29
|
+
end
|
30
|
+
|
31
|
+
if modules_array.empty?
|
32
|
+
# no specifed modules
|
33
|
+
return pipelines
|
34
|
+
end
|
35
|
+
logger.debug("Specified modules", :modules_array => modules_array.to_s)
|
36
|
+
|
37
|
+
module_names = modules_array.collect {|module_hash| module_hash["name"]}
|
38
|
+
if module_names.size > MODULES_MAX_PIPELINES
|
39
|
+
error_message = I18n.t("logstash.modules.configuration.modules-too-many-specified", :max => MODULES_MAX_PIPELINES, :specified_modules => module_names.join(', '))
|
40
|
+
raise LogStash::ConfigLoadingError, error_message
|
41
|
+
end
|
42
|
+
|
43
|
+
if module_names.length > module_names.uniq.length
|
44
|
+
duplicate_modules = module_names.group_by(&:to_s).select { |_,v| v.size > 1 }.keys
|
45
|
+
raise LogStash::ConfigLoadingError, I18n.t("logstash.modules.configuration.modules-must-be-unique", :duplicate_modules => duplicate_modules)
|
46
|
+
end
|
47
|
+
|
48
|
+
available_module_names = plugin_modules.map(&:module_name)
|
49
|
+
specified_and_available_names = module_names & available_module_names
|
50
|
+
|
51
|
+
if (specified_and_available_names).empty?
|
52
|
+
i18n_opts = {:specified_modules => module_names, :available_modules => available_module_names}
|
53
|
+
raise LogStash::ConfigLoadingError, I18n.t("logstash.modules.configuration.modules-unavailable", i18n_opts)
|
54
|
+
end
|
55
|
+
|
56
|
+
specified_and_available_names.each do |module_name|
|
57
|
+
connect_fail_args = {}
|
58
|
+
begin
|
59
|
+
module_settings = settings.clone
|
60
|
+
|
61
|
+
module_hash = modules_array.find {|m| m["name"] == module_name}
|
62
|
+
current_module = plugin_modules.find { |allmodules| allmodules.module_name == module_name }
|
63
|
+
|
64
|
+
alt_name = "module-#{module_name}"
|
65
|
+
pipeline_id = alt_name
|
66
|
+
module_settings.set("pipeline.id", pipeline_id)
|
67
|
+
current_module.with_settings(module_hash)
|
68
|
+
config_test = settings.get("config.test_and_exit")
|
69
|
+
if !config_test
|
70
|
+
esclient = LogStash::ElasticsearchClient.build(module_hash)
|
71
|
+
kbnclient = LogStash::Modules::KibanaClient.new(module_hash)
|
72
|
+
esconnected = esclient.can_connect?
|
73
|
+
kbnconnected = kbnclient.can_connect?
|
74
|
+
if esconnected && kbnconnected
|
75
|
+
current_module.add_kibana_version(kbnclient.version_parts)
|
76
|
+
current_module.import(
|
77
|
+
LogStash::Modules::ElasticsearchImporter.new(esclient),
|
78
|
+
LogStash::Modules::KibanaImporter.new(kbnclient)
|
79
|
+
)
|
80
|
+
else
|
81
|
+
connect_fail_args[:module_name] = module_name
|
82
|
+
connect_fail_args[:elasticsearch_hosts] = esclient.host_settings
|
83
|
+
connect_fail_args[:kibana_hosts] = kbnclient.host_settings
|
84
|
+
end
|
85
|
+
end
|
86
|
+
config_string = current_module.config_string
|
87
|
+
pipelines << {"pipeline_id" => pipeline_id, "alt_name" => alt_name, "config_string" => config_string, "settings" => module_settings}
|
88
|
+
rescue => e
|
89
|
+
new_error = LogStash::ConfigLoadingError.new(I18n.t("logstash.modules.configuration.parse-failed", :error => e.message))
|
90
|
+
new_error.set_backtrace(e.backtrace)
|
91
|
+
raise new_error
|
92
|
+
end
|
93
|
+
|
94
|
+
if !connect_fail_args.empty?
|
95
|
+
raise LogStash::ConfigLoadingError, I18n.t("logstash.modules.configuration.elasticsearch_connection_failed", connect_fail_args)
|
96
|
+
end
|
97
|
+
end
|
98
|
+
pipelines
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end end
|