elastic-apm 3.9.0 → 3.10.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.asciidoc +19 -0
- data/Gemfile +1 -0
- data/lib/elastic_apm/config.rb +9 -1
- data/lib/elastic_apm/config/wildcard_pattern_list.rb +11 -1
- data/lib/elastic_apm/context_builder.rb +1 -1
- data/lib/elastic_apm/metadata/system_info.rb +5 -3
- data/lib/elastic_apm/metadata/system_info/container_info.rb +28 -4
- data/lib/elastic_apm/middleware.rb +8 -2
- data/lib/elastic_apm/span.rb +3 -2
- data/lib/elastic_apm/transport/worker.rb +4 -0
- data/lib/elastic_apm/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e9c3bd29131a80fd061ecda5285eaf367f1e5643a5d6bd27b753fb566fa51799
|
4
|
+
data.tar.gz: 51b05bac2568d0c55f83444cef9f297400078a7cbcb0fef6c6ef4ce9cfdfe2fa
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: db6319dbfcbe5f2429c72aebb8132bc9d1a35b4ec28aa15ecd1bb06fff4a326ad41f4753a3fb54f6f85635d9429d434f4f30b2ea23013cf7e775cb6f2d3a8a23
|
7
|
+
data.tar.gz: 32f64b02b56d214a019279b84bdaa3b04f6d72fac06d664326d0939c16c0b50a05b3654ae87a68a057c17c576679cbc726dd890cde2ac1068dd7a0fbbb05b030
|
data/CHANGELOG.asciidoc
CHANGED
@@ -35,9 +35,28 @@ endif::[]
|
|
35
35
|
[[release-notes-3.x]]
|
36
36
|
=== Ruby Agent version 3.x
|
37
37
|
|
38
|
+
[[release-notes-3.10.0]]
|
39
|
+
==== 3.10.0 (2020-08-26)
|
40
|
+
|
41
|
+
[float]
|
42
|
+
===== Added
|
43
|
+
|
44
|
+
- Config option `transaction_ignore_urls` to replace `ignore_url_patterns` {pull}844[#844]
|
45
|
+
- Prepend `(?-i)` to patterns to make them case-sensitive {pull}846[#846]
|
46
|
+
|
47
|
+
[float]
|
48
|
+
===== Fixed
|
49
|
+
|
50
|
+
- Reverted {pull}839[#839]
|
51
|
+
- Improved Kubernetes pod ID detection {pull}859[#859]
|
52
|
+
|
38
53
|
[[release-notes-3.9.0]]
|
39
54
|
==== 3.9.0 (2020-08-04)
|
40
55
|
|
56
|
+
[float]
|
57
|
+
===== Fixed
|
58
|
+
- Scrub request body of illegal UTF-8 characters {pull}832[#832]
|
59
|
+
|
41
60
|
[float]
|
42
61
|
===== Added
|
43
62
|
|
data/Gemfile
CHANGED
@@ -42,6 +42,7 @@ gem 'faraday', require: nil
|
|
42
42
|
gem 'graphql', require: nil
|
43
43
|
gem 'google-protobuf', '< 3.12' if !defined?(JRUBY_VERSION) && RUBY_VERSION < '2.5'
|
44
44
|
gem 'grpc' if !defined?(JRUBY_VERSION)
|
45
|
+
gem 'json'
|
45
46
|
gem 'json-schema', require: nil
|
46
47
|
gem 'mongo', require: nil
|
47
48
|
gem 'opentracing', require: nil
|
data/lib/elastic_apm/config.rb
CHANGED
@@ -87,6 +87,7 @@ module ElasticAPM
|
|
87
87
|
option :source_lines_span_library_frames, type: :int, default: 0
|
88
88
|
option :span_frames_min_duration, type: :float, default: '5ms', converter: Duration.new(default_unit: 'ms')
|
89
89
|
option :stack_trace_limit, type: :int, default: 999_999
|
90
|
+
option :transaction_ignore_urls, type: :list, default: [], converter: WildcardPatternList.new
|
90
91
|
option :transaction_max_spans, type: :int, default: 500
|
91
92
|
option :transaction_sample_rate, type: :float, default: 1.0
|
92
93
|
option :use_elastic_traceparent_header, type: :bool, default: true
|
@@ -234,6 +235,13 @@ module ElasticAPM
|
|
234
235
|
self.default_labels = value
|
235
236
|
end
|
236
237
|
|
238
|
+
def ignore_url_patterns=(value)
|
239
|
+
warn '[DEPRECATED] The option ignore_url_patterns is being removed. ' \
|
240
|
+
'Consider using transaction_ignore_urls instead.'
|
241
|
+
|
242
|
+
set(:ignore_url_patterns, value)
|
243
|
+
end
|
244
|
+
|
237
245
|
def custom_key_filters=(value)
|
238
246
|
unless value == self.class.schema[:custom_key_filters][:default]
|
239
247
|
warn '[DEPRECATED] The option custom_key_filters is being removed. ' \
|
@@ -318,7 +326,7 @@ module ElasticAPM
|
|
318
326
|
self.logger ||= ::Rails.logger
|
319
327
|
|
320
328
|
self.__root_path = ::Rails.root.to_s
|
321
|
-
self.__view_paths = ::
|
329
|
+
self.__view_paths = app.config.paths['app/views'].existent + [::Rails.root.to_s]
|
322
330
|
end
|
323
331
|
|
324
332
|
def rails_app_name(app)
|
@@ -36,12 +36,22 @@ module ElasticAPM
|
|
36
36
|
private
|
37
37
|
|
38
38
|
def convert(str)
|
39
|
+
case_sensitive = false
|
40
|
+
|
41
|
+
if str.start_with?('(?-i)')
|
42
|
+
str = str.gsub(/^\(\?-\i\)/, '')
|
43
|
+
case_sensitive = true
|
44
|
+
end
|
45
|
+
|
39
46
|
parts =
|
40
47
|
str.chars.each_with_object([]) do |char, arr|
|
41
48
|
arr << (char == '*' ? '.*' : Regexp.escape(char))
|
42
49
|
end
|
43
50
|
|
44
|
-
Regexp.new(
|
51
|
+
Regexp.new(
|
52
|
+
'\A' + parts.join + '\Z',
|
53
|
+
case_sensitive ? nil : Regexp::IGNORECASE
|
54
|
+
)
|
45
55
|
end
|
46
56
|
end
|
47
57
|
|
@@ -24,7 +24,7 @@ module ElasticAPM
|
|
24
24
|
def initialize(config)
|
25
25
|
@config = config
|
26
26
|
|
27
|
-
@hostname = @config.hostname ||
|
27
|
+
@hostname = @config.hostname || self.class.system_hostname
|
28
28
|
@architecture = gem_platform.cpu
|
29
29
|
@platform = gem_platform.os
|
30
30
|
|
@@ -35,11 +35,13 @@ module ElasticAPM
|
|
35
35
|
|
36
36
|
attr_reader :hostname, :architecture, :platform, :container, :kubernetes
|
37
37
|
|
38
|
-
private
|
39
|
-
|
40
38
|
def gem_platform
|
41
39
|
@gem_platform ||= Gem::Platform.local
|
42
40
|
end
|
41
|
+
|
42
|
+
def self.system_hostname
|
43
|
+
@system_hostname ||= `hostname`.chomp
|
44
|
+
end
|
43
45
|
end
|
44
46
|
end
|
45
47
|
end
|
@@ -81,8 +81,14 @@ module ElasticAPM
|
|
81
81
|
ENV.fetch('KUBERNETES_POD_UID', kubernetes_pod_uid)
|
82
82
|
end
|
83
83
|
|
84
|
-
|
85
|
-
|
84
|
+
CONTAINER_ID_REGEXES = [
|
85
|
+
%r{^[[:xdigit:]]{64}$},
|
86
|
+
%r{^[[:xdigit:]]{8}-[[:xdigit:]]{4}-[[:xdigit:]]{4}-[[:xdigit:]]{4}-[[:xdigit:]]{4,}$}
|
87
|
+
]
|
88
|
+
KUBEPODS_REGEXES = [
|
89
|
+
%r{(?:^/kubepods[^\s]*/pod([^/]+)$)},
|
90
|
+
%r{(?:^/kubepods\.slice/kubepods-[^/]+\.slice/kubepods-[^/]+-pod([^/]+)\.slice$)}
|
91
|
+
]
|
86
92
|
SYSTEMD_SCOPE_SUFFIX = '.scope'
|
87
93
|
|
88
94
|
# rubocop:disable Metrics/PerceivedComplexity
|
@@ -118,18 +124,36 @@ module ElasticAPM
|
|
118
124
|
end
|
119
125
|
end
|
120
126
|
|
121
|
-
if (kubepods_match =
|
127
|
+
if (kubepods_match = match_kubepods(directory))
|
122
128
|
pod_id = kubepods_match[1] || kubepods_match[2]
|
123
129
|
|
124
130
|
self.container_id = container_id
|
125
131
|
self.kubernetes_pod_uid = pod_id
|
126
|
-
elsif
|
132
|
+
elsif match_container(container_id)
|
127
133
|
self.container_id = container_id
|
128
134
|
end
|
129
135
|
end
|
130
136
|
end
|
131
137
|
# rubocop:enable Metrics/PerceivedComplexity
|
132
138
|
# rubocop:enable Metrics/CyclomaticComplexity
|
139
|
+
|
140
|
+
def match_kubepods(directory)
|
141
|
+
KUBEPODS_REGEXES.each do |r|
|
142
|
+
next unless (match = r.match(directory))
|
143
|
+
return match
|
144
|
+
end
|
145
|
+
|
146
|
+
nil
|
147
|
+
end
|
148
|
+
|
149
|
+
def match_container(container_id)
|
150
|
+
CONTAINER_ID_REGEXES.each do |r|
|
151
|
+
next unless (match = r.match(container_id))
|
152
|
+
return match
|
153
|
+
end
|
154
|
+
|
155
|
+
nil
|
156
|
+
end
|
133
157
|
end
|
134
158
|
end
|
135
159
|
end
|
@@ -59,9 +59,15 @@ module ElasticAPM
|
|
59
59
|
end
|
60
60
|
|
61
61
|
def path_ignored?(env)
|
62
|
-
config.ignore_url_patterns.any? do |r|
|
63
|
-
env['PATH_INFO']
|
62
|
+
return true if config.ignore_url_patterns.any? do |r|
|
63
|
+
r.match(env['PATH_INFO'])
|
64
64
|
end
|
65
|
+
|
66
|
+
return true if config.transaction_ignore_urls.any? do |r|
|
67
|
+
r.match(env['PATH_INFO'])
|
68
|
+
end
|
69
|
+
|
70
|
+
false
|
65
71
|
end
|
66
72
|
|
67
73
|
def start_transaction(env)
|
data/lib/elastic_apm/span.rb
CHANGED
@@ -97,11 +97,12 @@ module ElasticAPM
|
|
97
97
|
|
98
98
|
def done(clock_end: Util.monotonic_micros)
|
99
99
|
stop clock_end
|
100
|
+
self
|
101
|
+
end
|
100
102
|
|
103
|
+
def prepare_for_serialization!
|
101
104
|
build_stacktrace! if should_build_stacktrace?
|
102
105
|
self.original_backtrace = nil # release original
|
103
|
-
|
104
|
-
self
|
105
106
|
end
|
106
107
|
|
107
108
|
def stopped?
|
@@ -77,6 +77,10 @@ module ElasticAPM
|
|
77
77
|
private
|
78
78
|
|
79
79
|
def serialize_and_filter(resource)
|
80
|
+
if resource.respond_to?(:prepare_for_serialization!)
|
81
|
+
resource.prepare_for_serialization!
|
82
|
+
end
|
83
|
+
|
80
84
|
serialized = serializers.serialize(resource)
|
81
85
|
|
82
86
|
# if a filter returns nil, it means skip the event
|
data/lib/elastic_apm/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: elastic-apm
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.
|
4
|
+
version: 3.10.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mikkel Malmberg
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-08-
|
11
|
+
date: 2020-08-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: concurrent-ruby
|