elastic-apm 4.2.0 → 4.3.0
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/CHANGELOG.asciidoc +8 -0
- data/docs/metrics.asciidoc +92 -0
- data/lib/elastic_apm/metrics.rb +22 -8
- data/lib/elastic_apm/metrics/cpu_mem_set.rb +5 -5
- data/lib/elastic_apm/metrics/jvm_set.rb +88 -0
- data/lib/elastic_apm/version.rb +1 -1
- metadata +8 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bc66ce3466effa6740c0b8c9dbb0d74358b54d9039ceebe2938674170e68662b
|
4
|
+
data.tar.gz: d3288b6cf41bbe33fb6594789371d36fcb66ccc2b9ec9d8d2f6aed08f4d212f7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6fcdb201cf7b1824776fffff92e8fc538613928b4ae977f694f67239c15a9e10f14a1ceb4669248eb658c4b2fd439398d0badd231292367e8371655cd2bae738
|
7
|
+
data.tar.gz: 72fdb5641db042a4c7ccd6fcdfc97d43949d1f8ed0b561029e6beffa640262d04c2a639f5f75944b944c1283dae8b2c929f0a3aae14e7e2547af3e942e4307a8
|
data/CHANGELOG.asciidoc
CHANGED
data/docs/metrics.asciidoc
CHANGED
@@ -141,3 +141,95 @@ The total time spent in garbage collection.
|
|
141
141
|
|
142
142
|
**NB:** You need to enable Ruby's GC Profiler for this to get reported.
|
143
143
|
You can do this at any time when your application boots by calling `GC::Profiler.enable`.
|
144
|
+
|
145
|
+
[float]
|
146
|
+
[[metrics-jvm-metrics]]
|
147
|
+
=== JVM Metrics
|
148
|
+
|
149
|
+
The following metrics are available when using JRuby. They use the ruby java API to gather metrics via MXBean.
|
150
|
+
|
151
|
+
[float]
|
152
|
+
[[metric-jvm.memory.heap.used]]
|
153
|
+
==== `jvm.memory.heap.used`
|
154
|
+
|
155
|
+
* *Type:* Long
|
156
|
+
* *Format:* Bytes
|
157
|
+
|
158
|
+
The amount of used heap memory in bytes.
|
159
|
+
|
160
|
+
[float]
|
161
|
+
[[metric-jvm.memory.heap.committed]]
|
162
|
+
==== `jvm.memory.heap.committed`
|
163
|
+
|
164
|
+
* *Type:* Long
|
165
|
+
* *Format:* Bytes
|
166
|
+
|
167
|
+
The amount of heap memory in bytes that is committed for the Java virtual machine to use. This amount of memory is
|
168
|
+
guaranteed for the Java virtual machine to use.
|
169
|
+
|
170
|
+
[float]
|
171
|
+
[[metric-jvm.memory.heap.max]]
|
172
|
+
==== `jvm.memory.heap.max`
|
173
|
+
|
174
|
+
* *Type:* Long
|
175
|
+
* *Format:* Bytes
|
176
|
+
|
177
|
+
The amount of heap memory in bytes that is committed for the Java virtual machine to use. This amount of memory is
|
178
|
+
guaranteed for the Java virtual machine to use.
|
179
|
+
|
180
|
+
[float]
|
181
|
+
[[metric-jvm.memory.non_heap.used]]
|
182
|
+
==== `jvm.memory.non_heap.used`
|
183
|
+
|
184
|
+
* *Type:* Long
|
185
|
+
* *Format:* Bytes
|
186
|
+
|
187
|
+
The amount of used non-heap memory in bytes.
|
188
|
+
|
189
|
+
[float]
|
190
|
+
[[metric-jvm.memory.non_heap.committed]]
|
191
|
+
==== `jvm.memory.non_heap.committed`
|
192
|
+
|
193
|
+
* *Type:* Long
|
194
|
+
* *Format:* Bytes
|
195
|
+
|
196
|
+
The amount of non-heap memory in bytes that is committed for the Java virtual machine to use. This amount of memory is
|
197
|
+
guaranteed for the Java virtual machine to use.
|
198
|
+
|
199
|
+
[float]
|
200
|
+
[[metric-jvm.memory.non_heap.max]]
|
201
|
+
==== `jvm.memory.non_heap.max`
|
202
|
+
|
203
|
+
* *Type:* Long
|
204
|
+
* *Format:* Bytes
|
205
|
+
|
206
|
+
The maximum amount of non-heap memory in bytes that can be used for memory management. If the maximum memory size is
|
207
|
+
undefined, the value is -1.
|
208
|
+
|
209
|
+
[float]
|
210
|
+
[[metric-jvm.memory.heap.pool.used]]
|
211
|
+
==== `jvm.memory.heap.pool.used`
|
212
|
+
|
213
|
+
* *Type:* Long
|
214
|
+
* *Format:* Bytes
|
215
|
+
|
216
|
+
The amount of used memory in bytes of the memory pool.
|
217
|
+
|
218
|
+
[float]
|
219
|
+
[[metric-jvm.memory.heap.pool.committed]]
|
220
|
+
==== `jvm.memory.heap.pool.committed`
|
221
|
+
|
222
|
+
* *Type:* Long
|
223
|
+
* *Format:* Bytes
|
224
|
+
|
225
|
+
The amount of memory in bytes that is committed for the memory pool. This amount of memory is guaranteed for this
|
226
|
+
specific pool.
|
227
|
+
|
228
|
+
[float]
|
229
|
+
[[metric-jvm.memory.heap.pool.max]]
|
230
|
+
==== `jvm.memory.heap.pool.max`
|
231
|
+
|
232
|
+
* *Type:* Long
|
233
|
+
* *Format:* Bytes
|
234
|
+
|
235
|
+
The maximum amount of memory in bytes that can be used for the memory pool.
|
data/lib/elastic_apm/metrics.rb
CHANGED
@@ -28,6 +28,10 @@ module ElasticAPM
|
|
28
28
|
@platform ||= Gem::Platform.local.os.to_sym
|
29
29
|
end
|
30
30
|
|
31
|
+
def self.os
|
32
|
+
@platform ||= RbConfig::CONFIG.fetch('host_os', 'unknown').to_sym
|
33
|
+
end
|
34
|
+
|
31
35
|
# @api private
|
32
36
|
class Registry
|
33
37
|
include Logging
|
@@ -37,6 +41,7 @@ module ElasticAPM
|
|
37
41
|
def initialize(config, &block)
|
38
42
|
@config = config
|
39
43
|
@callback = block
|
44
|
+
@sets = nil
|
40
45
|
end
|
41
46
|
|
42
47
|
attr_reader :config, :sets, :callback
|
@@ -51,14 +56,22 @@ module ElasticAPM
|
|
51
56
|
|
52
57
|
# Only set the @sets once, in case we stop
|
53
58
|
# and start again.
|
54
|
-
@sets
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
59
|
+
if @sets.nil?
|
60
|
+
sets = {
|
61
|
+
system: CpuMemSet,
|
62
|
+
vm: VMSet,
|
63
|
+
breakdown: BreakdownSet,
|
64
|
+
transaction: TransactionSet
|
65
|
+
}
|
66
|
+
if defined?(JVMSet)
|
67
|
+
debug "Enabling JVM metrics collection"
|
68
|
+
sets[:jvm] = JVMSet
|
69
|
+
end
|
70
|
+
|
71
|
+
@sets = sets.each_with_object({}) do |(key, kls), _sets_|
|
72
|
+
debug "Adding metrics collector '#{kls}'"
|
73
|
+
_sets_[key] = kls.new(config)
|
74
|
+
end
|
62
75
|
end
|
63
76
|
|
64
77
|
@timer_task = Concurrent::TimerTask.execute(
|
@@ -136,6 +149,7 @@ require 'elastic_apm/metrics/set'
|
|
136
149
|
|
137
150
|
require 'elastic_apm/metrics/cpu_mem_set'
|
138
151
|
require 'elastic_apm/metrics/vm_set'
|
152
|
+
require 'elastic_apm/metrics/jvm_set' if defined?(JRUBY_VERSION)
|
139
153
|
require 'elastic_apm/metrics/span_scoped_set'
|
140
154
|
require 'elastic_apm/metrics/transaction_set'
|
141
155
|
require 'elastic_apm/metrics/breakdown_set'
|
@@ -62,8 +62,8 @@ module ElasticAPM
|
|
62
62
|
def initialize(config)
|
63
63
|
super
|
64
64
|
|
65
|
-
@sampler =
|
66
|
-
read! # set
|
65
|
+
@sampler = sampler_for_os(Metrics.os)
|
66
|
+
read! # set initial values to calculate deltas from
|
67
67
|
end
|
68
68
|
|
69
69
|
attr_reader :config
|
@@ -75,11 +75,11 @@ module ElasticAPM
|
|
75
75
|
|
76
76
|
private
|
77
77
|
|
78
|
-
def
|
79
|
-
case
|
78
|
+
def sampler_for_os(os)
|
79
|
+
case os
|
80
80
|
when :linux then Linux.new
|
81
81
|
else
|
82
|
-
warn "Disabling system metrics, unsupported
|
82
|
+
warn "Disabling system metrics, unsupported host OS '#{os}'"
|
83
83
|
disable!
|
84
84
|
nil
|
85
85
|
end
|
@@ -0,0 +1,88 @@
|
|
1
|
+
# Licensed to Elasticsearch B.V. under one or more contributor
|
2
|
+
# license agreements. See the NOTICE file distributed with
|
3
|
+
# this work for additional information regarding copyright
|
4
|
+
# ownership. Elasticsearch B.V. licenses this file to you under
|
5
|
+
# the Apache License, Version 2.0 (the "License"); you may
|
6
|
+
# not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at
|
8
|
+
#
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
#
|
11
|
+
# Unless required by applicable law or agreed to in writing,
|
12
|
+
# software distributed under the License is distributed on an
|
13
|
+
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
14
|
+
# KIND, either express or implied. See the License for the
|
15
|
+
# specific language governing permissions and limitations
|
16
|
+
# under the License.
|
17
|
+
#
|
18
|
+
# frozen_string_literal: true
|
19
|
+
|
20
|
+
require 'java'
|
21
|
+
|
22
|
+
module ElasticAPM
|
23
|
+
module Metrics
|
24
|
+
# @api private
|
25
|
+
class JVMSet < Set
|
26
|
+
include Logging
|
27
|
+
|
28
|
+
MAX_TRIES = 3
|
29
|
+
|
30
|
+
def initialize(*args)
|
31
|
+
super
|
32
|
+
|
33
|
+
@error_count = 0
|
34
|
+
end
|
35
|
+
|
36
|
+
def collect
|
37
|
+
read!
|
38
|
+
super
|
39
|
+
end
|
40
|
+
|
41
|
+
def read!
|
42
|
+
return if disabled?
|
43
|
+
|
44
|
+
heap = platform_bean.get_heap_memory_usage
|
45
|
+
non_heap = platform_bean.get_non_heap_memory_usage
|
46
|
+
|
47
|
+
gauge(:"jvm.memory.heap.used").value = heap.get_used
|
48
|
+
gauge(:"jvm.memory.heap.committed").value = heap.get_committed
|
49
|
+
gauge(:"jvm.memory.heap.max").value = heap.get_max
|
50
|
+
|
51
|
+
gauge(:"jvm.memory.non_heap.used").value = non_heap.get_used
|
52
|
+
gauge(:"jvm.memory.non_heap.committed").value = non_heap.get_committed
|
53
|
+
gauge(:"jvm.memory.non_heap.max").value = non_heap.get_max
|
54
|
+
|
55
|
+
pool_beans.each do |bean|
|
56
|
+
next unless bean.type.name == "HEAP"
|
57
|
+
|
58
|
+
tags = { name: bean.get_name }
|
59
|
+
|
60
|
+
gauge(:"jvm.memory.heap.pool.used", tags: tags).value = bean.get_usage.get_used
|
61
|
+
gauge(:"jvm.memory.heap.pool.committed", tags: tags).value = bean.get_usage.get_committed
|
62
|
+
gauge(:"jvm.memory.heap.pool.max", tags: tags).value = bean.get_usage.get_max
|
63
|
+
end
|
64
|
+
rescue Exception => e
|
65
|
+
error("JVM metrics encountered error: %s", e)
|
66
|
+
debug("Backtrace:") { e.backtrace.join("\n") }
|
67
|
+
|
68
|
+
@error_count += 1
|
69
|
+
if @error_count >= MAX_TRIES
|
70
|
+
disable!
|
71
|
+
error("Disabling JVM metrics after #{MAX_TRIES} errors", e)
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
private
|
76
|
+
|
77
|
+
def platform_bean
|
78
|
+
@platform_bean ||= java.lang.management.ManagementFactory.getPlatformMXBean(
|
79
|
+
java.lang.management.MemoryMXBean.java_class
|
80
|
+
)
|
81
|
+
end
|
82
|
+
|
83
|
+
def pool_beans
|
84
|
+
@pool_beans ||= java.lang.management.ManagementFactory.getMemoryPoolMXBeans()
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
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: 4.
|
4
|
+
version: 4.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mikkel Malmberg
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-07-
|
11
|
+
date: 2021-07-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: concurrent-ruby
|
@@ -38,7 +38,7 @@ dependencies:
|
|
38
38
|
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '3.0'
|
41
|
-
description:
|
41
|
+
description:
|
42
42
|
email:
|
43
43
|
- mikkel@elastic.co
|
44
44
|
executables: []
|
@@ -165,6 +165,7 @@ files:
|
|
165
165
|
- lib/elastic_apm/metrics.rb
|
166
166
|
- lib/elastic_apm/metrics/breakdown_set.rb
|
167
167
|
- lib/elastic_apm/metrics/cpu_mem_set.rb
|
168
|
+
- lib/elastic_apm/metrics/jvm_set.rb
|
168
169
|
- lib/elastic_apm/metrics/metric.rb
|
169
170
|
- lib/elastic_apm/metrics/set.rb
|
170
171
|
- lib/elastic_apm/metrics/span_scoped_set.rb
|
@@ -257,7 +258,7 @@ licenses:
|
|
257
258
|
- Apache-2.0
|
258
259
|
metadata:
|
259
260
|
source_code_uri: https://github.com/elastic/apm-agent-ruby
|
260
|
-
post_install_message:
|
261
|
+
post_install_message:
|
261
262
|
rdoc_options: []
|
262
263
|
require_paths:
|
263
264
|
- lib
|
@@ -272,8 +273,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
272
273
|
- !ruby/object:Gem::Version
|
273
274
|
version: '0'
|
274
275
|
requirements: []
|
275
|
-
rubygems_version: 3.0.
|
276
|
-
signing_key:
|
276
|
+
rubygems_version: 3.0.6
|
277
|
+
signing_key:
|
277
278
|
specification_version: 4
|
278
279
|
summary: The official Elastic APM agent for Ruby
|
279
280
|
test_files: []
|