logstash-core 5.6.16-java → 6.0.0.alpha1-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 +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
@@ -4,12 +4,7 @@ require "concurrent"
|
|
4
4
|
|
5
5
|
module LogStash module Instrument module MetricType
|
6
6
|
class Mean < Base
|
7
|
-
include ::LogStash::Util::Loggable
|
8
|
-
|
9
7
|
def initialize(namespaces, key)
|
10
|
-
logger.warn("Deprecated 'mean' metric type used! This will be removed in Logstash 6.0!",
|
11
|
-
:namespaces => namespaces,
|
12
|
-
:key => key)
|
13
8
|
super(namespaces, key)
|
14
9
|
|
15
10
|
@counter = Concurrent::AtomicFixnum.new
|
@@ -39,10 +39,6 @@ module LogStash module Instrument
|
|
39
39
|
end
|
40
40
|
end
|
41
41
|
|
42
|
-
def counter(_)
|
43
|
-
NullGauge
|
44
|
-
end
|
45
|
-
|
46
42
|
def namespace(name)
|
47
43
|
raise MetricNoNamespaceProvided if name.nil? || name.empty?
|
48
44
|
NamespacedNullMetric.new(self, name)
|
@@ -53,12 +49,6 @@ module LogStash module Instrument
|
|
53
49
|
end
|
54
50
|
|
55
51
|
private
|
56
|
-
|
57
|
-
class NullGauge
|
58
|
-
def self.increment(_)
|
59
|
-
end
|
60
|
-
end
|
61
|
-
|
62
52
|
# Null implementation of the internal timer class
|
63
53
|
#
|
64
54
|
# @see LogStash::Instrument::TimedExecution`
|
@@ -1,4 +1,5 @@
|
|
1
1
|
# encoding: utf-8
|
2
|
+
require "pathname"
|
2
3
|
require "logstash/util/loggable"
|
3
4
|
|
4
5
|
# Logic from elasticsearch/core/src/main/java/org/elasticsearch/monitor/os/OsProbe.java
|
@@ -6,214 +7,130 @@ require "logstash/util/loggable"
|
|
6
7
|
module LogStash module Instrument module PeriodicPoller
|
7
8
|
class Cgroup
|
8
9
|
include LogStash::Util::Loggable
|
9
|
-
class Override
|
10
|
-
attr_reader :key, :value
|
11
|
-
def initialize(key)
|
12
|
-
@key = key
|
13
|
-
@value = java.lang.System.getProperty(@key)
|
14
|
-
end
|
15
10
|
|
16
|
-
|
17
|
-
|
18
|
-
end
|
11
|
+
CONTROL_GROUP_RE = Regexp.compile("\\d+:([^:,]+(?:,[^:,]+)?):(/.*)");
|
12
|
+
CONTROLLER_SEPARATOR_RE = ","
|
19
13
|
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
14
|
+
PROC_SELF_CGROUP_FILE = Pathname.new("/proc/self/cgroup")
|
15
|
+
PROC_CGROUP_CPU_DIR = Pathname.new("/sys/fs/cgroup/cpu")
|
16
|
+
PROC_CGROUP_CPUACCT_DIR = Pathname.new("/sys/fs/cgroup/cpuacct")
|
17
|
+
|
18
|
+
GROUP_CPUACCT = "cpuacct"
|
19
|
+
CPUACCT_USAGE_FILE = "cpuacct.usage"
|
20
|
+
|
21
|
+
GROUP_CPU = "cpu"
|
22
|
+
CPU_FS_PERIOD_US_FILE = "cpu.cfs_period_us"
|
23
|
+
CPU_FS_QUOTA_US_FILE = "cpu.cfs_quota_us"
|
24
24
|
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
# we skip the line without a controller e.g. 0::/path
|
33
|
-
# we assume there are these symlinks:
|
34
|
-
# `/sys/fs/cgroup/cpu` -> `/sys/fs/cgroup/cpu,cpuacct
|
35
|
-
# `/sys/fs/cgroup/cpuacct` -> `/sys/fs/cgroup/cpu,cpuacct
|
36
|
-
|
37
|
-
CGROUP_FILE = "/proc/self/cgroup"
|
38
|
-
CPUACCT_DIR = "/sys/fs/cgroup/cpuacct"
|
39
|
-
CPU_DIR = "/sys/fs/cgroup/cpu"
|
40
|
-
CRITICAL_PATHS = [CGROUP_FILE, CPUACCT_DIR, CPU_DIR]
|
41
|
-
|
42
|
-
CONTROLLER_CPUACCT_LABEL = "cpuacct"
|
43
|
-
CONTROLLER_CPU_LABEL = "cpu"
|
44
|
-
|
45
|
-
class CGroupResources
|
46
|
-
CONTROL_GROUP_RE = Regexp.compile("\\d+:([^:,]+(?:,[^:,]+)?):(/.*)")
|
47
|
-
CONTROLLER_SEPARATOR_RE = ","
|
48
|
-
|
49
|
-
def cgroup_available?
|
50
|
-
# don't cache to ivar, in case the files are mounted after logstash starts??
|
51
|
-
CRITICAL_PATHS.all?{|path| ::File.exist?(path)}
|
25
|
+
CPU_STATS_FILE = "cpu.stat"
|
26
|
+
|
27
|
+
class << self
|
28
|
+
def are_cgroup_available?
|
29
|
+
[::File.exist?(PROC_SELF_CGROUP_FILE),
|
30
|
+
Dir.exist?(PROC_CGROUP_CPU_DIR),
|
31
|
+
Dir.exist?(PROC_CGROUP_CPUACCT_DIR)].all?
|
52
32
|
end
|
53
33
|
|
54
|
-
def
|
34
|
+
def control_groups
|
55
35
|
response = {}
|
56
|
-
|
36
|
+
|
37
|
+
read_proc_self_cgroup_lines.each do |line|
|
57
38
|
matches = CONTROL_GROUP_RE.match(line)
|
58
|
-
next if matches.nil?
|
59
39
|
# multiples controls, same hierarchy
|
60
40
|
controllers = matches[1].split(CONTROLLER_SEPARATOR_RE)
|
61
|
-
controllers.
|
62
|
-
case controller
|
63
|
-
when CONTROLLER_CPU_LABEL
|
64
|
-
response[controller] = CpuResource.new(matches[2])
|
65
|
-
when CONTROLLER_CPUACCT_LABEL
|
66
|
-
response[controller] = CpuAcctResource.new(matches[2])
|
67
|
-
else
|
68
|
-
response[controller] = UnimplementedResource.new(controller, matches[2])
|
69
|
-
end
|
70
|
-
end
|
41
|
+
controllers.each_with_object(response) { |controller| response[controller] = matches[2] }
|
71
42
|
end
|
43
|
+
|
72
44
|
response
|
73
45
|
end
|
74
|
-
end
|
75
46
|
|
76
|
-
|
77
|
-
|
78
|
-
def implemented?
|
79
|
-
true
|
80
|
-
end
|
81
|
-
private
|
82
|
-
def common_initialize(base, override_key, original_path)
|
83
|
-
@base_path = base
|
84
|
-
# override is needed here for the logging statements
|
85
|
-
@override = Override.new(override_key)
|
86
|
-
@offset_path = @override.override(original_path)
|
87
|
-
@procs = {}
|
88
|
-
@procs[:read_int] = lambda {|path| IO.readlines(path).first.to_i }
|
89
|
-
@procs[:read_lines] = lambda {|path| IO.readlines(path) }
|
90
|
-
end
|
91
|
-
def call_if_file_exists(call_key, file, not_found_value)
|
92
|
-
path = ::File.join(@base_path, @offset_path, file)
|
93
|
-
if ::File.exist?(path)
|
94
|
-
@procs[call_key].call(path)
|
95
|
-
else
|
96
|
-
message = "File #{path} cannot be found, "
|
97
|
-
if override.nil?
|
98
|
-
message.concat("try providing an override '#{override.key}' in the Logstash JAVA_OPTS environment variable")
|
99
|
-
else
|
100
|
-
message.concat("even though the '#{override.key}' override is: '#{override.value}'")
|
101
|
-
end
|
102
|
-
logger.debug(message)
|
103
|
-
not_found_value
|
104
|
-
end
|
47
|
+
def read_first_line(path)
|
48
|
+
IO.readlines(path).first
|
105
49
|
end
|
106
|
-
end
|
107
50
|
|
108
|
-
|
109
|
-
|
110
|
-
include ControllerResource
|
111
|
-
def initialize(original_path)
|
112
|
-
common_initialize(CPUACCT_DIR, "ls.cgroup.cpuacct.path.override", original_path)
|
51
|
+
def cgroup_cpuacct_usage_nanos(control_group)
|
52
|
+
read_first_line(::File.join(PROC_CGROUP_CPUACCT_DIR, control_group, CPUACCT_USAGE_FILE)).to_i
|
113
53
|
end
|
114
|
-
def to_hash
|
115
|
-
{:control_group => offset_path, :usage_nanos => cpuacct_usage}
|
116
|
-
end
|
117
|
-
private
|
118
|
-
def cpuacct_usage
|
119
|
-
call_if_file_exists(:read_int, "cpuacct.usage", -1)
|
120
|
-
end
|
121
|
-
end
|
122
54
|
|
123
|
-
|
124
|
-
|
125
|
-
include ControllerResource
|
126
|
-
def initialize(original_path)
|
127
|
-
common_initialize(CPU_DIR, "ls.cgroup.cpu.path.override", original_path)
|
128
|
-
end
|
129
|
-
def to_hash
|
130
|
-
{
|
131
|
-
:control_group => offset_path,
|
132
|
-
:cfs_period_micros => cfs_period_us,
|
133
|
-
:cfs_quota_micros => cfs_quota_us,
|
134
|
-
:stat => build_cpu_stats_hash
|
135
|
-
}
|
136
|
-
end
|
137
|
-
private
|
138
|
-
def cfs_period_us
|
139
|
-
call_if_file_exists(:read_int, "cpu.cfs_period_us", -1)
|
55
|
+
def cgroup_cpu_fs_period_micros(control_group)
|
56
|
+
read_first_line(::File.join(PROC_CGROUP_CPUACCT_DIR, control_group, CPU_FS_PERIOD_US_FILE)).to_i
|
140
57
|
end
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
def build_cpu_stats_hash
|
145
|
-
stats = CpuStats.new
|
146
|
-
lines = call_if_file_exists(:read_lines, "cpu.stat", [])
|
147
|
-
stats.update(lines)
|
148
|
-
stats.to_hash
|
58
|
+
|
59
|
+
def cgroup_cpu_fs_quota_micros(control_group)
|
60
|
+
read_first_line(::File.join(PROC_CGROUP_CPUACCT_DIR, control_group, CPU_FS_QUOTA_US_FILE)).to_i
|
149
61
|
end
|
150
|
-
end
|
151
62
|
|
152
|
-
|
153
|
-
|
154
|
-
def initialize(controller, original_path)
|
155
|
-
@controller, @original_path = controller, original_path
|
63
|
+
def read_proc_self_cgroup_lines
|
64
|
+
IO.readlines(PROC_SELF_CGROUP_FILE)
|
156
65
|
end
|
157
|
-
|
158
|
-
|
66
|
+
|
67
|
+
class CpuStats
|
68
|
+
attr_reader :number_of_elapsed_periods, :number_of_times_throttled, :time_throttled_nanos
|
69
|
+
|
70
|
+
def initialize(number_of_elapsed_periods, number_of_times_throttled, time_throttled_nanos)
|
71
|
+
@number_of_elapsed_periods = number_of_elapsed_periods
|
72
|
+
@number_of_times_throttled = number_of_times_throttled
|
73
|
+
@time_throttled_nanos = time_throttled_nanos
|
74
|
+
end
|
159
75
|
end
|
160
|
-
end
|
161
76
|
|
162
|
-
|
163
|
-
|
164
|
-
@number_of_elapsed_periods = -1
|
165
|
-
@number_of_times_throttled = -1
|
166
|
-
@time_throttled_nanos = -1
|
77
|
+
def read_sys_fs_cgroup_cpuacct_cpu_stat(control_group)
|
78
|
+
IO.readlines(::File.join(PROC_CGROUP_CPU_DIR, control_group, CPU_STATS_FILE))
|
167
79
|
end
|
168
|
-
|
80
|
+
|
81
|
+
def cgroup_cpuacct_cpu_stat(control_group)
|
82
|
+
lines = read_sys_fs_cgroup_cpuacct_cpu_stat(control_group);
|
83
|
+
|
84
|
+
number_of_elapsed_periods = -1;
|
85
|
+
number_of_times_throttled = -1;
|
86
|
+
time_throttled_nanos = -1;
|
87
|
+
|
169
88
|
lines.each do |line|
|
170
89
|
fields = line.split(/\s+/)
|
171
|
-
next unless fields.size > 1
|
172
90
|
case fields.first
|
173
|
-
when "nr_periods" then
|
174
|
-
when "nr_throttled" then
|
175
|
-
when "throttled_time" then
|
91
|
+
when "nr_periods" then number_of_elapsed_periods = fields[1].to_i
|
92
|
+
when "nr_throttled" then number_of_times_throttled= fields[1].to_i
|
93
|
+
when "throttled_time" then time_throttled_nanos = fields[1].to_i
|
176
94
|
end
|
177
95
|
end
|
178
|
-
end
|
179
|
-
def to_hash
|
180
|
-
{
|
181
|
-
:number_of_elapsed_periods => @number_of_elapsed_periods,
|
182
|
-
:number_of_times_throttled => @number_of_times_throttled,
|
183
|
-
:time_throttled_nanos => @time_throttled_nanos
|
184
|
-
}
|
185
|
-
end
|
186
|
-
end
|
187
96
|
|
188
|
-
|
97
|
+
CpuStats.new(number_of_elapsed_periods, number_of_times_throttled, time_throttled_nanos)
|
98
|
+
end
|
189
99
|
|
190
|
-
class << self
|
191
100
|
def get_all
|
192
|
-
|
193
|
-
|
194
|
-
return
|
195
|
-
end
|
101
|
+
groups = control_groups
|
102
|
+
return if groups.empty?
|
196
103
|
|
197
|
-
|
104
|
+
cgroups_stats = {
|
105
|
+
:cpuacct => {},
|
106
|
+
:cpu => {}
|
107
|
+
}
|
198
108
|
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
end
|
109
|
+
cpuacct_group = groups[GROUP_CPUACCT]
|
110
|
+
cgroups_stats[:cpuacct][:control_group] = cpuacct_group
|
111
|
+
cgroups_stats[:cpuacct][:usage_nanos] = cgroup_cpuacct_usage_nanos(cpuacct_group)
|
203
112
|
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
113
|
+
cpu_group = groups[GROUP_CPU]
|
114
|
+
cgroups_stats[:cpu][:control_group] = cpu_group
|
115
|
+
cgroups_stats[:cpu][:cfs_period_micros] = cgroup_cpu_fs_period_micros(cpu_group)
|
116
|
+
cgroups_stats[:cpu][:cfs_quota_micros] = cgroup_cpu_fs_quota_micros(cpu_group)
|
117
|
+
|
118
|
+
cpu_stats = cgroup_cpuacct_cpu_stat(cpu_group)
|
119
|
+
|
120
|
+
cgroups_stats[:cpu][:stat] = {
|
121
|
+
:number_of_elapsed_periods => cpu_stats.number_of_elapsed_periods,
|
122
|
+
:number_of_times_throttled => cpu_stats.number_of_times_throttled,
|
123
|
+
:time_throttled_nanos => cpu_stats.time_throttled_nanos
|
124
|
+
}
|
125
|
+
|
126
|
+
cgroups_stats
|
210
127
|
rescue => e
|
211
|
-
logger.debug("Error, cannot retrieve cgroups information", :exception => e.class.name, :message => e.message
|
128
|
+
logger.debug("Error, cannot retrieve cgroups information", :exception => e.class.name, :message => e.message) if logger.debug?
|
212
129
|
nil
|
213
130
|
end
|
214
131
|
|
215
132
|
def get
|
216
|
-
get_all
|
133
|
+
are_cgroup_available? ? get_all : nil
|
217
134
|
end
|
218
135
|
end
|
219
136
|
end
|
@@ -2,19 +2,18 @@
|
|
2
2
|
require "logstash/instrument/periodic_poller/base"
|
3
3
|
require "logstash/instrument/periodic_poller/load_average"
|
4
4
|
require "logstash/environment"
|
5
|
+
require "jrmonitor"
|
5
6
|
require "set"
|
6
7
|
|
7
|
-
java_import 'com.sun.management.UnixOperatingSystemMXBean'
|
8
8
|
java_import 'java.lang.management.ManagementFactory'
|
9
9
|
java_import 'java.lang.management.OperatingSystemMXBean'
|
10
10
|
java_import 'java.lang.management.GarbageCollectorMXBean'
|
11
11
|
java_import 'java.lang.management.RuntimeMXBean'
|
12
|
+
java_import 'com.sun.management.UnixOperatingSystemMXBean'
|
12
13
|
java_import 'javax.management.MBeanServer'
|
13
14
|
java_import 'javax.management.ObjectName'
|
14
15
|
java_import 'javax.management.AttributeList'
|
15
16
|
java_import 'javax.naming.directory.Attribute'
|
16
|
-
java_import 'org.logstash.instrument.reports.MemoryReport'
|
17
|
-
java_import 'org.logstash.instrument.reports.ProcessReport'
|
18
17
|
|
19
18
|
|
20
19
|
module LogStash module Instrument module PeriodicPoller
|
@@ -51,7 +50,7 @@ module LogStash module Instrument module PeriodicPoller
|
|
51
50
|
end
|
52
51
|
|
53
52
|
def collect
|
54
|
-
raw =
|
53
|
+
raw = JRMonitor.memory.generate
|
55
54
|
collect_jvm_metrics(raw)
|
56
55
|
collect_pools_metrics(raw)
|
57
56
|
collect_threads_metrics
|
@@ -82,10 +81,11 @@ module LogStash module Instrument module PeriodicPoller
|
|
82
81
|
end
|
83
82
|
|
84
83
|
def collect_process_metrics
|
85
|
-
process_metrics =
|
84
|
+
process_metrics = JRMonitor.process.generate
|
86
85
|
|
87
86
|
path = [:jvm, :process]
|
88
87
|
|
88
|
+
|
89
89
|
open_fds = process_metrics["open_file_descriptors"]
|
90
90
|
if @peak_open_fds.nil? || open_fds > @peak_open_fds
|
91
91
|
@peak_open_fds = open_fds
|
@@ -11,13 +11,9 @@ module LogStash module Instrument module PeriodicPoller
|
|
11
11
|
end
|
12
12
|
|
13
13
|
def collect
|
14
|
-
|
15
|
-
unless
|
16
|
-
|
17
|
-
unless pipeline.nil?
|
18
|
-
pipeline.collect_stats
|
19
|
-
end
|
20
|
-
}
|
14
|
+
pipeline_id, pipeline = @agent.running_pipelines.first
|
15
|
+
unless pipeline.nil?
|
16
|
+
pipeline.collect_stats
|
21
17
|
end
|
22
18
|
end
|
23
19
|
end
|
@@ -1,5 +1,4 @@
|
|
1
1
|
# encoding: utf-8
|
2
|
-
require "logstash/instrument/periodic_poller/dlq"
|
3
2
|
require "logstash/instrument/periodic_poller/os"
|
4
3
|
require "logstash/instrument/periodic_poller/jvm"
|
5
4
|
require "logstash/instrument/periodic_poller/pq"
|
@@ -15,8 +14,7 @@ module LogStash module Instrument
|
|
15
14
|
@metric = metric
|
16
15
|
@periodic_pollers = [PeriodicPoller::Os.new(metric),
|
17
16
|
PeriodicPoller::JVM.new(metric),
|
18
|
-
PeriodicPoller::PersistentQueue.new(metric, queue_type, pipelines)
|
19
|
-
PeriodicPoller::DeadLetterQueue.new(metric, pipelines)]
|
17
|
+
PeriodicPoller::PersistentQueue.new(metric, queue_type, pipelines)]
|
20
18
|
end
|
21
19
|
|
22
20
|
def start
|
@@ -10,12 +10,7 @@ module LogStash module Instrument
|
|
10
10
|
@events_metrics = metric.namespace([:stats, :events])
|
11
11
|
@pipeline_metrics = metric.namespace([:stats, :pipelines, pipeline_id, :events])
|
12
12
|
@plugin_events_metrics = metric.namespace([:stats, :pipelines, pipeline_id, :plugins, plugin_type, plugin.id.to_sym, :events])
|
13
|
-
|
14
|
-
@events_metrics_time = @events_metrics.counter(:queue_push_duration_in_millis)
|
15
|
-
@pipeline_metrics_counter = @pipeline_metrics.counter(:in)
|
16
|
-
@pipeline_metrics_time = @pipeline_metrics.counter(:queue_push_duration_in_millis)
|
17
|
-
@plugin_events_metrics_counter = @plugin_events_metrics.counter(:out)
|
18
|
-
@plugin_events_metrics_time = @plugin_events_metrics.counter(:queue_push_duration_in_millis)
|
13
|
+
|
19
14
|
define_initial_metrics_values
|
20
15
|
end
|
21
16
|
|
@@ -24,45 +19,41 @@ module LogStash module Instrument
|
|
24
19
|
end
|
25
20
|
|
26
21
|
def push(event)
|
27
|
-
|
28
|
-
start_time = java.lang.System.current_time_millis
|
29
|
-
result = @write_client.push(event)
|
30
|
-
report_execution_time(start_time)
|
31
|
-
result
|
22
|
+
record_metric { @write_client.push(event) }
|
32
23
|
end
|
33
|
-
|
34
24
|
alias_method(:<<, :push)
|
35
25
|
|
36
26
|
def push_batch(batch)
|
37
|
-
|
38
|
-
start_time = java.lang.System.current_time_millis
|
39
|
-
result = @write_client.push_batch(batch)
|
40
|
-
report_execution_time(start_time)
|
41
|
-
result
|
27
|
+
record_metric(batch.size) { @write_client.push_batch(batch) }
|
42
28
|
end
|
43
29
|
|
44
30
|
private
|
31
|
+
def record_metric(size = 1)
|
32
|
+
@events_metrics.increment(:in, size)
|
33
|
+
@pipeline_metrics.increment(:in, size)
|
34
|
+
@plugin_events_metrics.increment(:out, size)
|
45
35
|
|
46
|
-
|
47
|
-
@events_metrics_counter.increment(size)
|
48
|
-
@pipeline_metrics_counter.increment(size)
|
49
|
-
@plugin_events_metrics_counter.increment(size)
|
50
|
-
end
|
36
|
+
clock = @events_metrics.time(:queue_push_duration_in_millis)
|
51
37
|
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
38
|
+
result = yield
|
39
|
+
|
40
|
+
# Reuse the same values for all the endpoints to make sure we don't have skew in times.
|
41
|
+
execution_time = clock.stop
|
42
|
+
|
43
|
+
@pipeline_metrics.report_time(:queue_push_duration_in_millis, execution_time)
|
44
|
+
@plugin_events_metrics.report_time(:queue_push_duration_in_millis, execution_time)
|
45
|
+
|
46
|
+
result
|
57
47
|
end
|
58
48
|
|
59
49
|
def define_initial_metrics_values
|
60
|
-
@
|
61
|
-
@
|
62
|
-
@
|
63
|
-
|
64
|
-
@
|
65
|
-
@
|
50
|
+
@events_metrics.increment(:in, 0)
|
51
|
+
@pipeline_metrics.increment(:in, 0)
|
52
|
+
@plugin_events_metrics.increment(:out, 0)
|
53
|
+
|
54
|
+
@events_metrics.report_time(:queue_push_duration_in_millis, 0)
|
55
|
+
@pipeline_metrics.report_time(:queue_push_duration_in_millis, 0)
|
56
|
+
@plugin_events_metrics.report_time(:queue_push_duration_in_millis, 0)
|
66
57
|
end
|
67
58
|
end
|
68
59
|
end end
|