logstash-core 5.6.16-java → 6.0.0.alpha1-java
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/gemspec_jars.rb +4 -7
- data/lib/logstash-core/logstash-core.jar +0 -0
- data/lib/logstash-core/version.rb +4 -8
- data/lib/logstash-core_jars.rb +12 -26
- data/lib/logstash/agent.rb +261 -246
- data/lib/logstash/api/commands/default_metadata.rb +1 -1
- data/lib/logstash/api/commands/hot_threads_reporter.rb +5 -11
- data/lib/logstash/api/commands/node.rb +3 -2
- data/lib/logstash/api/commands/stats.rb +3 -2
- data/lib/logstash/bootstrap_check/bad_java.rb +16 -0
- data/lib/logstash/bootstrap_check/bad_ruby.rb +12 -0
- data/lib/logstash/bootstrap_check/default_config.rb +17 -0
- data/lib/logstash/compiler.rb +38 -0
- data/lib/logstash/compiler/lscl.rb +566 -0
- data/lib/logstash/compiler/lscl/lscl_grammar.rb +3503 -0
- data/lib/logstash/compiler/treetop_monkeypatches.rb +92 -0
- data/lib/logstash/config/config_ast.rb +4 -82
- data/lib/logstash/config/mixin.rb +73 -41
- data/lib/logstash/config/pipeline_config.rb +48 -0
- data/lib/logstash/config/source/base.rb +16 -0
- data/lib/logstash/config/source/local.rb +215 -0
- data/lib/logstash/config/source_loader.rb +125 -0
- data/lib/logstash/converge_result.rb +103 -0
- data/lib/logstash/environment.rb +6 -19
- data/lib/logstash/errors.rb +2 -0
- data/lib/logstash/execution_context.rb +4 -7
- data/lib/logstash/filter_delegator.rb +6 -9
- data/lib/logstash/inputs/base.rb +0 -2
- data/lib/logstash/instrument/collector.rb +5 -7
- data/lib/logstash/instrument/metric_store.rb +12 -12
- data/lib/logstash/instrument/metric_type/mean.rb +0 -5
- data/lib/logstash/instrument/namespaced_metric.rb +0 -4
- data/lib/logstash/instrument/namespaced_null_metric.rb +0 -4
- data/lib/logstash/instrument/null_metric.rb +0 -10
- data/lib/logstash/instrument/periodic_poller/cgroup.rb +85 -168
- data/lib/logstash/instrument/periodic_poller/jvm.rb +5 -5
- data/lib/logstash/instrument/periodic_poller/pq.rb +3 -7
- data/lib/logstash/instrument/periodic_pollers.rb +1 -3
- data/lib/logstash/instrument/wrapped_write_client.rb +24 -33
- data/lib/logstash/logging/logger.rb +15 -47
- data/lib/logstash/namespace.rb +0 -1
- data/lib/logstash/output_delegator.rb +5 -7
- data/lib/logstash/outputs/base.rb +0 -2
- data/lib/logstash/pipeline.rb +159 -87
- data/lib/logstash/pipeline_action.rb +13 -0
- data/lib/logstash/pipeline_action/base.rb +29 -0
- data/lib/logstash/pipeline_action/create.rb +47 -0
- data/lib/logstash/pipeline_action/reload.rb +48 -0
- data/lib/logstash/pipeline_action/stop.rb +23 -0
- data/lib/logstash/plugin.rb +0 -1
- data/lib/logstash/plugins/hooks_registry.rb +6 -0
- data/lib/logstash/plugins/registry.rb +0 -1
- data/lib/logstash/program.rb +14 -0
- data/lib/logstash/queue_factory.rb +5 -1
- data/lib/logstash/runner.rb +58 -80
- data/lib/logstash/settings.rb +3 -27
- data/lib/logstash/state_resolver.rb +41 -0
- data/lib/logstash/util/java_version.rb +6 -0
- data/lib/logstash/util/safe_uri.rb +12 -148
- data/lib/logstash/util/thread_dump.rb +4 -7
- data/lib/logstash/util/wrapped_acked_queue.rb +36 -39
- data/lib/logstash/util/wrapped_synchronous_queue.rb +29 -39
- data/lib/logstash/version.rb +10 -8
- data/locales/en.yml +3 -54
- data/logstash-core.gemspec +8 -35
- data/spec/{logstash/api/modules → api/lib/api}/logging_spec.rb +10 -1
- data/spec/{logstash/api/modules → api/lib/api}/node_plugins_spec.rb +2 -1
- data/spec/{logstash/api/modules → api/lib/api}/node_spec.rb +3 -3
- data/spec/{logstash/api/modules → api/lib/api}/node_stats_spec.rb +3 -7
- data/spec/{logstash/api/modules → api/lib/api}/plugins_spec.rb +3 -4
- data/spec/{logstash/api/modules → api/lib/api}/root_spec.rb +2 -2
- data/spec/api/lib/api/support/resource_dsl_methods.rb +87 -0
- data/spec/{logstash/api/commands/stats_spec.rb → api/lib/commands/stats.rb} +2 -7
- data/spec/{logstash/api → api/lib}/errors_spec.rb +1 -1
- data/spec/{logstash/api → api/lib}/rack_app_spec.rb +0 -0
- data/spec/api/spec_helper.rb +106 -0
- data/spec/logstash/agent/converge_spec.rb +286 -0
- data/spec/logstash/agent/metrics_spec.rb +244 -0
- data/spec/logstash/agent_spec.rb +213 -225
- data/spec/logstash/compiler/compiler_spec.rb +584 -0
- data/spec/logstash/config/config_ast_spec.rb +8 -47
- data/spec/logstash/config/mixin_spec.rb +2 -42
- data/spec/logstash/config/pipeline_config_spec.rb +75 -0
- data/spec/logstash/config/source/local_spec.rb +395 -0
- data/spec/logstash/config/source_loader_spec.rb +122 -0
- data/spec/logstash/converge_result_spec.rb +179 -0
- data/spec/logstash/event_spec.rb +0 -66
- data/spec/logstash/execution_context_spec.rb +8 -12
- data/spec/logstash/filter_delegator_spec.rb +12 -24
- data/spec/logstash/inputs/base_spec.rb +7 -5
- data/spec/logstash/instrument/periodic_poller/cgroup_spec.rb +92 -225
- data/spec/logstash/instrument/periodic_poller/jvm_spec.rb +1 -1
- data/spec/logstash/instrument/periodic_poller/os_spec.rb +32 -29
- data/spec/logstash/instrument/wrapped_write_client_spec.rb +33 -33
- data/spec/logstash/legacy_ruby_event_spec.rb +13 -4
- data/spec/logstash/output_delegator_spec.rb +11 -20
- data/spec/logstash/outputs/base_spec.rb +7 -5
- data/spec/logstash/pipeline_action/create_spec.rb +83 -0
- data/spec/logstash/pipeline_action/reload_spec.rb +83 -0
- data/spec/logstash/pipeline_action/stop_spec.rb +37 -0
- data/spec/logstash/pipeline_pq_file_spec.rb +1 -1
- data/spec/logstash/pipeline_spec.rb +81 -137
- data/spec/logstash/plugin_spec.rb +2 -1
- data/spec/logstash/plugins/hooks_registry_spec.rb +6 -0
- data/spec/logstash/queue_factory_spec.rb +13 -1
- data/spec/logstash/runner_spec.rb +29 -140
- data/spec/logstash/settings/writable_directory_spec.rb +10 -13
- data/spec/logstash/settings_spec.rb +0 -91
- data/spec/logstash/state_resolver_spec.rb +156 -0
- data/spec/logstash/timestamp_spec.rb +2 -6
- data/spec/logstash/util/java_version_spec.rb +22 -0
- data/spec/logstash/util/safe_uri_spec.rb +0 -56
- data/spec/logstash/util/wrapped_synchronous_queue_spec.rb +22 -0
- data/spec/support/helpers.rb +9 -11
- data/spec/support/matchers.rb +96 -6
- data/spec/support/mocks_classes.rb +80 -0
- data/spec/support/shared_contexts.rb +2 -27
- metadata +100 -149
- data/lib/logstash/config/loader.rb +0 -107
- data/lib/logstash/config/modules_common.rb +0 -103
- data/lib/logstash/config/source/modules.rb +0 -55
- data/lib/logstash/config/string_escape.rb +0 -27
- data/lib/logstash/dependency_report.rb +0 -131
- data/lib/logstash/dependency_report_runner.rb +0 -17
- data/lib/logstash/elasticsearch_client.rb +0 -142
- data/lib/logstash/instrument/global_metrics.rb +0 -13
- data/lib/logstash/instrument/periodic_poller/dlq.rb +0 -24
- data/lib/logstash/modules/cli_parser.rb +0 -74
- data/lib/logstash/modules/elasticsearch_config.rb +0 -22
- data/lib/logstash/modules/elasticsearch_importer.rb +0 -37
- data/lib/logstash/modules/elasticsearch_resource.rb +0 -10
- data/lib/logstash/modules/file_reader.rb +0 -36
- data/lib/logstash/modules/kibana_base.rb +0 -24
- data/lib/logstash/modules/kibana_client.rb +0 -124
- data/lib/logstash/modules/kibana_config.rb +0 -105
- data/lib/logstash/modules/kibana_dashboards.rb +0 -36
- data/lib/logstash/modules/kibana_importer.rb +0 -17
- data/lib/logstash/modules/kibana_resource.rb +0 -10
- data/lib/logstash/modules/kibana_settings.rb +0 -40
- data/lib/logstash/modules/logstash_config.rb +0 -120
- data/lib/logstash/modules/resource_base.rb +0 -38
- data/lib/logstash/modules/scaffold.rb +0 -52
- data/lib/logstash/modules/settings_merger.rb +0 -23
- data/lib/logstash/modules/util.rb +0 -17
- data/lib/logstash/util/dead_letter_queue_manager.rb +0 -61
- data/lib/logstash/util/environment_variables.rb +0 -43
- data/spec/logstash/config/loader_spec.rb +0 -38
- data/spec/logstash/config/string_escape_spec.rb +0 -24
- data/spec/logstash/instrument/periodic_poller/dlq_spec.rb +0 -17
- data/spec/logstash/modules/logstash_config_spec.rb +0 -56
- data/spec/logstash/modules/scaffold_spec.rb +0 -234
- data/spec/logstash/pipeline_dlq_commit_spec.rb +0 -109
- data/spec/logstash/settings/splittable_string_array_spec.rb +0 -51
- data/spec/logstash/util/wrapped_acked_queue_spec.rb +0 -49
- data/versions-gem-copy.yml +0 -12
@@ -1,36 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
require "logstash/namespace"
|
3
|
-
require "logstash/logging"
|
4
|
-
require_relative "kibana_base"
|
5
|
-
|
6
|
-
module LogStash module Modules class KibanaDashboards < KibanaBase
|
7
|
-
include LogStash::Util::Loggable
|
8
|
-
|
9
|
-
attr_reader :import_path, :content
|
10
|
-
|
11
|
-
# content is a list of kibana file resources
|
12
|
-
def initialize(import_path, content)
|
13
|
-
@import_path, @content = import_path, content
|
14
|
-
end
|
15
|
-
|
16
|
-
def import(client)
|
17
|
-
# e.g. curl "http://localhost:5601/api/kibana/dashboards/import"
|
18
|
-
# extract and prepare all objects
|
19
|
-
objects = []
|
20
|
-
content.each do |resource|
|
21
|
-
hash = {
|
22
|
-
"id" => resource.content_id,
|
23
|
-
"type" => resource.content_type,
|
24
|
-
"version" => 1,
|
25
|
-
"attributes" => resource.content_as_object
|
26
|
-
}
|
27
|
-
objects << hash
|
28
|
-
end
|
29
|
-
body = {:version => client.version, :objects => objects}
|
30
|
-
response = client.post(import_path, body)
|
31
|
-
if response.failed?
|
32
|
-
logger.error("Attempted POST failed", :url_path => import_path, :response => response.body)
|
33
|
-
end
|
34
|
-
response
|
35
|
-
end
|
36
|
-
end end end
|
@@ -1,17 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
require "logstash/namespace"
|
3
|
-
require "logstash/logging"
|
4
|
-
|
5
|
-
module LogStash module Modules class KibanaImporter
|
6
|
-
include LogStash::Util::Loggable
|
7
|
-
|
8
|
-
def initialize(client)
|
9
|
-
@client = client
|
10
|
-
end
|
11
|
-
|
12
|
-
def put(via_kibana)
|
13
|
-
path = via_kibana.import_path
|
14
|
-
logger.debug("Attempting POST", :url_path => path, :content => via_kibana.content)
|
15
|
-
via_kibana.import(@client)
|
16
|
-
end
|
17
|
-
end end end
|
@@ -1,40 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
require "logstash/namespace"
|
3
|
-
require "logstash/logging"
|
4
|
-
require_relative "kibana_base"
|
5
|
-
|
6
|
-
module LogStash module Modules class KibanaSettings < KibanaBase
|
7
|
-
include LogStash::Util::Loggable
|
8
|
-
|
9
|
-
class Setting
|
10
|
-
attr_reader :name, :value
|
11
|
-
def initialize(name, value)
|
12
|
-
@name, @value = name, value
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
attr_reader :import_path, :content
|
17
|
-
|
18
|
-
# content is an array of Setting required for this module
|
19
|
-
def initialize(import_path, content)
|
20
|
-
@import_path, @content = import_path, content
|
21
|
-
end
|
22
|
-
|
23
|
-
def import(client)
|
24
|
-
# e.g. curl "http://localhost:5601/api/kibana/settings"
|
25
|
-
# 6.0.0-alpha3 -> {"settings":{"buildNum":{"userValue":15613},"defaultIndex":{"userValue":"arcsight-*"}}}
|
26
|
-
# 5.4 -> {"settings":{"defaultIndex":{"userValue":"cef-*"},"metrics:max_buckets":{"userValue":"600000"}}}
|
27
|
-
# array of Setting objects
|
28
|
-
# The POST api body { "changes": { "defaultIndex": "arcsight-*", "metrics:max_buckets": "400" } }
|
29
|
-
settings = {}
|
30
|
-
content.each do |setting|
|
31
|
-
settings[setting.name] = "#{setting.value}"
|
32
|
-
end
|
33
|
-
body = {"changes" => settings}
|
34
|
-
response = client.post(import_path, body)
|
35
|
-
if response.failed?
|
36
|
-
logger.error("Attempted POST failed", :url_path => import_path, :response => response.body)
|
37
|
-
end
|
38
|
-
response
|
39
|
-
end
|
40
|
-
end end end
|
@@ -1,120 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
require "logstash/namespace"
|
3
|
-
require_relative "file_reader"
|
4
|
-
require "logstash/settings"
|
5
|
-
|
6
|
-
module LogStash module Modules class LogStashConfig
|
7
|
-
# We name it `modul` here because `module` has meaning in Ruby.
|
8
|
-
def initialize(modul, settings)
|
9
|
-
@directory = ::File.join(modul.directory, "logstash")
|
10
|
-
@name = modul.module_name
|
11
|
-
@settings = settings
|
12
|
-
end
|
13
|
-
|
14
|
-
def template
|
15
|
-
::File.join(@directory, "#{@name}.conf.erb")
|
16
|
-
end
|
17
|
-
|
18
|
-
def configured_inputs(default = [], aliases = {})
|
19
|
-
name = "var.inputs"
|
20
|
-
values = get_setting(LogStash::Setting::SplittableStringArray.new(name, String, default))
|
21
|
-
|
22
|
-
aliases.each { |k,v| values << v if values.include?(k) }
|
23
|
-
aliases.invert.each { |k,v| values << v if values.include?(k) }
|
24
|
-
values.flatten.uniq
|
25
|
-
end
|
26
|
-
|
27
|
-
def alias_settings_keys!(aliases)
|
28
|
-
aliased_settings = alias_matching_keys(aliases, @settings)
|
29
|
-
@settings = alias_matching_keys(aliases.invert, aliased_settings)
|
30
|
-
end
|
31
|
-
|
32
|
-
def array_to_string(array)
|
33
|
-
"[#{array.collect { |i| "'#{i}'" }.join(", ")}]"
|
34
|
-
end
|
35
|
-
|
36
|
-
def csv_string(array)
|
37
|
-
"'#{array.join(',')}'"
|
38
|
-
end
|
39
|
-
|
40
|
-
def get_setting(setting_class)
|
41
|
-
raw_value = @settings[setting_class.name]
|
42
|
-
# If we dont check for NIL, the Settings class will try to coerce the value
|
43
|
-
# and most of the it will fails when a NIL value is explicitely set.
|
44
|
-
# This will be fixed once we wrap the plugins settings into a Settings class
|
45
|
-
setting_class.set(raw_value) unless raw_value.nil?
|
46
|
-
setting_class.value
|
47
|
-
end
|
48
|
-
|
49
|
-
def setting(name, default)
|
50
|
-
# by default we use the more permissive setting which is a `NullableString`
|
51
|
-
# This is fine because the end format of the logstash configuration is a string representation
|
52
|
-
# of the pipeline. There is a good reason why I think we should use the settings classes, we
|
53
|
-
# can `preprocess` a template and generate a configuration from the defined settings
|
54
|
-
# validate the values and replace them in the template.
|
55
|
-
case default
|
56
|
-
when String
|
57
|
-
get_setting(LogStash::Setting::NullableString.new(name, default.to_s))
|
58
|
-
when Numeric
|
59
|
-
get_setting(LogStash::Setting::Numeric.new(name, default))
|
60
|
-
else
|
61
|
-
get_setting(LogStash::Setting::NullableString.new(name, default.to_s))
|
62
|
-
end
|
63
|
-
end
|
64
|
-
|
65
|
-
def elasticsearch_output_config(type_string = nil)
|
66
|
-
hosts = array_to_string(get_setting(LogStash::Setting::SplittableStringArray.new("var.elasticsearch.hosts", String, ["localhost:9200"])))
|
67
|
-
index = "#{@name}-#{setting("var.elasticsearch.index_suffix", "%{+YYYY.MM.dd}")}"
|
68
|
-
user = @settings["var.elasticsearch.username"]
|
69
|
-
password = @settings["var.elasticsearch.password"]
|
70
|
-
lines = ["hosts => #{hosts}", "index => \"#{index}\""]
|
71
|
-
lines.push(user ? "user => \"#{user}\"" : nil)
|
72
|
-
lines.push(password ? "password => \"#{password}\"" : nil)
|
73
|
-
lines.push(type_string ? "document_type => #{type_string}" : nil)
|
74
|
-
lines.push("ssl => #{@settings.fetch('var.elasticsearch.ssl.enabled', false)}")
|
75
|
-
if cacert = @settings["var.elasticsearch.ssl.certificate_authority"]
|
76
|
-
lines.push("cacert => \"#{cacert}\"") if cacert
|
77
|
-
end
|
78
|
-
# NOTE: the first line should be indented in the conf.erb
|
79
|
-
<<-CONF
|
80
|
-
elasticsearch {
|
81
|
-
#{lines.compact.join("\n ")}
|
82
|
-
manage_template => false
|
83
|
-
}
|
84
|
-
CONF
|
85
|
-
end
|
86
|
-
|
87
|
-
def config_string
|
88
|
-
# process the template and settings
|
89
|
-
# send back as a string
|
90
|
-
renderer = ERB.new(FileReader.read(template))
|
91
|
-
renderer.result(binding)
|
92
|
-
end
|
93
|
-
|
94
|
-
private
|
95
|
-
# For a first version we are copying the values of the original hash,
|
96
|
-
# this might become problematic if we users changes the values of the
|
97
|
-
# settings in the template, which could result in an inconsistent view of the original data
|
98
|
-
#
|
99
|
-
# For v1 of the feature I think its an OK compromise, v2 we have a more advanced hash that
|
100
|
-
# support alias.
|
101
|
-
def alias_matching_keys(aliases, target)
|
102
|
-
aliased_target = target.dup
|
103
|
-
|
104
|
-
aliases.each do |matching_key_prefix, new_key_prefix|
|
105
|
-
target.each do |k, v|
|
106
|
-
re = /^#{matching_key_prefix}\./
|
107
|
-
|
108
|
-
if k =~ re
|
109
|
-
alias_key = k.gsub(re, "#{new_key_prefix}.")
|
110
|
-
|
111
|
-
# If the user setup the same values twices with different values lets just halt.
|
112
|
-
raise "Cannot create an alias, the destination key has already a value set: original key: #{k}, alias key: #{alias_key}" if (!aliased_target[alias_key].nil? && aliased_target[alias_key] != v)
|
113
|
-
aliased_target[alias_key] = v unless v.nil?
|
114
|
-
end
|
115
|
-
end
|
116
|
-
end
|
117
|
-
|
118
|
-
aliased_target
|
119
|
-
end
|
120
|
-
end end end
|
@@ -1,38 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
require "logstash/namespace"
|
3
|
-
require "logstash/json"
|
4
|
-
require_relative "file_reader"
|
5
|
-
|
6
|
-
module LogStash module Modules module ResourceBase
|
7
|
-
attr_reader :base, :content_type, :content_path, :content_id
|
8
|
-
|
9
|
-
def initialize(base, content_type, content_path, content = nil, content_id = nil)
|
10
|
-
@base, @content_type, @content_path = base, content_type, content_path
|
11
|
-
@content_id = content_id || ::File.basename(@content_path, ".*")
|
12
|
-
# content at this time will be a JSON string
|
13
|
-
@content = content
|
14
|
-
if !@content.nil?
|
15
|
-
@content_as_object = LogStash::Json.load(@content) rescue {}
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
def content
|
20
|
-
@content ||= FileReader.read(@content_path)
|
21
|
-
end
|
22
|
-
|
23
|
-
def to_s
|
24
|
-
"#{base}, #{content_type}, #{content_path}, #{content_id}"
|
25
|
-
end
|
26
|
-
|
27
|
-
def content_as_object
|
28
|
-
@content_as_object ||= FileReader.read_json(@content_path) rescue nil
|
29
|
-
end
|
30
|
-
|
31
|
-
def <=>(other)
|
32
|
-
to_s <=> other.to_s
|
33
|
-
end
|
34
|
-
|
35
|
-
def ==(other)
|
36
|
-
to_s == other.to_s
|
37
|
-
end
|
38
|
-
end end end
|
@@ -1,52 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
require "logstash/namespace"
|
3
|
-
require "logstash/logging"
|
4
|
-
require "logstash/util/loggable"
|
5
|
-
require "erb"
|
6
|
-
|
7
|
-
require_relative "elasticsearch_config"
|
8
|
-
require_relative "kibana_config"
|
9
|
-
require_relative "logstash_config"
|
10
|
-
|
11
|
-
module LogStash module Modules class Scaffold
|
12
|
-
include LogStash::Util::Loggable
|
13
|
-
|
14
|
-
attr_reader :directory, :module_name, :kibana_version_parts
|
15
|
-
attr_reader :kibana_configuration, :logstash_configuration, :elasticsearch_configuration
|
16
|
-
|
17
|
-
def initialize(name, directory)
|
18
|
-
@module_name = name
|
19
|
-
@directory = directory # this is the 'configuration folder in the GEM root.'
|
20
|
-
@kibana_version_parts = "5.6.0".split('.') # this is backup in case kibana client fails to connect
|
21
|
-
logger.info("Initializing module", :module_name => name, :directory => directory)
|
22
|
-
end
|
23
|
-
|
24
|
-
def add_kibana_version(version_parts)
|
25
|
-
@kibana_version_parts = version_parts
|
26
|
-
end
|
27
|
-
|
28
|
-
def import(import_engine, kibana_import_engine)
|
29
|
-
@elasticsearch_configuration.resources.each do |resource|
|
30
|
-
import_engine.put(resource)
|
31
|
-
end
|
32
|
-
@kibana_configuration.resources.each do |resource|
|
33
|
-
kibana_import_engine.put(resource)
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
def with_settings(module_settings)
|
38
|
-
@logstash_configuration = LogStashConfig.new(self, module_settings)
|
39
|
-
@kibana_configuration = KibanaConfig.new(self, module_settings)
|
40
|
-
@elasticsearch_configuration = ElasticsearchConfig.new(self, module_settings)
|
41
|
-
self
|
42
|
-
end
|
43
|
-
|
44
|
-
def config_string()
|
45
|
-
# settings should be set earlier by the caller.
|
46
|
-
# settings should be the subset from the YAML file with a structure like
|
47
|
-
# {"name" => "plugin name", "k1" => "v1", "k2" => "v2"}, etc.
|
48
|
-
return nil if @logstash_configuration.nil?
|
49
|
-
@logstash_configuration.config_string
|
50
|
-
end
|
51
|
-
end end end # class LogStash::Modules::Scaffold
|
52
|
-
|
@@ -1,23 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
require "logstash/namespace"
|
3
|
-
|
4
|
-
module LogStash module Modules class SettingsMerger
|
5
|
-
def self.merge(cli_settings, yml_settings)
|
6
|
-
# both args are arrays of hashes, e.g.
|
7
|
-
# [{"name"=>"mod1", "var.input.tcp.port"=>"3333"}, {"name"=>"mod2"}]
|
8
|
-
# [{"name"=>"mod1", "var.input.tcp.port"=>2222, "var.kibana.username"=>"rupert", "var.kibana.password"=>"fotherington"}, {"name"=>"mod3", "var.input.tcp.port"=>4445}]
|
9
|
-
merged = []
|
10
|
-
# union and group_by preserves order
|
11
|
-
# union will also coalesce identical hashes
|
12
|
-
union_of_settings = (cli_settings | yml_settings)
|
13
|
-
grouped_by_name = union_of_settings.group_by{|e| e["name"]}
|
14
|
-
grouped_by_name.each do |name, array|
|
15
|
-
if array.size == 2
|
16
|
-
merged << array.first.merge(array.last)
|
17
|
-
else
|
18
|
-
merged.concat(array)
|
19
|
-
end
|
20
|
-
end
|
21
|
-
merged
|
22
|
-
end
|
23
|
-
end end end
|
@@ -1,17 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
require_relative "scaffold"
|
3
|
-
|
4
|
-
# This module function should be used when gems or
|
5
|
-
# x-pack defines modules in their folder structures.
|
6
|
-
module LogStash module Modules module Util
|
7
|
-
def self.register_local_modules(path)
|
8
|
-
modules_path = ::File.join(path, "modules")
|
9
|
-
::Dir.foreach(modules_path) do |item|
|
10
|
-
# Ignore unix relative path ids
|
11
|
-
next if item == '.' or item == '..'
|
12
|
-
# Ignore non-directories
|
13
|
-
next if !::File.directory?(::File.join(modules_path, ::File::Separator, item))
|
14
|
-
LogStash::PLUGIN_REGISTRY.add(:modules, item, Scaffold.new(item, ::File.join(modules_path, item, "configuration")))
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end end end
|
@@ -1,61 +0,0 @@
|
|
1
|
-
require 'logstash/environment'
|
2
|
-
|
3
|
-
module LogStash; module Util
|
4
|
-
class PluginDeadLetterQueueWriter
|
5
|
-
|
6
|
-
attr_reader :plugin_id, :plugin_type, :inner_writer
|
7
|
-
|
8
|
-
def initialize(inner_writer, plugin_id, plugin_type)
|
9
|
-
@plugin_id = plugin_id
|
10
|
-
@plugin_type = plugin_type
|
11
|
-
@inner_writer = inner_writer
|
12
|
-
end
|
13
|
-
|
14
|
-
def write(logstash_event, reason)
|
15
|
-
if @inner_writer && @inner_writer.is_open
|
16
|
-
@inner_writer.writeEntry(logstash_event.to_java, @plugin_type, @plugin_id, reason)
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
def close
|
21
|
-
if @inner_writer && @inner_writer.is_open
|
22
|
-
@inner_writer.close
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
class DummyDeadLetterQueueWriter
|
28
|
-
# class uses to represent a writer when dead_letter_queue is disabled
|
29
|
-
def initialize
|
30
|
-
end
|
31
|
-
|
32
|
-
def write(logstash_event, reason)
|
33
|
-
# noop
|
34
|
-
end
|
35
|
-
|
36
|
-
def is_open
|
37
|
-
false
|
38
|
-
end
|
39
|
-
|
40
|
-
def close
|
41
|
-
# noop
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
|
-
class DeadLetterQueueFactory
|
46
|
-
java_import org.logstash.common.DeadLetterQueueFactory
|
47
|
-
|
48
|
-
def self.get(pipeline_id)
|
49
|
-
if LogStash::SETTINGS.get("dead_letter_queue.enable")
|
50
|
-
return DeadLetterQueueWriter.new(
|
51
|
-
DeadLetterQueueFactory.getWriter(pipeline_id, LogStash::SETTINGS.get("path.dead_letter_queue"), LogStash::SETTINGS.get('dead_letter_queue.max_bytes')))
|
52
|
-
else
|
53
|
-
return DeadLetterQueueWriter.new(nil)
|
54
|
-
end
|
55
|
-
end
|
56
|
-
|
57
|
-
def self.close(pipeline_id)
|
58
|
-
DeadLetterQueueFactory.close(pipeline_id)
|
59
|
-
end
|
60
|
-
end
|
61
|
-
end end
|
@@ -1,43 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
module ::LogStash::Util::EnvironmentVariables
|
3
|
-
|
4
|
-
ENV_PLACEHOLDER_REGEX = /\${(?<name>[a-zA-Z_.][a-zA-Z0-9_.]*)(:(?<default>[^}]*))?}/
|
5
|
-
|
6
|
-
# Recursive method to replace environment variable references in parameters
|
7
|
-
def deep_replace(value)
|
8
|
-
if value.is_a?(Hash)
|
9
|
-
value.each do |valueHashKey, valueHashValue|
|
10
|
-
value[valueHashKey.to_s] = deep_replace(valueHashValue)
|
11
|
-
end
|
12
|
-
else
|
13
|
-
if value.is_a?(Array)
|
14
|
-
value.each_index do | valueArrayIndex|
|
15
|
-
value[valueArrayIndex] = deep_replace(value[valueArrayIndex])
|
16
|
-
end
|
17
|
-
else
|
18
|
-
return replace_env_placeholders(value)
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
# Replace all environment variable references in 'value' param by environment variable value and return updated value
|
24
|
-
# Process following patterns : $VAR, ${VAR}, ${VAR:defaultValue}
|
25
|
-
def replace_env_placeholders(value)
|
26
|
-
return value unless value.is_a?(String)
|
27
|
-
|
28
|
-
value.gsub(ENV_PLACEHOLDER_REGEX) do |placeholder|
|
29
|
-
# Note: Ruby docs claim[1] Regexp.last_match is thread-local and scoped to
|
30
|
-
# the call, so this should be thread-safe.
|
31
|
-
#
|
32
|
-
# [1] http://ruby-doc.org/core-2.1.1/Regexp.html#method-c-last_match
|
33
|
-
name = Regexp.last_match(:name)
|
34
|
-
default = Regexp.last_match(:default)
|
35
|
-
|
36
|
-
replacement = ENV.fetch(name, default)
|
37
|
-
if replacement.nil?
|
38
|
-
raise LogStash::ConfigurationError, "Cannot evaluate `#{placeholder}`. Environment variable `#{name}` is not set and there is no default value given."
|
39
|
-
end
|
40
|
-
replacement
|
41
|
-
end
|
42
|
-
end # def replace_env_placeholders
|
43
|
-
end
|