instana 1.199.6 → 1.202.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/.circleci/config.yml +41 -6
- data/.rubocop.yml +11 -2
- data/lib/instana.rb +2 -4
- data/lib/instana/activator.rb +13 -1
- data/lib/instana/activators/active_job.rb +21 -0
- data/lib/instana/activators/aws_sdk_dynamodb.rb +1 -1
- data/lib/instana/activators/aws_sdk_s3.rb +1 -1
- data/lib/instana/activators/aws_sdk_sns.rb +1 -1
- data/lib/instana/activators/aws_sdk_sqs.rb +1 -1
- data/lib/instana/activators/redis.rb +1 -1
- data/lib/instana/activators/resque_worker.rb +4 -2
- data/lib/instana/activators/sidekiq_client.rb +1 -1
- data/lib/instana/activators/sidekiq_worker.rb +1 -1
- data/lib/instana/backend/host_agent.rb +7 -6
- data/lib/instana/backend/host_agent_reporting_observer.rb +2 -4
- data/lib/instana/backend/serverless_agent.rb +1 -1
- data/lib/instana/config.rb +6 -1
- data/lib/instana/frameworks/rails.rb +5 -5
- data/lib/instana/frameworks/roda.rb +1 -1
- data/lib/instana/instrumentation/active_job.rb +52 -0
- data/lib/instana/instrumentation/aws_sdk_s3.rb +1 -1
- data/lib/instana/instrumentation/aws_sdk_sns.rb +1 -1
- data/lib/instana/instrumentation/aws_sdk_sqs.rb +1 -1
- data/lib/instana/instrumentation/instrumented_request.rb +4 -4
- data/lib/instana/instrumentation/rack.rb +1 -1
- data/lib/instana/instrumentation/shoryuken.rb +1 -1
- data/lib/instana/instrumented_logger.rb +26 -0
- data/lib/instana/setup.rb +5 -1
- data/lib/instana/snapshot/docker_container.rb +1 -1
- data/lib/instana/snapshot/fargate_task.rb +1 -1
- data/lib/instana/snapshot/google_cloud_run_instance.rb +1 -1
- data/lib/instana/tracing/processor.rb +8 -5
- data/lib/instana/tracing/span.rb +2 -2
- data/lib/instana/tracing/span_context.rb +1 -1
- data/lib/instana/version.rb +1 -1
- data/test/instrumentation/rails_active_job_test.rb +65 -0
- data/test/test_helper.rb +10 -1
- data/test/tracing/instrumented_logger_test.rb +39 -0
- metadata +9 -10
- data/benchmarks/10k-rack-traces.rb +0 -95
- data/benchmarks/Gemfile +0 -11
- data/benchmarks/Gemfile.lock +0 -38
- data/benchmarks/id_generation.rb +0 -16
- data/benchmarks/opentracing.rb +0 -30
- data/benchmarks/rack_vanilla_vs_traced.rb +0 -88
- data/benchmarks/stackprof_rack_tracing.rb +0 -80
- data/benchmarks/time_processing.rb +0 -16
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3c72533e116e54ad36227ccdf76c02aaaeb3536f40c99ecf1009f0cf284ebf99
|
4
|
+
data.tar.gz: 3f748a84fed00443296d65340fc71e876a69c17d8698637356529d6d5980aa5e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: '009d83c5f6a7d8a5f4da1903fb482c6fe5a5cb68de6c984c1a58f52b01559bae3bbf43a10f028deae5cabe73c41a07e625f5545037ca295d53108e03564efbe1'
|
7
|
+
data.tar.gz: 241d6f1b46de88f5e7933dc85530cc5f540f71f9d9ad26b0778ffb970645b2c5c2aa4d0b11f05d85033cb4232339e9e27b92bfcd386fe79a1e3d9578485c9bfc
|
data/.circleci/config.yml
CHANGED
@@ -132,12 +132,12 @@ commands:
|
|
132
132
|
name: Install Depdendecies
|
133
133
|
command: |
|
134
134
|
bundle check || bundle install
|
135
|
-
|
135
|
+
run_sonarqube:
|
136
136
|
steps:
|
137
137
|
- run:
|
138
|
-
name:
|
138
|
+
name: Install Java
|
139
139
|
command: |
|
140
|
-
|
140
|
+
sudo apt-get install openjdk-11-jdk
|
141
141
|
- run:
|
142
142
|
name: Run SonarQube to capture coverage
|
143
143
|
command: |
|
@@ -147,15 +147,35 @@ commands:
|
|
147
147
|
-Dsonar.projectKey=ruby-sensor \
|
148
148
|
-Dsonar.sources=. \
|
149
149
|
-Dsonar.host.url="${SONARQUBE_URL}" \
|
150
|
-
-Dsonar.login="${SONARQUBE_LOGIN}"
|
151
|
-
|
150
|
+
-Dsonar.login="${SONARQUBE_LOGIN}"
|
151
|
+
run_tests:
|
152
|
+
steps:
|
153
|
+
- run:
|
154
|
+
name: Run Tests
|
155
|
+
command: |
|
156
|
+
mkdir _junit
|
157
|
+
bundle exec rake
|
158
|
+
- store_test_results:
|
159
|
+
path: ~/_junit
|
152
160
|
run_rubocop:
|
153
161
|
steps:
|
154
162
|
- run:
|
155
163
|
name: Run Tests
|
156
164
|
command: |
|
157
165
|
bundle exec rubocop
|
158
|
-
|
166
|
+
publish_gem:
|
167
|
+
steps:
|
168
|
+
- run:
|
169
|
+
name: Setup Access
|
170
|
+
command: |
|
171
|
+
mkdir -p ~/.gem
|
172
|
+
echo -e "---\r\n:rubygems_api_key: $RUBYGEMS_API_KEY" > ~/.gem/credentials
|
173
|
+
chmod 0600 /home/circleci/.gem/credentials
|
174
|
+
- run:
|
175
|
+
name: Publish Gem
|
176
|
+
command: |
|
177
|
+
bundle exec rake release[origin]
|
178
|
+
|
159
179
|
jobs:
|
160
180
|
test_core:
|
161
181
|
parameters:
|
@@ -189,8 +209,23 @@ jobs:
|
|
189
209
|
- checkout
|
190
210
|
- setup
|
191
211
|
- run_rubocop
|
212
|
+
- run_sonarqube
|
213
|
+
publish:
|
214
|
+
executor: ruby_27
|
215
|
+
steps:
|
216
|
+
- checkout
|
217
|
+
- setup
|
218
|
+
- publish_gem
|
192
219
|
|
193
220
|
workflows:
|
221
|
+
publish:
|
222
|
+
jobs:
|
223
|
+
- publish:
|
224
|
+
filters:
|
225
|
+
branches:
|
226
|
+
ignore: /.*/
|
227
|
+
tags:
|
228
|
+
only: /^v.*/
|
194
229
|
core:
|
195
230
|
jobs:
|
196
231
|
- lint
|
data/.rubocop.yml
CHANGED
@@ -2,11 +2,14 @@ inherit_from: .rubocop_todo.yml
|
|
2
2
|
|
3
3
|
require:
|
4
4
|
- ./extras/license_header.rb
|
5
|
-
|
5
|
+
|
6
6
|
# Remove when we remove .rubocop_todo.yml
|
7
7
|
AllCops:
|
8
8
|
NewCops: disable
|
9
9
|
|
10
|
+
Metrics/PerceivedComplexity:
|
11
|
+
Max: 20
|
12
|
+
|
10
13
|
# Broken on 1.9
|
11
14
|
Style/HashSyntax:
|
12
15
|
Enabled: false
|
@@ -19,7 +22,13 @@ Style/NilComparison:
|
|
19
22
|
|
20
23
|
Style/SoleNestedConditional:
|
21
24
|
Enabled: false
|
22
|
-
|
25
|
+
|
23
26
|
# Ruby 2.1 compatibility
|
24
27
|
Style/SafeNavigation:
|
25
28
|
Enabled: false
|
29
|
+
|
30
|
+
Style/SymbolProc:
|
31
|
+
Enabled: false
|
32
|
+
|
33
|
+
Style/MultilineBlockChain:
|
34
|
+
Enabled: false
|
data/lib/instana.rb
CHANGED
@@ -1,10 +1,7 @@
|
|
1
1
|
# (c) Copyright IBM Corp. 2021
|
2
2
|
# (c) Copyright Instana Inc. 2016
|
3
3
|
|
4
|
-
require '
|
5
|
-
require 'sys-proctable'
|
6
|
-
|
7
|
-
require "instana/setup"
|
4
|
+
require 'instana/setup'
|
8
5
|
|
9
6
|
# Boot the instana agent background thread. If you wish to have greater
|
10
7
|
# control on the where and which thread this is run in, instead use
|
@@ -15,4 +12,5 @@ require "instana/setup"
|
|
15
12
|
# the thread of your choice.
|
16
13
|
#
|
17
14
|
|
15
|
+
::Instana::Activator.start
|
18
16
|
::Instana.agent.spawn_background_thread
|
data/lib/instana/activator.rb
CHANGED
@@ -43,4 +43,16 @@ module Instana
|
|
43
43
|
end
|
44
44
|
end
|
45
45
|
|
46
|
-
Dir["#{__dir__}/activators/*.rb"]
|
46
|
+
Dir["#{__dir__}/activators/*.rb"]
|
47
|
+
.sort
|
48
|
+
.select do |f|
|
49
|
+
# :nocov:
|
50
|
+
if ENV['INSTANA_ACTIVATE_SET']
|
51
|
+
base = File.basename(f, '.rb')
|
52
|
+
ENV.fetch('INSTANA_ACTIVATE_SET', '').split(',').include?(base)
|
53
|
+
else
|
54
|
+
true
|
55
|
+
end
|
56
|
+
# :nocov:
|
57
|
+
end
|
58
|
+
.each { |f| require(f) }
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# (c) Copyright IBM Corp. 2021
|
2
|
+
# (c) Copyright Instana Inc. 2021
|
3
|
+
|
4
|
+
module Instana
|
5
|
+
module Activators
|
6
|
+
class ActiveJob < Activator
|
7
|
+
def can_instrument?
|
8
|
+
defined?(::ActiveJob::Base)
|
9
|
+
end
|
10
|
+
|
11
|
+
def instrument
|
12
|
+
require 'instana/instrumentation/active_job'
|
13
|
+
|
14
|
+
::ActiveJob::Base
|
15
|
+
.prepend(Instana::Instrumentation::ActiveJob)
|
16
|
+
|
17
|
+
true
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -16,8 +16,10 @@ module Instana
|
|
16
16
|
::Resque::Worker.prepend(::Instana::Instrumentation::ResqueWorker)
|
17
17
|
::Resque::Job.prepend(::Instana::Instrumentation::ResqueJob)
|
18
18
|
|
19
|
-
::
|
20
|
-
::
|
19
|
+
if ::Instana.config[:'resque-worker'][:'setup-fork']
|
20
|
+
::Resque.after_fork do |_job|
|
21
|
+
::Instana.agent.after_fork
|
22
|
+
end
|
21
23
|
end
|
22
24
|
|
23
25
|
# Set this so we assure that any remaining collected traces are reported at_exit
|
@@ -5,7 +5,7 @@ module Instana
|
|
5
5
|
module Activators
|
6
6
|
class SidekiqClient < Activator
|
7
7
|
def can_instrument?
|
8
|
-
defined?(::Sidekiq) && ::Instana.config[:'sidekiq-client'][:enabled]
|
8
|
+
defined?(::Sidekiq) && ::Sidekiq.respond_to?(:configure_client) && ::Instana.config[:'sidekiq-client'][:enabled]
|
9
9
|
end
|
10
10
|
|
11
11
|
def instrument
|
@@ -5,7 +5,7 @@ module Instana
|
|
5
5
|
module Activators
|
6
6
|
class SidekiqWorker < Activator
|
7
7
|
def can_instrument?
|
8
|
-
defined?(::Sidekiq) && ::Instana.config[:'sidekiq-worker'][:enabled]
|
8
|
+
defined?(::Sidekiq) && ::Sidekiq.respond_to?(:configure_server) && ::Instana.config[:'sidekiq-worker'][:enabled]
|
9
9
|
end
|
10
10
|
|
11
11
|
def instrument
|
@@ -5,12 +5,13 @@ module Instana
|
|
5
5
|
module Backend
|
6
6
|
# @since 1.197.0
|
7
7
|
class HostAgent
|
8
|
-
attr_reader :future
|
8
|
+
attr_reader :future, :client
|
9
9
|
|
10
10
|
def initialize(discovery: Concurrent::Atom.new(nil), logger: ::Instana.logger)
|
11
11
|
@discovery = discovery
|
12
12
|
@logger = logger
|
13
13
|
@future = nil
|
14
|
+
@client = nil
|
14
15
|
end
|
15
16
|
|
16
17
|
def setup; end
|
@@ -26,14 +27,14 @@ module Instana
|
|
26
27
|
alias start spawn_background_thread
|
27
28
|
|
28
29
|
def announce
|
29
|
-
client = until_not_nil { HostAgentLookup.new.call }
|
30
|
+
@client = until_not_nil { HostAgentLookup.new.call }
|
30
31
|
@discovery.delete_observers
|
31
32
|
@discovery
|
32
|
-
.with_observer(HostAgentActivationObserver.new(client, @discovery))
|
33
|
-
.with_observer(HostAgentReportingObserver.new(client, @discovery))
|
33
|
+
.with_observer(HostAgentActivationObserver.new(@client, @discovery))
|
34
|
+
.with_observer(HostAgentReportingObserver.new(@client, @discovery))
|
34
35
|
|
35
36
|
@discovery.swap { nil }
|
36
|
-
client
|
37
|
+
@client
|
37
38
|
end
|
38
39
|
|
39
40
|
alias after_fork announce
|
@@ -48,7 +49,7 @@ module Instana
|
|
48
49
|
{
|
49
50
|
e: discovery_value['pid'],
|
50
51
|
h: discovery_value['agentUuid']
|
51
|
-
}.
|
52
|
+
}.reject { |_, v| v.nil? }
|
52
53
|
end
|
53
54
|
|
54
55
|
# @return [Array] extra headers to include in the trace
|
@@ -49,11 +49,10 @@ module Instana
|
|
49
49
|
response = @client.send_request('POST', path, spans)
|
50
50
|
|
51
51
|
unless response.ok?
|
52
|
+
@logger.debug("Sent `#{spans.count}` spans to `#{path}` and got `#{response.code}`.")
|
52
53
|
@discovery.swap { nil }
|
53
54
|
break
|
54
55
|
end
|
55
|
-
|
56
|
-
@logger.debug("Sent `#{spans.count}` spans to `#{path}` and got `#{response.code}`.")
|
57
56
|
end
|
58
57
|
end
|
59
58
|
|
@@ -68,10 +67,9 @@ module Instana
|
|
68
67
|
if response.ok?
|
69
68
|
handle_agent_tasks(response, discovery) unless response.body.empty?
|
70
69
|
else
|
70
|
+
@logger.debug("Sent `#{payload}` to `#{path}` and got `#{response.code}`.")
|
71
71
|
@discovery.swap { nil }
|
72
72
|
end
|
73
|
-
|
74
|
-
@logger.debug("Sent `#{payload}` to `#{path}` and got `#{response.code}`.")
|
75
73
|
end
|
76
74
|
|
77
75
|
def handle_agent_tasks(response, discovery)
|
data/lib/instana/config.rb
CHANGED
@@ -27,6 +27,9 @@ module Instana
|
|
27
27
|
# Enable/disable tracing (default: enabled)
|
28
28
|
@config[:tracing] = { :enabled => true }
|
29
29
|
|
30
|
+
# Enable/Disable logging
|
31
|
+
@config[:logging] = { :enabled => true }
|
32
|
+
|
30
33
|
# Collector interval
|
31
34
|
@config[:collector] = { :enabled => true, :interval => 1 }
|
32
35
|
|
@@ -53,6 +56,8 @@ module Instana
|
|
53
56
|
# W3 Trace Context Support
|
54
57
|
@config[:w3_trace_correlation] = ENV['INSTANA_DISABLE_W3C_TRACE_CORRELATION'].nil?
|
55
58
|
|
59
|
+
@config[:post_fork_proc] = proc { ::Instana.agent.spawn_background_thread }
|
60
|
+
|
56
61
|
@config[:action_controller] = { :enabled => true }
|
57
62
|
@config[:action_view] = { :enabled => true }
|
58
63
|
@config[:active_record] = { :enabled => true }
|
@@ -63,7 +68,7 @@ module Instana
|
|
63
68
|
@config[:nethttp] = { :enabled => true }
|
64
69
|
@config[:redis] = { :enabled => true }
|
65
70
|
@config[:'resque-client'] = { :enabled => true }
|
66
|
-
@config[:'resque-worker'] = { :enabled => true }
|
71
|
+
@config[:'resque-worker'] = { :enabled => true, :'setup-fork' => true }
|
67
72
|
@config[:'rest-client'] = { :enabled => true }
|
68
73
|
@config[:'sidekiq-client'] = { :enabled => true }
|
69
74
|
@config[:'sidekiq-worker'] = { :enabled => true }
|
@@ -3,9 +3,6 @@
|
|
3
3
|
|
4
4
|
if ::Rails::VERSION::MAJOR < 3
|
5
5
|
::Rails.configuration.after_initialize do
|
6
|
-
# In Rails, let's use the Rails logger
|
7
|
-
::Instana.logger = ::Rails.logger if ::Rails.logger
|
8
|
-
|
9
6
|
if ::Instana.config[:tracing][:enabled]
|
10
7
|
::Instana.logger.debug "Instrumenting Rack"
|
11
8
|
::Rails.configuration.middleware.insert 0, ::Instana::Rack
|
@@ -17,8 +14,11 @@ else
|
|
17
14
|
module ::Instana
|
18
15
|
class Railtie < ::Rails::Railtie
|
19
16
|
initializer 'instana.rack' do |app|
|
20
|
-
#
|
21
|
-
::Instana.
|
17
|
+
# Configure the Instrumented Logger
|
18
|
+
if ::Instana.config[:logging][:enabled] && !ENV.key?('INSTANA_TEST')
|
19
|
+
logger = ::Instana::InstrumentedLogger.new('/dev/null')
|
20
|
+
Rails.logger.extend(ActiveSupport::Logger.broadcast(logger))
|
21
|
+
end
|
22
22
|
|
23
23
|
if ::Instana.config[:tracing][:enabled]
|
24
24
|
::Instana.logger.debug "Instrumenting Rack"
|
@@ -0,0 +1,52 @@
|
|
1
|
+
# (c) Copyright IBM Corp. 2021
|
2
|
+
# (c) Copyright Instana Inc. 2021
|
3
|
+
|
4
|
+
module Instana
|
5
|
+
module Instrumentation
|
6
|
+
module ActiveJob
|
7
|
+
def self.prepended(target)
|
8
|
+
target.around_enqueue do |job, block|
|
9
|
+
tags = {
|
10
|
+
activejob: {
|
11
|
+
queue: job.queue_name,
|
12
|
+
job: job.class.to_s,
|
13
|
+
action: :enqueue,
|
14
|
+
job_id: job.job_id
|
15
|
+
}
|
16
|
+
}
|
17
|
+
|
18
|
+
::Instana::Tracer.trace(:activejob, tags) do
|
19
|
+
context = ::Instana.tracer.context
|
20
|
+
job.arguments = [{
|
21
|
+
given_arguments: job.arguments,
|
22
|
+
instana_context: context ? context.to_hash : nil
|
23
|
+
}]
|
24
|
+
|
25
|
+
block.call
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
target.around_perform do |job, block|
|
30
|
+
tags = {
|
31
|
+
activejob: {
|
32
|
+
queue: job.queue_name,
|
33
|
+
job: job.class.to_s,
|
34
|
+
action: :perform,
|
35
|
+
job_id: job.job_id
|
36
|
+
}
|
37
|
+
}
|
38
|
+
|
39
|
+
incoming_context = if job.arguments.is_a?(Array) && job.arguments.first.is_a?(Hash)
|
40
|
+
instana_context = job.arguments.first[:instana_context]
|
41
|
+
job.arguments = job.arguments.first[:given_arguments]
|
42
|
+
instana_context ? ::Instana::SpanContext.new(instana_context[:trace_id], instana_context[:span_id]) : nil
|
43
|
+
end
|
44
|
+
|
45
|
+
::Instana::Tracer.start_or_continue_trace(:activejob, tags, incoming_context) do
|
46
|
+
block.call
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|