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.
- 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
|