datadog 2.34.0 → 2.35.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.md +75 -6
- data/ext/datadog_profiling_native_extension/collectors_thread_context.c +2 -15
- data/ext/datadog_profiling_native_extension/stack_recorder.c +6 -11
- data/lib/datadog/ai_guard/configuration.rb +1 -0
- data/lib/datadog/ai_guard/contrib/rack/request_middleware.rb +53 -39
- data/lib/datadog/ai_guard/evaluation.rb +6 -1
- data/lib/datadog/ai_guard/ext.rb +12 -1
- data/lib/datadog/appsec/api_security/route_extractor.rb +3 -0
- data/lib/datadog/appsec/contrib/rack/request_middleware.rb +9 -40
- data/lib/datadog/appsec/default_header_tags.rb +48 -0
- data/lib/datadog/core/configuration/settings.rb +10 -6
- data/lib/datadog/core/environment/process.rb +4 -2
- data/lib/datadog/core/utils/{array.rb → enumerable_compat.rb} +2 -2
- data/lib/datadog/profiling/collectors/thread_context.rb +0 -4
- data/lib/datadog/profiling/component.rb +3 -11
- data/lib/datadog/profiling/ext/dir_monkey_patches.rb +3 -2
- data/lib/datadog/profiling/stack_recorder.rb +0 -4
- data/lib/datadog/symbol_database/extractor.rb +3 -3
- data/lib/datadog/tracing/contrib/action_cable/events/broadcast.rb +4 -1
- data/lib/datadog/tracing/contrib/action_cable/events/perform_action.rb +4 -1
- data/lib/datadog/tracing/contrib/action_cable/events/transmit.rb +4 -1
- data/lib/datadog/tracing/contrib/action_cable/instrumentation.rb +4 -1
- data/lib/datadog/tracing/contrib/action_mailer/event.rb +4 -1
- data/lib/datadog/tracing/contrib/action_pack/action_controller/instrumentation.rb +1 -0
- data/lib/datadog/tracing/contrib/action_view/events/render_partial.rb +4 -1
- data/lib/datadog/tracing/contrib/action_view/events/render_template.rb +4 -1
- data/lib/datadog/tracing/contrib/active_job/events/discard.rb +4 -1
- data/lib/datadog/tracing/contrib/active_job/events/enqueue.rb +4 -1
- data/lib/datadog/tracing/contrib/active_job/events/enqueue_at.rb +4 -1
- data/lib/datadog/tracing/contrib/active_job/events/enqueue_retry.rb +4 -1
- data/lib/datadog/tracing/contrib/active_job/events/perform.rb +4 -1
- data/lib/datadog/tracing/contrib/active_job/events/retry_stopped.rb +4 -1
- data/lib/datadog/tracing/contrib/active_record/events/sql.rb +1 -0
- data/lib/datadog/tracing/contrib/active_support/cache/events/cache.rb +1 -0
- data/lib/datadog/tracing/contrib/active_support/cache/instrumentation.rb +1 -0
- data/lib/datadog/tracing/contrib/aws/instrumentation.rb +1 -0
- data/lib/datadog/tracing/contrib/dalli/instrumentation.rb +1 -0
- data/lib/datadog/tracing/contrib/delayed_job/plugin.rb +2 -0
- data/lib/datadog/tracing/contrib/delayed_job/server_internal_tracer/worker.rb +1 -0
- data/lib/datadog/tracing/contrib/elasticsearch/patcher.rb +1 -0
- data/lib/datadog/tracing/contrib/elasticsearch/quantize.rb +2 -2
- data/lib/datadog/tracing/contrib/ethon/easy_patch.rb +1 -0
- data/lib/datadog/tracing/contrib/ethon/multi_patch.rb +1 -0
- data/lib/datadog/tracing/contrib/excon/middleware.rb +1 -0
- data/lib/datadog/tracing/contrib/ext.rb +3 -0
- data/lib/datadog/tracing/contrib/faraday/middleware.rb +1 -0
- data/lib/datadog/tracing/contrib/grape/endpoint.rb +3 -0
- data/lib/datadog/tracing/contrib/graphql/unified_trace.rb +1 -0
- data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/client.rb +1 -0
- data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/server.rb +1 -0
- data/lib/datadog/tracing/contrib/hanami/action_tracer.rb +1 -0
- data/lib/datadog/tracing/contrib/hanami/renderer_policy_tracing.rb +1 -0
- data/lib/datadog/tracing/contrib/hanami/router_tracing.rb +1 -0
- data/lib/datadog/tracing/contrib/http/instrumentation.rb +1 -0
- data/lib/datadog/tracing/contrib/httpclient/instrumentation.rb +1 -0
- data/lib/datadog/tracing/contrib/httprb/instrumentation.rb +1 -0
- data/lib/datadog/tracing/contrib/kafka/event.rb +1 -0
- data/lib/datadog/tracing/contrib/mongodb/parsers.rb +5 -5
- data/lib/datadog/tracing/contrib/mongodb/subscribers.rb +2 -0
- data/lib/datadog/tracing/contrib/mysql2/instrumentation.rb +1 -0
- data/lib/datadog/tracing/contrib/opensearch/patcher.rb +1 -0
- data/lib/datadog/tracing/contrib/opensearch/quantize.rb +2 -2
- data/lib/datadog/tracing/contrib/pg/instrumentation.rb +1 -0
- data/lib/datadog/tracing/contrib/presto/instrumentation.rb +3 -0
- data/lib/datadog/tracing/contrib/propagation/sql_comment/ext.rb +3 -0
- data/lib/datadog/tracing/contrib/propagation/sql_comment/mode.rb +2 -2
- data/lib/datadog/tracing/contrib/que/tracer.rb +1 -0
- data/lib/datadog/tracing/contrib/racecar/event.rb +1 -0
- data/lib/datadog/tracing/contrib/rack/header_tagging.rb +23 -0
- data/lib/datadog/tracing/contrib/rack/middlewares.rb +1 -0
- data/lib/datadog/tracing/contrib/rack/trace_proxy_middleware.rb +2 -0
- data/lib/datadog/tracing/contrib/rails/runner.rb +2 -0
- data/lib/datadog/tracing/contrib/rake/instrumentation.rb +4 -2
- data/lib/datadog/tracing/contrib/redis/trace_middleware.rb +2 -0
- data/lib/datadog/tracing/contrib/resque/resque_job.rb +1 -0
- data/lib/datadog/tracing/contrib/rest_client/request_patch.rb +1 -0
- data/lib/datadog/tracing/contrib/roda/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/roda/instrumentation.rb +4 -1
- data/lib/datadog/tracing/contrib/sequel/database.rb +1 -0
- data/lib/datadog/tracing/contrib/sequel/dataset.rb +1 -0
- data/lib/datadog/tracing/contrib/shoryuken/tracer.rb +1 -0
- data/lib/datadog/tracing/contrib/sidekiq/client_tracer.rb +1 -0
- data/lib/datadog/tracing/contrib/sidekiq/server_internal_tracer/heartbeat.rb +2 -0
- data/lib/datadog/tracing/contrib/sidekiq/server_internal_tracer/job_fetch.rb +1 -0
- data/lib/datadog/tracing/contrib/sidekiq/server_internal_tracer/redis_info.rb +1 -0
- data/lib/datadog/tracing/contrib/sidekiq/server_internal_tracer/scheduled_poller.rb +2 -0
- data/lib/datadog/tracing/contrib/sidekiq/server_internal_tracer/stop.rb +1 -0
- data/lib/datadog/tracing/contrib/sidekiq/server_tracer.rb +3 -2
- data/lib/datadog/tracing/contrib/sinatra/tracer.rb +1 -0
- data/lib/datadog/tracing/contrib/sinatra/tracer_middleware.rb +1 -0
- data/lib/datadog/tracing/contrib/sneakers/tracer.rb +1 -0
- data/lib/datadog/tracing/contrib/sucker_punch/instrumentation.rb +1 -0
- data/lib/datadog/tracing/contrib/trilogy/instrumentation.rb +1 -0
- data/lib/datadog/tracing/contrib/utils/quantization/{hash.rb → hash_formatter.rb} +1 -1
- data/lib/datadog/tracing/metadata/ext.rb +7 -0
- data/lib/datadog/tracing/tracer.rb +3 -0
- data/lib/datadog/tracing/transport/traces.rb +2 -2
- data/lib/datadog/version.rb +1 -1
- metadata +8 -9
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require_relative '../utils/quantization/
|
|
3
|
+
require_relative '../utils/quantization/hash_formatter'
|
|
4
4
|
|
|
5
5
|
module Datadog
|
|
6
6
|
module Tracing
|
|
@@ -20,11 +20,11 @@ module Datadog
|
|
|
20
20
|
# returns a formatted and normalized query
|
|
21
21
|
def query_builder(command_name, database_name, command)
|
|
22
22
|
# always exclude the command name
|
|
23
|
-
options = Contrib::Utils::Quantization::
|
|
23
|
+
options = Contrib::Utils::Quantization::HashFormatter.merge_options(quantization_options, exclude: [command_name.to_s])
|
|
24
24
|
|
|
25
25
|
# quantized statements keys are strings to avoid leaking Symbols in older Rubies
|
|
26
26
|
# as Symbols are not GC'ed in Rubies prior to 2.2
|
|
27
|
-
base_info = Contrib::Utils::Quantization::
|
|
27
|
+
base_info = Contrib::Utils::Quantization::HashFormatter.format(
|
|
28
28
|
{
|
|
29
29
|
'operation' => command_name,
|
|
30
30
|
'database' => database_name,
|
|
@@ -33,11 +33,11 @@ module Datadog
|
|
|
33
33
|
options
|
|
34
34
|
)
|
|
35
35
|
|
|
36
|
-
base_info.merge(Contrib::Utils::Quantization::
|
|
36
|
+
base_info.merge(Contrib::Utils::Quantization::HashFormatter.format(command, options))
|
|
37
37
|
end
|
|
38
38
|
|
|
39
39
|
def quantization_options
|
|
40
|
-
Contrib::Utils::Quantization::
|
|
40
|
+
Contrib::Utils::Quantization::HashFormatter.merge_options(DEFAULT_OPTIONS, configuration[:quantize])
|
|
41
41
|
end
|
|
42
42
|
|
|
43
43
|
def configuration
|
|
@@ -30,6 +30,8 @@ module Datadog
|
|
|
30
30
|
span = Tracing.trace(Ext::SPAN_COMMAND, service: service, type: Ext::SPAN_TYPE_COMMAND)
|
|
31
31
|
set_span(event, span)
|
|
32
32
|
|
|
33
|
+
span.set_tag(Tracing::Metadata::Ext::TAG_SVC_SRC, Ext::TAG_COMPONENT)
|
|
34
|
+
|
|
33
35
|
# build a quantized Query using the Parser module
|
|
34
36
|
query = MongoDB.query_builder(event.command_name, event.database_name, event.command)
|
|
35
37
|
serialized_query = serialize_query(query)
|
|
@@ -24,6 +24,7 @@ module Datadog
|
|
|
24
24
|
on_error = Datadog.configuration_for(self, :on_error) || datadog_configuration[:on_error]
|
|
25
25
|
|
|
26
26
|
Tracing.trace(Ext::SPAN_QUERY, service: service, on_error: on_error) do |span, trace_op|
|
|
27
|
+
span.set_tag(Tracing::Metadata::Ext::TAG_SVC_SRC, Ext::TAG_COMPONENT)
|
|
27
28
|
span.resource = sql
|
|
28
29
|
span.type = Tracing::Metadata::Ext::SQL::TYPE
|
|
29
30
|
|
|
@@ -34,6 +34,7 @@ module Datadog
|
|
|
34
34
|
response = nil
|
|
35
35
|
# rubocop:disable Metrics/BlockLength
|
|
36
36
|
Tracing.trace('opensearch.query', service: datadog_configuration[:service_name]) do |span|
|
|
37
|
+
span.set_tag(Tracing::Metadata::Ext::TAG_SVC_SRC, Ext::TAG_COMPONENT)
|
|
37
38
|
# Set generic tags
|
|
38
39
|
span.set_tag(Tracing::Metadata::Ext::TAG_COMPONENT, Ext::TAG_COMPONENT)
|
|
39
40
|
span.set_tag(Tracing::Metadata::Ext::TAG_KIND, Tracing::Metadata::Ext::SpanKind::TAG_CLIENT)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require_relative '../utils/quantization/
|
|
3
|
+
require_relative '../utils/quantization/hash_formatter'
|
|
4
4
|
|
|
5
5
|
module Datadog
|
|
6
6
|
module Tracing
|
|
@@ -41,7 +41,7 @@ module Datadog
|
|
|
41
41
|
# Parse each statement and quantize them.
|
|
42
42
|
statements.collect do |string|
|
|
43
43
|
reserialize_json(string, options[:placeholder]) do |obj|
|
|
44
|
-
Contrib::Utils::Quantization::
|
|
44
|
+
Contrib::Utils::Quantization::HashFormatter.format(obj, options)
|
|
45
45
|
end
|
|
46
46
|
end.join("\n")
|
|
47
47
|
end
|
|
@@ -109,6 +109,7 @@ module Datadog
|
|
|
109
109
|
resource: resource,
|
|
110
110
|
type: Tracing::Metadata::Ext::SQL::TYPE
|
|
111
111
|
) do |span, trace_op|
|
|
112
|
+
span.set_tag(Tracing::Metadata::Ext::TAG_SVC_SRC, Ext::TAG_COMPONENT)
|
|
112
113
|
annotate_span_with_query!(span, service)
|
|
113
114
|
# Set analytics sample rate
|
|
114
115
|
Contrib::Analytics.set_sample_rate(span, analytics_sample_rate) if analytics_enabled?
|
|
@@ -23,6 +23,7 @@ module Datadog
|
|
|
23
23
|
service: datadog_configuration[:service_name]
|
|
24
24
|
) do |span|
|
|
25
25
|
begin
|
|
26
|
+
span.set_tag(Tracing::Metadata::Ext::TAG_SVC_SRC, Ext::TAG_COMPONENT)
|
|
26
27
|
decorate!(span, Ext::TAG_OPERATION_QUERY)
|
|
27
28
|
span.resource = query
|
|
28
29
|
span.type = Tracing::Metadata::Ext::SQL::TYPE
|
|
@@ -41,6 +42,7 @@ module Datadog
|
|
|
41
42
|
service: datadog_configuration[:service_name]
|
|
42
43
|
) do |span|
|
|
43
44
|
begin
|
|
45
|
+
span.set_tag(Tracing::Metadata::Ext::TAG_SVC_SRC, Ext::TAG_COMPONENT)
|
|
44
46
|
decorate!(span, Ext::TAG_OPERATION_QUERY)
|
|
45
47
|
span.resource = query
|
|
46
48
|
span.type = Tracing::Metadata::Ext::SQL::TYPE
|
|
@@ -59,6 +61,7 @@ module Datadog
|
|
|
59
61
|
service: datadog_configuration[:service_name]
|
|
60
62
|
) do |span|
|
|
61
63
|
begin
|
|
64
|
+
span.set_tag(Tracing::Metadata::Ext::TAG_SVC_SRC, Ext::TAG_COMPONENT)
|
|
62
65
|
decorate!(span, Ext::TAG_OPERATION_KILL)
|
|
63
66
|
span.resource = Ext::SPAN_KILL
|
|
64
67
|
span.type = Tracing::Metadata::Ext::AppTypes::TYPE_DB
|
|
@@ -18,6 +18,9 @@ module Datadog
|
|
|
18
18
|
# The `service` mode propagates service configuration
|
|
19
19
|
SERVICE = 'service'
|
|
20
20
|
|
|
21
|
+
# The `dynamic_service` mode propagates service configuration + DBM service hash
|
|
22
|
+
DYNAMIC_SERVICE = 'dynamic_service'
|
|
23
|
+
|
|
21
24
|
# The `full` mode propagates service configuration + trace context
|
|
22
25
|
FULL = 'full'
|
|
23
26
|
|
|
@@ -14,7 +14,7 @@ module Datadog
|
|
|
14
14
|
end
|
|
15
15
|
|
|
16
16
|
def service?
|
|
17
|
-
mode == Ext::SERVICE
|
|
17
|
+
mode == Ext::SERVICE || mode == Ext::DYNAMIC_SERVICE
|
|
18
18
|
end
|
|
19
19
|
|
|
20
20
|
def full?
|
|
@@ -26,7 +26,7 @@ module Datadog
|
|
|
26
26
|
end
|
|
27
27
|
|
|
28
28
|
def inject_sql_basehash?
|
|
29
|
-
inject_sql_basehash
|
|
29
|
+
inject_sql_basehash || mode == Ext::DYNAMIC_SERVICE
|
|
30
30
|
end
|
|
31
31
|
end
|
|
32
32
|
end
|
|
@@ -16,6 +16,7 @@ module Datadog
|
|
|
16
16
|
}
|
|
17
17
|
|
|
18
18
|
Tracing.trace(Ext::SPAN_JOB, **trace_options) do |request_span|
|
|
19
|
+
request_span.set_tag(Tracing::Metadata::Ext::TAG_SVC_SRC, Ext::TAG_COMPONENT)
|
|
19
20
|
request_span.set_tag(Contrib::Ext::Messaging::TAG_SYSTEM, Ext::TAG_COMPONENT)
|
|
20
21
|
|
|
21
22
|
request_span.resource = job.class.name.to_s
|
|
@@ -35,6 +35,7 @@ module Datadog
|
|
|
35
35
|
|
|
36
36
|
def on_start(span, event, _id, payload)
|
|
37
37
|
span.service = configuration[:service_name]
|
|
38
|
+
span.set_tag(Tracing::Metadata::Ext::TAG_SVC_SRC, Ext::TAG_COMPONENT)
|
|
38
39
|
span.resource = payload[:consumer_class]
|
|
39
40
|
|
|
40
41
|
span.set_tag(Contrib::Ext::Messaging::TAG_SYSTEM, Ext::TAG_MESSAGING_SYSTEM)
|
|
@@ -1,11 +1,18 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
+
require_relative 'header_collection'
|
|
4
|
+
|
|
3
5
|
module Datadog
|
|
4
6
|
module Tracing
|
|
5
7
|
module Contrib
|
|
6
8
|
module Rack
|
|
7
9
|
# Matches Rack-style headers with a matcher and sets matching headers into a span.
|
|
8
10
|
module HeaderTagging
|
|
11
|
+
DATADOG_REQUEST_ATTRIBUTION_HEADERS = [
|
|
12
|
+
'x-datadog-endpoint-scan',
|
|
13
|
+
'x-datadog-security-test'
|
|
14
|
+
].freeze
|
|
15
|
+
|
|
9
16
|
def self.tag_request_headers(span, env, configuration)
|
|
10
17
|
# Wrap env in a case-insensitive Rack-style accessor.
|
|
11
18
|
headers = env.is_a?(Header::RequestHeaderCollection) ? env : Header::RequestHeaderCollection.new(env)
|
|
@@ -25,6 +32,7 @@ module Datadog
|
|
|
25
32
|
end
|
|
26
33
|
|
|
27
34
|
span.set_tags(tags)
|
|
35
|
+
tag_datadog_request_attribution_headers(span, headers)
|
|
28
36
|
end
|
|
29
37
|
|
|
30
38
|
def self.tag_response_headers(span, headers, configuration)
|
|
@@ -56,6 +64,21 @@ module Datadog
|
|
|
56
64
|
|
|
57
65
|
span.set_tags(tags)
|
|
58
66
|
end
|
|
67
|
+
|
|
68
|
+
# Datadog-originated requests use these headers for request attribution.
|
|
69
|
+
# They are tagged independently of user-configured header tagging so
|
|
70
|
+
# downstream systems can distinguish them from regular application traffic.
|
|
71
|
+
#
|
|
72
|
+
# @api private
|
|
73
|
+
private_class_method def self.tag_datadog_request_attribution_headers(span, headers)
|
|
74
|
+
DATADOG_REQUEST_ATTRIBUTION_HEADERS.each do |header|
|
|
75
|
+
header_value = headers.get(header)
|
|
76
|
+
next unless header_value
|
|
77
|
+
|
|
78
|
+
header_tag = Tracing::Metadata::Ext::HTTP::RequestHeaders.to_tag(header)
|
|
79
|
+
span.set_tag(header_tag, header_value)
|
|
80
|
+
end
|
|
81
|
+
end
|
|
59
82
|
end
|
|
60
83
|
end
|
|
61
84
|
end
|
|
@@ -135,6 +135,7 @@ module Datadog
|
|
|
135
135
|
# Otherwise, the getter method would delegate to its root span
|
|
136
136
|
trace.resource = request_span.resource unless trace.resource_override?
|
|
137
137
|
|
|
138
|
+
request_span.set_tag(Tracing::Metadata::Ext::TAG_SVC_SRC, Ext::TAG_COMPONENT)
|
|
138
139
|
request_span.set_tag(Tracing::Metadata::Ext::TAG_COMPONENT, Ext::TAG_COMPONENT)
|
|
139
140
|
request_span.set_tag(Tracing::Metadata::Ext::TAG_OPERATION, Ext::TAG_OPERATION_REQUEST)
|
|
140
141
|
request_span.set_tag(Tracing::Metadata::Ext::TAG_KIND, Tracing::Metadata::Ext::SpanKind::TAG_SERVER)
|
|
@@ -32,12 +32,14 @@ module Datadog
|
|
|
32
32
|
|
|
33
33
|
request_span = Tracing.trace(Ext::SPAN_HTTP_PROXY_REQUEST, **options)
|
|
34
34
|
|
|
35
|
+
request_span.set_tag(Tracing::Metadata::Ext::TAG_SVC_SRC, Ext::TAG_COMPONENT_HTTP_PROXY)
|
|
35
36
|
request_span.set_tag(Tracing::Metadata::Ext::TAG_COMPONENT, Ext::TAG_COMPONENT_HTTP_PROXY)
|
|
36
37
|
request_span.set_tag(Tracing::Metadata::Ext::TAG_OPERATION, Ext::TAG_OPERATION_HTTP_PROXY_REQUEST)
|
|
37
38
|
request_span.set_tag(Tracing::Metadata::Ext::TAG_KIND, Tracing::Metadata::Ext::SpanKind::TAG_PROXY)
|
|
38
39
|
|
|
39
40
|
queue_span = Tracing.trace(Ext::SPAN_HTTP_PROXY_QUEUE, **options)
|
|
40
41
|
|
|
42
|
+
queue_span.set_tag(Tracing::Metadata::Ext::TAG_SVC_SRC, Ext::TAG_COMPONENT_HTTP_PROXY)
|
|
41
43
|
queue_span.set_tag(Tracing::Metadata::Ext::TAG_COMPONENT, Ext::TAG_COMPONENT_HTTP_PROXY)
|
|
42
44
|
queue_span.set_tag(Tracing::Metadata::Ext::TAG_OPERATION, Ext::TAG_OPERATION_HTTP_PROXY_QUEUE)
|
|
43
45
|
queue_span.set_tag(Tracing::Metadata::Ext::TAG_KIND, Tracing::Metadata::Ext::SpanKind::TAG_PROXY)
|
|
@@ -53,6 +53,7 @@ module Datadog
|
|
|
53
53
|
name,
|
|
54
54
|
service: Datadog.configuration.tracing[:rails][:service_name],
|
|
55
55
|
tags: {
|
|
56
|
+
Tracing::Metadata::Ext::TAG_SVC_SRC => Ext::TAG_COMPONENT,
|
|
56
57
|
Tracing::Metadata::Ext::TAG_COMPONENT => Ext::TAG_COMPONENT,
|
|
57
58
|
Tracing::Metadata::Ext::TAG_OPERATION => operation,
|
|
58
59
|
}
|
|
@@ -94,6 +95,7 @@ module Datadog
|
|
|
94
95
|
service: Datadog.configuration.tracing[:rails][:service_name],
|
|
95
96
|
resource: resource,
|
|
96
97
|
tags: {
|
|
98
|
+
Tracing::Metadata::Ext::TAG_SVC_SRC => Ext::TAG_COMPONENT,
|
|
97
99
|
Tracing::Metadata::Ext::TAG_COMPONENT => Ext::TAG_COMPONENT,
|
|
98
100
|
Tracing::Metadata::Ext::TAG_OPERATION => operation,
|
|
99
101
|
}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
require_relative '../../metadata/ext'
|
|
4
4
|
require_relative '../analytics'
|
|
5
5
|
require_relative 'ext'
|
|
6
|
-
require_relative '../utils/quantization/
|
|
6
|
+
require_relative '../utils/quantization/hash_formatter'
|
|
7
7
|
|
|
8
8
|
module Datadog
|
|
9
9
|
module Tracing
|
|
@@ -53,6 +53,7 @@ module Datadog
|
|
|
53
53
|
|
|
54
54
|
def annotate_invoke!(span, args)
|
|
55
55
|
span.resource = name
|
|
56
|
+
span.set_tag(Tracing::Metadata::Ext::TAG_SVC_SRC, Ext::TAG_COMPONENT)
|
|
56
57
|
# Set analytics sample rate
|
|
57
58
|
if Contrib::Analytics.enabled?(configuration[:analytics_enabled])
|
|
58
59
|
Contrib::Analytics.set_sample_rate(span, configuration[:analytics_sample_rate])
|
|
@@ -71,6 +72,7 @@ module Datadog
|
|
|
71
72
|
|
|
72
73
|
def annotate_execute!(span, args)
|
|
73
74
|
span.resource = name
|
|
75
|
+
span.set_tag(Tracing::Metadata::Ext::TAG_SVC_SRC, Ext::TAG_COMPONENT)
|
|
74
76
|
span.set_tag(Tracing::Metadata::Ext::TAG_COMPONENT, Ext::TAG_COMPONENT)
|
|
75
77
|
span.set_tag(Tracing::Metadata::Ext::TAG_OPERATION, Ext::TAG_OPERATION_EXECUTE)
|
|
76
78
|
span.set_tag(Ext::TAG_EXECUTE_ARGS, quantize_args(args.to_hash)) unless args.nil?
|
|
@@ -80,7 +82,7 @@ module Datadog
|
|
|
80
82
|
|
|
81
83
|
def quantize_args(args)
|
|
82
84
|
quantize_options = configuration[:quantize][:args]
|
|
83
|
-
Contrib::Utils::Quantization::
|
|
85
|
+
Contrib::Utils::Quantization::HashFormatter.format(args, quantize_options)
|
|
84
86
|
end
|
|
85
87
|
|
|
86
88
|
def enabled?
|
|
@@ -26,6 +26,7 @@ module Datadog
|
|
|
26
26
|
class << self
|
|
27
27
|
def call(client, command, service_name, command_args)
|
|
28
28
|
Tracing.trace(Redis::Ext::SPAN_COMMAND, type: Redis::Ext::TYPE, service: service_name) do |span|
|
|
29
|
+
span.set_tag(Tracing::Metadata::Ext::TAG_SVC_SRC, Redis::Ext::TAG_COMPONENT)
|
|
29
30
|
raw_command = get_command(command, true)
|
|
30
31
|
span.resource = command_args ? raw_command : get_command(command, false)
|
|
31
32
|
|
|
@@ -37,6 +38,7 @@ module Datadog
|
|
|
37
38
|
|
|
38
39
|
def call_pipelined(client, commands, service_name, command_args)
|
|
39
40
|
Tracing.trace(Redis::Ext::SPAN_COMMAND, type: Redis::Ext::TYPE, service: service_name) do |span|
|
|
41
|
+
span.set_tag(Tracing::Metadata::Ext::TAG_SVC_SRC, Redis::Ext::TAG_COMPONENT)
|
|
40
42
|
raw_command = get_pipeline_commands(commands, true)
|
|
41
43
|
span.resource = command_args ? raw_command : get_pipeline_commands(commands, false)
|
|
42
44
|
|
|
@@ -35,6 +35,7 @@ module Datadog
|
|
|
35
35
|
return yield unless datadog_configuration && Tracing.enabled?
|
|
36
36
|
|
|
37
37
|
Tracing.trace(Ext::SPAN_JOB, **span_options) do |span|
|
|
38
|
+
span.set_tag(Tracing::Metadata::Ext::TAG_SVC_SRC, Ext::TAG_COMPONENT)
|
|
38
39
|
span.resource = args.first.is_a?(Hash) && args.first['job_class'] || name
|
|
39
40
|
span.type = Tracing::Metadata::Ext::AppTypes::TYPE_WORKER
|
|
40
41
|
|
|
@@ -25,7 +25,10 @@ module Datadog
|
|
|
25
25
|
begin
|
|
26
26
|
request_method = request.request_method.to_s.upcase
|
|
27
27
|
|
|
28
|
-
|
|
28
|
+
if configuration[:service_name]
|
|
29
|
+
span.service = configuration[:service_name]
|
|
30
|
+
span.set_tag(Tracing::Metadata::Ext::TAG_SVC_SRC, Ext::TAG_COMPONENT)
|
|
31
|
+
end
|
|
29
32
|
|
|
30
33
|
span.type = Tracing::Metadata::Ext::HTTP::TYPE_INBOUND
|
|
31
34
|
|
|
@@ -20,6 +20,7 @@ module Datadog
|
|
|
20
20
|
type: Tracing::Metadata::Ext::AppTypes::TYPE_WORKER,
|
|
21
21
|
on_error: @on_error
|
|
22
22
|
) do |span|
|
|
23
|
+
span.set_tag(Tracing::Metadata::Ext::TAG_SVC_SRC, Ext::TAG_COMPONENT)
|
|
23
24
|
span.set_tag(Contrib::Ext::Messaging::TAG_SYSTEM, Ext::TAG_MESSAGING_SYSTEM)
|
|
24
25
|
|
|
25
26
|
span.set_tag(Tracing::Metadata::Ext::TAG_COMPONENT, Ext::TAG_COMPONENT)
|
|
@@ -24,6 +24,7 @@ module Datadog
|
|
|
24
24
|
resource = job_resource(job)
|
|
25
25
|
|
|
26
26
|
Datadog::Tracing.trace(Ext::SPAN_PUSH, service: @sidekiq_service) do |span, trace_op|
|
|
27
|
+
span.set_tag(Datadog::Tracing::Metadata::Ext::TAG_SVC_SRC, Ext::TAG_COMPONENT)
|
|
27
28
|
if Tracing::Distributed::PropagationPolicy.enabled?(
|
|
28
29
|
global_config: configuration,
|
|
29
30
|
trace: trace_op
|
|
@@ -13,6 +13,7 @@ module Datadog
|
|
|
13
13
|
configuration = Datadog.configuration.tracing[:sidekiq]
|
|
14
14
|
|
|
15
15
|
Datadog::Tracing.trace(Ext::SPAN_HEARTBEAT, service: configuration[:service_name]) do |span|
|
|
16
|
+
span.set_tag(Datadog::Tracing::Metadata::Ext::TAG_SVC_SRC, Ext::TAG_COMPONENT)
|
|
16
17
|
span.type = Datadog::Tracing::Metadata::Ext::AppTypes::TYPE_WORKER
|
|
17
18
|
|
|
18
19
|
span.set_tag(Contrib::Ext::Messaging::TAG_SYSTEM, Ext::TAG_COMPONENT)
|
|
@@ -38,6 +39,7 @@ module Datadog
|
|
|
38
39
|
configuration = Datadog.configuration.tracing[:sidekiq]
|
|
39
40
|
|
|
40
41
|
Datadog::Tracing.trace(Ext::SPAN_HEARTBEAT, service: configuration[:service_name]) do |span|
|
|
42
|
+
span.set_tag(Datadog::Tracing::Metadata::Ext::TAG_SVC_SRC, Ext::TAG_COMPONENT)
|
|
41
43
|
span.type = Datadog::Tracing::Metadata::Ext::AppTypes::TYPE_WORKER
|
|
42
44
|
|
|
43
45
|
span.set_tag(Contrib::Ext::Messaging::TAG_SYSTEM, Ext::TAG_COMPONENT)
|
|
@@ -13,6 +13,7 @@ module Datadog
|
|
|
13
13
|
configuration = Datadog.configuration.tracing[:sidekiq]
|
|
14
14
|
|
|
15
15
|
Datadog::Tracing.trace(Ext::SPAN_JOB_FETCH, service: configuration[:service_name]) do |span|
|
|
16
|
+
span.set_tag(Datadog::Tracing::Metadata::Ext::TAG_SVC_SRC, Ext::TAG_COMPONENT)
|
|
16
17
|
span.type = Datadog::Tracing::Metadata::Ext::AppTypes::TYPE_WORKER
|
|
17
18
|
|
|
18
19
|
span.set_tag(Contrib::Ext::Messaging::TAG_SYSTEM, Ext::TAG_COMPONENT)
|
|
@@ -11,6 +11,7 @@ module Datadog
|
|
|
11
11
|
configuration = Datadog.configuration.tracing[:sidekiq]
|
|
12
12
|
|
|
13
13
|
Datadog::Tracing.trace(Ext::SPAN_REDIS_INFO, service: configuration[:service_name]) do |span|
|
|
14
|
+
span.set_tag(Datadog::Tracing::Metadata::Ext::TAG_SVC_SRC, Ext::TAG_COMPONENT)
|
|
14
15
|
span.type = Datadog::Tracing::Metadata::Ext::AppTypes::TYPE_WORKER
|
|
15
16
|
|
|
16
17
|
span.set_tag(Contrib::Ext::Messaging::TAG_SYSTEM, Ext::TAG_COMPONENT)
|
|
@@ -12,6 +12,7 @@ module Datadog
|
|
|
12
12
|
configuration = Datadog.configuration.tracing[:sidekiq]
|
|
13
13
|
|
|
14
14
|
Datadog::Tracing.trace(Ext::SPAN_SCHEDULED_PUSH, service: configuration[:service_name]) do |span|
|
|
15
|
+
span.set_tag(Datadog::Tracing::Metadata::Ext::TAG_SVC_SRC, Ext::TAG_COMPONENT)
|
|
15
16
|
span.type = Datadog::Tracing::Metadata::Ext::AppTypes::TYPE_WORKER
|
|
16
17
|
|
|
17
18
|
span.set_tag(Contrib::Ext::Messaging::TAG_SYSTEM, Ext::TAG_COMPONENT)
|
|
@@ -34,6 +35,7 @@ module Datadog
|
|
|
34
35
|
configuration = Datadog.configuration.tracing[:sidekiq]
|
|
35
36
|
|
|
36
37
|
Datadog::Tracing.trace(Ext::SPAN_SCHEDULED_WAIT, service: configuration[:service_name]) do |span|
|
|
38
|
+
span.set_tag(Datadog::Tracing::Metadata::Ext::TAG_SVC_SRC, Ext::TAG_COMPONENT)
|
|
37
39
|
span.type = Datadog::Tracing::Metadata::Ext::AppTypes::TYPE_WORKER
|
|
38
40
|
|
|
39
41
|
span.set_tag(Contrib::Ext::Messaging::TAG_SYSTEM, Ext::TAG_COMPONENT)
|
|
@@ -11,6 +11,7 @@ module Datadog
|
|
|
11
11
|
configuration = Datadog.configuration.tracing[:sidekiq]
|
|
12
12
|
|
|
13
13
|
Datadog::Tracing.trace(Ext::SPAN_STOP, service: configuration[:service_name]) do |span|
|
|
14
|
+
span.set_tag(Datadog::Tracing::Metadata::Ext::TAG_SVC_SRC, Ext::TAG_COMPONENT)
|
|
14
15
|
span.type = Datadog::Tracing::Metadata::Ext::AppTypes::TYPE_WORKER
|
|
15
16
|
|
|
16
17
|
span.set_tag(Contrib::Ext::Messaging::TAG_SYSTEM, Ext::TAG_COMPONENT)
|
|
@@ -4,7 +4,7 @@ require_relative '../../metadata/ext'
|
|
|
4
4
|
require_relative '../analytics'
|
|
5
5
|
require_relative 'ext'
|
|
6
6
|
require_relative 'utils'
|
|
7
|
-
require_relative '../utils/quantization/
|
|
7
|
+
require_relative '../utils/quantization/hash_formatter'
|
|
8
8
|
require_relative 'distributed/propagation'
|
|
9
9
|
|
|
10
10
|
module Datadog
|
|
@@ -36,6 +36,7 @@ module Datadog
|
|
|
36
36
|
type: Datadog::Tracing::Metadata::Ext::AppTypes::TYPE_WORKER,
|
|
37
37
|
on_error: @on_error
|
|
38
38
|
) do |span|
|
|
39
|
+
span.set_tag(Datadog::Tracing::Metadata::Ext::TAG_SVC_SRC, Ext::TAG_COMPONENT)
|
|
39
40
|
span.resource = resource
|
|
40
41
|
|
|
41
42
|
span.set_tag(Contrib::Ext::Messaging::TAG_SYSTEM, Ext::TAG_COMPONENT)
|
|
@@ -68,7 +69,7 @@ module Datadog
|
|
|
68
69
|
|
|
69
70
|
args = job['args']
|
|
70
71
|
if args && !args.empty?
|
|
71
|
-
span.set_tag(Ext::TAG_JOB_ARGS, Contrib::Utils::Quantization::
|
|
72
|
+
span.set_tag(Ext::TAG_JOB_ARGS, Contrib::Utils::Quantization::HashFormatter.format(args, (@quantize[:args] || {})))
|
|
72
73
|
end
|
|
73
74
|
|
|
74
75
|
yield
|
|
@@ -57,6 +57,7 @@ module Datadog
|
|
|
57
57
|
type: Tracing::Metadata::Ext::HTTP::TYPE_INBOUND,
|
|
58
58
|
resource: "#{request.request_method} #{datadog_route}",
|
|
59
59
|
) do |span, trace|
|
|
60
|
+
span.set_tag(Tracing::Metadata::Ext::TAG_SVC_SRC, Ext::TAG_COMPONENT)
|
|
60
61
|
span.set_tag(Ext::TAG_APP_NAME, settings.name || settings.superclass.name)
|
|
61
62
|
span.set_tag(Ext::TAG_ROUTE_PATH, datadog_route)
|
|
62
63
|
|
|
@@ -28,6 +28,7 @@ module Datadog
|
|
|
28
28
|
service: configuration[:service_name],
|
|
29
29
|
type: Tracing::Metadata::Ext::HTTP::TYPE_INBOUND
|
|
30
30
|
) do |span|
|
|
31
|
+
span.set_tag(Tracing::Metadata::Ext::TAG_SVC_SRC, Ext::TAG_COMPONENT)
|
|
31
32
|
# this is kept nil until we set a correct one (either in the route or with a fallback in the ensure below)
|
|
32
33
|
# the nil signals that there's no good one yet and is also seen by profiler, when sampling the resource
|
|
33
34
|
span.resource = nil
|
|
@@ -22,6 +22,7 @@ module Datadog
|
|
|
22
22
|
}
|
|
23
23
|
|
|
24
24
|
Tracing.trace(Ext::SPAN_JOB, **trace_options) do |request_span|
|
|
25
|
+
request_span.set_tag(Tracing::Metadata::Ext::TAG_SVC_SRC, Ext::TAG_COMPONENT)
|
|
25
26
|
request_span.set_tag(Contrib::Ext::Messaging::TAG_SYSTEM, Ext::TAG_MESSAGING_SYSTEM)
|
|
26
27
|
|
|
27
28
|
request_span.set_tag(Tracing::Metadata::Ext::TAG_COMPONENT, Ext::TAG_COMPONENT)
|
|
@@ -86,6 +86,7 @@ module Datadog
|
|
|
86
86
|
|
|
87
87
|
def __with_instrumentation(name)
|
|
88
88
|
Datadog::Tracing.trace(name, service: datadog_configuration[:service_name]) do |span|
|
|
89
|
+
span.set_tag(Datadog::Tracing::Metadata::Ext::TAG_SVC_SRC, Ext::TAG_COMPONENT)
|
|
89
90
|
span.type = Datadog::Tracing::Metadata::Ext::AppTypes::TYPE_WORKER
|
|
90
91
|
span.set_tag(Datadog::Tracing::Metadata::Ext::TAG_COMPONENT, Ext::TAG_COMPONENT)
|
|
91
92
|
span.set_tag(Ext::TAG_QUEUE, to_s)
|
|
@@ -23,6 +23,7 @@ module Datadog
|
|
|
23
23
|
service = Datadog.configuration_for(self, :service_name) || datadog_configuration[:service_name]
|
|
24
24
|
|
|
25
25
|
Tracing.trace(Ext::SPAN_QUERY, service: service) do |span, trace_op|
|
|
26
|
+
span.set_tag(Tracing::Metadata::Ext::TAG_SVC_SRC, Ext::TAG_COMPONENT)
|
|
26
27
|
span.resource = sql
|
|
27
28
|
span.type = Tracing::Metadata::Ext::SQL::TYPE
|
|
28
29
|
|
|
@@ -36,6 +36,13 @@ module Datadog
|
|
|
36
36
|
# Set to the global service name when a span's service is overridden
|
|
37
37
|
TAG_BASE_SERVICE = '_dd.base_service'
|
|
38
38
|
|
|
39
|
+
# Set to the source of a span's service override: the component name for Datadog-instrumented spans
|
|
40
|
+
# (e.g. 'redis', 'pg'), or {SVC_SRC_MANUAL} for manually-instrumented spans
|
|
41
|
+
TAG_SVC_SRC = '_dd.svc_src'
|
|
42
|
+
|
|
43
|
+
# Value for {TAG_SVC_SRC} indicating that a span was manually instrumented via the Tracing API
|
|
44
|
+
SVC_SRC_MANUAL = 'm'
|
|
45
|
+
|
|
39
46
|
# Defines constants for trace analytics
|
|
40
47
|
# @public_api
|
|
41
48
|
module Analytics
|
|
@@ -420,6 +420,9 @@ module Datadog
|
|
|
420
420
|
events.span_before_finish.subscribe do |event_span_op, _event_trace_op|
|
|
421
421
|
if event_span_op.service && event_span_op.service != @default_service
|
|
422
422
|
event_span_op.set_tag(Tracing::Metadata::Ext::TAG_BASE_SERVICE, @default_service)
|
|
423
|
+
event_span_op.set_tag(Tracing::Metadata::Ext::TAG_SVC_SRC, Tracing::Metadata::Ext::SVC_SRC_MANUAL) unless event_span_op.get_tag(Tracing::Metadata::Ext::TAG_SVC_SRC)
|
|
424
|
+
else
|
|
425
|
+
event_span_op.send(:meta).delete(Tracing::Metadata::Ext::TAG_SVC_SRC)
|
|
423
426
|
end
|
|
424
427
|
end
|
|
425
428
|
|
|
@@ -4,7 +4,7 @@ require_relative '../../core/chunker'
|
|
|
4
4
|
require_relative '../../core/transport/parcel'
|
|
5
5
|
require_relative '../../core/transport/request'
|
|
6
6
|
require_relative '../../core/transport/transport'
|
|
7
|
-
require_relative '../../core/utils/
|
|
7
|
+
require_relative '../../core/utils/enumerable_compat'
|
|
8
8
|
require_relative 'http/client'
|
|
9
9
|
require_relative 'serializable_trace'
|
|
10
10
|
require_relative 'trace_formatter'
|
|
@@ -62,7 +62,7 @@ module Datadog
|
|
|
62
62
|
# @return [Enumerable[Array[Bytes,Integer]]] list of encoded chunks: each containing a byte array and
|
|
63
63
|
# number of traces
|
|
64
64
|
def encode_in_chunks(traces)
|
|
65
|
-
encoded_traces = Core::Utils::
|
|
65
|
+
encoded_traces = Core::Utils::EnumerableCompat.filter_map(traces) do |trace|
|
|
66
66
|
encode_one(trace)
|
|
67
67
|
end
|
|
68
68
|
|