datadog 2.33.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.
Files changed (147) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +99 -1
  3. data/ext/datadog_profiling_native_extension/collectors_cpu_and_wall_time_worker.c +20 -0
  4. data/ext/datadog_profiling_native_extension/collectors_thread_context.c +2 -15
  5. data/ext/datadog_profiling_native_extension/macos_sampler_thread.h +55 -0
  6. data/ext/datadog_profiling_native_extension/stack_recorder.c +6 -11
  7. data/lib/datadog/ai_guard/configuration.rb +1 -0
  8. data/lib/datadog/ai_guard/contrib/rack/request_middleware.rb +53 -39
  9. data/lib/datadog/ai_guard/evaluation.rb +6 -1
  10. data/lib/datadog/ai_guard/ext.rb +12 -1
  11. data/lib/datadog/appsec/api_security/route_extractor.rb +3 -0
  12. data/lib/datadog/appsec/component.rb +4 -1
  13. data/lib/datadog/appsec/compressed_json.rb +2 -2
  14. data/lib/datadog/appsec/contrib/aws_lambda/waf_addresses.rb +3 -3
  15. data/lib/datadog/appsec/contrib/rack/ext.rb +1 -1
  16. data/lib/datadog/appsec/contrib/rack/request_middleware.rb +9 -40
  17. data/lib/datadog/appsec/default_header_tags.rb +48 -0
  18. data/lib/datadog/core/configuration/components.rb +8 -1
  19. data/lib/datadog/core/configuration/settings.rb +16 -7
  20. data/lib/datadog/core/configuration/supported_configurations.rb +10 -0
  21. data/lib/datadog/core/environment/ext.rb +4 -0
  22. data/lib/datadog/core/environment/identity.rb +15 -1
  23. data/lib/datadog/core/environment/process.rb +50 -27
  24. data/lib/datadog/core/remote/client/capabilities.rb +11 -2
  25. data/lib/datadog/core/remote/transport/http/config.rb +5 -5
  26. data/lib/datadog/core/telemetry/request.rb +0 -2
  27. data/lib/datadog/core/transport/response.rb +1 -1
  28. data/lib/datadog/core/utils/{base64.rb → base64_codec.rb} +3 -2
  29. data/lib/datadog/core/utils/{array.rb → enumerable_compat.rb} +2 -2
  30. data/lib/datadog/core/utils/hash.rb +0 -23
  31. data/lib/datadog/core/utils/spawn_monkey_patch.rb +46 -16
  32. data/lib/datadog/data_streams/pathway_context.rb +3 -3
  33. data/lib/datadog/di/code_tracker.rb +43 -22
  34. data/lib/datadog/di/contrib/active_record.rb +6 -2
  35. data/lib/datadog/di/instrumenter.rb +24 -4
  36. data/lib/datadog/di/probe_notification_builder.rb +1 -1
  37. data/lib/datadog/di/remote.rb +4 -4
  38. data/lib/datadog/di/serializer.rb +5 -5
  39. data/lib/datadog/di/utils.rb +42 -14
  40. data/lib/datadog/opentelemetry/configuration/settings.rb +65 -0
  41. data/lib/datadog/opentelemetry/ext.rb +9 -0
  42. data/lib/datadog/opentelemetry/logs.rb +98 -0
  43. data/lib/datadog/opentelemetry/metrics.rb +10 -46
  44. data/lib/datadog/opentelemetry/sdk/configurator.rb +40 -0
  45. data/lib/datadog/opentelemetry/sdk/logs_exporter.rb +37 -0
  46. data/lib/datadog/opentelemetry/signal_configuration.rb +53 -0
  47. data/lib/datadog/opentelemetry.rb +1 -0
  48. data/lib/datadog/profiling/collectors/thread_context.rb +0 -4
  49. data/lib/datadog/profiling/component.rb +3 -11
  50. data/lib/datadog/profiling/ext/dir_monkey_patches.rb +3 -2
  51. data/lib/datadog/profiling/stack_recorder.rb +0 -4
  52. data/lib/datadog/symbol_database/component.rb +409 -0
  53. data/lib/datadog/symbol_database/configuration.rb +2 -2
  54. data/lib/datadog/symbol_database/extractor.rb +32 -4
  55. data/lib/datadog/symbol_database/remote.rb +175 -0
  56. data/lib/datadog/symbol_database/scope_batcher.rb +8 -0
  57. data/lib/datadog/symbol_database/service_version.rb +11 -2
  58. data/lib/datadog/symbol_database/symbol.rb +6 -3
  59. data/lib/datadog/symbol_database/uploader.rb +62 -8
  60. data/lib/datadog/tracing/contrib/action_cable/events/broadcast.rb +4 -1
  61. data/lib/datadog/tracing/contrib/action_cable/events/perform_action.rb +4 -1
  62. data/lib/datadog/tracing/contrib/action_cable/events/transmit.rb +4 -1
  63. data/lib/datadog/tracing/contrib/action_cable/instrumentation.rb +4 -1
  64. data/lib/datadog/tracing/contrib/action_mailer/event.rb +4 -1
  65. data/lib/datadog/tracing/contrib/action_pack/action_controller/instrumentation.rb +1 -0
  66. data/lib/datadog/tracing/contrib/action_pack/action_dispatch/instrumentation.rb +8 -0
  67. data/lib/datadog/tracing/contrib/action_view/events/render_partial.rb +4 -1
  68. data/lib/datadog/tracing/contrib/action_view/events/render_template.rb +4 -1
  69. data/lib/datadog/tracing/contrib/active_job/events/discard.rb +4 -1
  70. data/lib/datadog/tracing/contrib/active_job/events/enqueue.rb +4 -1
  71. data/lib/datadog/tracing/contrib/active_job/events/enqueue_at.rb +4 -1
  72. data/lib/datadog/tracing/contrib/active_job/events/enqueue_retry.rb +4 -1
  73. data/lib/datadog/tracing/contrib/active_job/events/perform.rb +4 -1
  74. data/lib/datadog/tracing/contrib/active_job/events/retry_stopped.rb +4 -1
  75. data/lib/datadog/tracing/contrib/active_record/events/sql.rb +1 -4
  76. data/lib/datadog/tracing/contrib/active_support/cache/events/cache.rb +1 -4
  77. data/lib/datadog/tracing/contrib/active_support/cache/instrumentation.rb +1 -4
  78. data/lib/datadog/tracing/contrib/aws/instrumentation.rb +1 -5
  79. data/lib/datadog/tracing/contrib/dalli/instrumentation.rb +1 -5
  80. data/lib/datadog/tracing/contrib/delayed_job/plugin.rb +2 -0
  81. data/lib/datadog/tracing/contrib/delayed_job/server_internal_tracer/worker.rb +1 -0
  82. data/lib/datadog/tracing/contrib/elasticsearch/patcher.rb +1 -5
  83. data/lib/datadog/tracing/contrib/elasticsearch/quantize.rb +2 -2
  84. data/lib/datadog/tracing/contrib/ethon/easy_patch.rb +1 -5
  85. data/lib/datadog/tracing/contrib/ethon/multi_patch.rb +1 -8
  86. data/lib/datadog/tracing/contrib/excon/middleware.rb +1 -5
  87. data/lib/datadog/tracing/contrib/ext.rb +3 -1
  88. data/lib/datadog/tracing/contrib/faraday/middleware.rb +1 -5
  89. data/lib/datadog/tracing/contrib/grape/endpoint.rb +3 -0
  90. data/lib/datadog/tracing/contrib/graphql/unified_trace.rb +1 -0
  91. data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/client.rb +1 -5
  92. data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/server.rb +1 -5
  93. data/lib/datadog/tracing/contrib/hanami/action_tracer.rb +1 -0
  94. data/lib/datadog/tracing/contrib/hanami/renderer_policy_tracing.rb +1 -0
  95. data/lib/datadog/tracing/contrib/hanami/router_tracing.rb +1 -0
  96. data/lib/datadog/tracing/contrib/http/instrumentation.rb +1 -5
  97. data/lib/datadog/tracing/contrib/httpclient/instrumentation.rb +1 -5
  98. data/lib/datadog/tracing/contrib/httprb/instrumentation.rb +1 -5
  99. data/lib/datadog/tracing/contrib/kafka/event.rb +1 -0
  100. data/lib/datadog/tracing/contrib/mongodb/parsers.rb +5 -5
  101. data/lib/datadog/tracing/contrib/mongodb/subscribers.rb +2 -5
  102. data/lib/datadog/tracing/contrib/mysql2/instrumentation.rb +1 -5
  103. data/lib/datadog/tracing/contrib/opensearch/patcher.rb +1 -5
  104. data/lib/datadog/tracing/contrib/opensearch/quantize.rb +2 -2
  105. data/lib/datadog/tracing/contrib/pg/instrumentation.rb +1 -5
  106. data/lib/datadog/tracing/contrib/presto/instrumentation.rb +3 -5
  107. data/lib/datadog/tracing/contrib/propagation/sql_comment/ext.rb +3 -0
  108. data/lib/datadog/tracing/contrib/propagation/sql_comment/mode.rb +2 -2
  109. data/lib/datadog/tracing/contrib/que/tracer.rb +1 -0
  110. data/lib/datadog/tracing/contrib/racecar/event.rb +1 -5
  111. data/lib/datadog/tracing/contrib/rack/header_tagging.rb +23 -0
  112. data/lib/datadog/tracing/contrib/rack/middlewares.rb +1 -0
  113. data/lib/datadog/tracing/contrib/rack/trace_proxy_middleware.rb +2 -0
  114. data/lib/datadog/tracing/contrib/rails/runner.rb +2 -0
  115. data/lib/datadog/tracing/contrib/rake/instrumentation.rb +4 -2
  116. data/lib/datadog/tracing/contrib/redis/tags.rb +0 -5
  117. data/lib/datadog/tracing/contrib/redis/trace_middleware.rb +2 -0
  118. data/lib/datadog/tracing/contrib/resque/resque_job.rb +1 -0
  119. data/lib/datadog/tracing/contrib/rest_client/request_patch.rb +1 -5
  120. data/lib/datadog/tracing/contrib/roda/ext.rb +1 -0
  121. data/lib/datadog/tracing/contrib/roda/instrumentation.rb +4 -1
  122. data/lib/datadog/tracing/contrib/sequel/database.rb +1 -0
  123. data/lib/datadog/tracing/contrib/sequel/dataset.rb +1 -0
  124. data/lib/datadog/tracing/contrib/sequel/utils.rb +0 -5
  125. data/lib/datadog/tracing/contrib/shoryuken/tracer.rb +1 -0
  126. data/lib/datadog/tracing/contrib/sidekiq/client_tracer.rb +1 -0
  127. data/lib/datadog/tracing/contrib/sidekiq/server_internal_tracer/heartbeat.rb +2 -0
  128. data/lib/datadog/tracing/contrib/sidekiq/server_internal_tracer/job_fetch.rb +1 -0
  129. data/lib/datadog/tracing/contrib/sidekiq/server_internal_tracer/redis_info.rb +1 -0
  130. data/lib/datadog/tracing/contrib/sidekiq/server_internal_tracer/scheduled_poller.rb +2 -0
  131. data/lib/datadog/tracing/contrib/sidekiq/server_internal_tracer/stop.rb +1 -0
  132. data/lib/datadog/tracing/contrib/sidekiq/server_tracer.rb +3 -2
  133. data/lib/datadog/tracing/contrib/sinatra/tracer.rb +1 -0
  134. data/lib/datadog/tracing/contrib/sinatra/tracer_middleware.rb +1 -0
  135. data/lib/datadog/tracing/contrib/sneakers/tracer.rb +1 -0
  136. data/lib/datadog/tracing/contrib/sucker_punch/instrumentation.rb +1 -0
  137. data/lib/datadog/tracing/contrib/trilogy/instrumentation.rb +1 -5
  138. data/lib/datadog/tracing/contrib/utils/quantization/{hash.rb → hash_formatter.rb} +1 -1
  139. data/lib/datadog/tracing/distributed/datadog_tags_codec.rb +0 -13
  140. data/lib/datadog/tracing/distributed/trace_context.rb +0 -28
  141. data/lib/datadog/tracing/metadata/ext.rb +10 -0
  142. data/lib/datadog/tracing/span_operation.rb +13 -0
  143. data/lib/datadog/tracing/trace_operation.rb +22 -0
  144. data/lib/datadog/tracing/tracer.rb +9 -0
  145. data/lib/datadog/tracing/transport/traces.rb +2 -2
  146. data/lib/datadog/version.rb +1 -1
  147. metadata +16 -10
@@ -119,6 +119,7 @@ module Datadog
119
119
  def annotate!(span, datum)
120
120
  span.resource = datum[:method].to_s.upcase
121
121
  span.service = service_name(datum[:host], @options)
122
+ span.set_tag(Tracing::Metadata::Ext::TAG_SVC_SRC, Ext::TAG_COMPONENT)
122
123
  span.type = Tracing::Metadata::Ext::HTTP::TYPE_OUTBOUND
123
124
 
124
125
  if @options[:peer_service]
@@ -128,11 +129,6 @@ module Datadog
128
129
  )
129
130
  end
130
131
 
131
- # Tag original global service name if not used
132
- if span.service != Datadog.configuration.service
133
- span.set_tag(Tracing::Contrib::Ext::Metadata::TAG_BASE_SERVICE, Datadog.configuration.service)
134
- end
135
-
136
132
  span.set_tag(Tracing::Metadata::Ext::TAG_KIND, Tracing::Metadata::Ext::SpanKind::TAG_CLIENT)
137
133
 
138
134
  span.set_tag(Tracing::Metadata::Ext::TAG_COMPONENT, Ext::TAG_COMPONENT)
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require_relative '../metadata/ext'
4
+
3
5
  module Datadog
4
6
  module Tracing
5
7
  module Contrib
@@ -62,7 +64,7 @@ module Datadog
62
64
  TAG_PEER_SERVICE_REMAP = '_dd.peer.service.remapped_from'
63
65
 
64
66
  # Set equal to the global service when contrib span.service is overriden
65
- TAG_BASE_SERVICE = '_dd.base_service'
67
+ TAG_BASE_SERVICE = Tracing::Metadata::Ext::TAG_BASE_SERVICE
66
68
  end
67
69
  end
68
70
  end
@@ -47,6 +47,7 @@ module Datadog
47
47
  def annotate!(span, env, options)
48
48
  span.resource = resource_name(env)
49
49
  span.service = service_name(env[:url].host, options)
50
+ span.set_tag(Tracing::Metadata::Ext::TAG_SVC_SRC, Ext::TAG_COMPONENT)
50
51
  span.type = Tracing::Metadata::Ext::HTTP::TYPE_OUTBOUND
51
52
 
52
53
  if options[:peer_service]
@@ -56,11 +57,6 @@ module Datadog
56
57
  )
57
58
  end
58
59
 
59
- # Tag original global service name if not used
60
- if span.service != Datadog.configuration.service
61
- span.set_tag(Tracing::Contrib::Ext::Metadata::TAG_BASE_SERVICE, Datadog.configuration.service)
62
- end
63
-
64
60
  span.set_tag(Tracing::Metadata::Ext::TAG_KIND, Tracing::Metadata::Ext::SpanKind::TAG_CLIENT)
65
61
 
66
62
  span.set_tag(Tracing::Metadata::Ext::TAG_COMPONENT, Ext::TAG_COMPONENT)
@@ -62,6 +62,7 @@ module Datadog
62
62
 
63
63
  span.set_tag(Tracing::Metadata::Ext::TAG_COMPONENT, Ext::TAG_COMPONENT)
64
64
  span.set_tag(Tracing::Metadata::Ext::TAG_OPERATION, Ext::TAG_OPERATION_ENDPOINT_RUN)
65
+ span.set_tag(Tracing::Metadata::Ext::TAG_SVC_SRC, Ext::TAG_COMPONENT)
65
66
 
66
67
  if (grape_route = env['grape.routing_args']) && grape_route[:route_info]
67
68
  trace.set_tag(
@@ -162,6 +163,7 @@ module Datadog
162
163
 
163
164
  span.set_tag(Tracing::Metadata::Ext::TAG_COMPONENT, Ext::TAG_COMPONENT)
164
165
  span.set_tag(Tracing::Metadata::Ext::TAG_OPERATION, Ext::TAG_OPERATION_ENDPOINT_RENDER)
166
+ span.set_tag(Tracing::Metadata::Ext::TAG_SVC_SRC, Ext::TAG_COMPONENT)
165
167
 
166
168
  Thread.current[KEY_RENDER] = true
167
169
  rescue => e
@@ -213,6 +215,7 @@ module Datadog
213
215
  begin
214
216
  span.set_tag(Tracing::Metadata::Ext::TAG_COMPONENT, Ext::TAG_COMPONENT)
215
217
  span.set_tag(Tracing::Metadata::Ext::TAG_OPERATION, Ext::TAG_OPERATION_ENDPOINT_RUN_FILTERS)
218
+ span.set_tag(Tracing::Metadata::Ext::TAG_SVC_SRC, Ext::TAG_COMPONENT)
216
219
 
217
220
  # Set analytics sample rate
218
221
  Contrib::Analytics.set_sample_rate(span, analytics_sample_rate) if analytics_enabled?
@@ -214,6 +214,7 @@ module Datadog
214
214
  resource: resource,
215
215
  service: @service_name
216
216
  ) do |span|
217
+ span.set_tag(Tracing::Metadata::Ext::TAG_SVC_SRC, Ext::TAG_COMPONENT)
217
218
  if Contrib::Analytics.enabled?(@analytics_enabled)
218
219
  Contrib::Analytics.set_sample_rate(span, @analytics_sample_rate)
219
220
  end
@@ -29,6 +29,7 @@ module Datadog
29
29
  }
30
30
 
31
31
  Tracing.trace(Ext::SPAN_CLIENT, **options) do |span, trace|
32
+ span.set_tag(Tracing::Metadata::Ext::TAG_SVC_SRC, Ext::TAG_COMPONENT)
32
33
  annotate!(trace, span, keywords, formatter)
33
34
 
34
35
  begin
@@ -59,11 +60,6 @@ module Datadog
59
60
  )
60
61
  end
61
62
 
62
- # Tag original global service name if not used
63
- if span.service != Datadog.configuration.service
64
- span.set_tag(Tracing::Contrib::Ext::Metadata::TAG_BASE_SERVICE, Datadog.configuration.service)
65
- end
66
-
67
63
  span.set_tag(Tracing::Metadata::Ext::TAG_KIND, Tracing::Metadata::Ext::SpanKind::TAG_CLIENT)
68
64
  span.set_tag(Tracing::Metadata::Ext::TAG_COMPONENT, Ext::TAG_COMPONENT)
69
65
  span.set_tag(Tracing::Metadata::Ext::TAG_OPERATION, Ext::TAG_OPERATION_CLIENT)
@@ -33,6 +33,7 @@ module Datadog
33
33
  set_distributed_context!(metadata)
34
34
 
35
35
  Tracing.trace(Ext::SPAN_SERVICE, **options) do |span|
36
+ span.set_tag(Tracing::Metadata::Ext::TAG_SVC_SRC, Ext::TAG_COMPONENT)
36
37
  annotate!(span, metadata, formatter)
37
38
 
38
39
  begin
@@ -66,11 +67,6 @@ module Datadog
66
67
  span.set_tag(header, value)
67
68
  end
68
69
 
69
- # Tag original global service name if not used
70
- if span.service != Datadog.configuration.service
71
- span.set_tag(Tracing::Contrib::Ext::Metadata::TAG_BASE_SERVICE, Datadog.configuration.service)
72
- end
73
-
74
70
  span.set_tag(Tracing::Metadata::Ext::TAG_KIND, Tracing::Metadata::Ext::SpanKind::TAG_SERVER)
75
71
  span.set_tag(Tracing::Metadata::Ext::TAG_COMPONENT, Ext::TAG_COMPONENT)
76
72
  span.set_tag(Tracing::Metadata::Ext::TAG_OPERATION, Ext::TAG_OPERATION_SERVICE)
@@ -22,6 +22,7 @@ module Datadog
22
22
  service: configuration[:service_name],
23
23
  type: Tracing::Metadata::Ext::HTTP::TYPE_INBOUND
24
24
  ) do |span_op, trace_op|
25
+ span_op.set_tag(Tracing::Metadata::Ext::TAG_SVC_SRC, Ext::TAG_COMPONENT)
25
26
  span_op.set_tag(Tracing::Metadata::Ext::TAG_COMPONENT, Ext::TAG_COMPONENT)
26
27
  span_op.set_tag(Tracing::Metadata::Ext::TAG_OPERATION, Ext::TAG_OPERATION_ACTION)
27
28
 
@@ -24,6 +24,7 @@ module Datadog
24
24
  resource: action_klass.to_s,
25
25
  type: Tracing::Metadata::Ext::HTTP::TYPE_INBOUND
26
26
  ) do |span_op, _trace_op|
27
+ span_op.set_tag(Tracing::Metadata::Ext::TAG_SVC_SRC, Ext::TAG_COMPONENT)
27
28
  span_op.set_tag(Tracing::Metadata::Ext::TAG_COMPONENT, Ext::TAG_COMPONENT)
28
29
  span_op.set_tag(Tracing::Metadata::Ext::TAG_OPERATION, Ext::TAG_OPERATION_RENDER)
29
30
 
@@ -17,6 +17,7 @@ module Datadog
17
17
  service: configuration[:service_name],
18
18
  type: Tracing::Metadata::Ext::HTTP::TYPE_INBOUND
19
19
  ) do |span_op, trace_op|
20
+ span_op.set_tag(Tracing::Metadata::Ext::TAG_SVC_SRC, Ext::TAG_COMPONENT)
20
21
  span_op.set_tag(Tracing::Metadata::Ext::TAG_COMPONENT, Ext::TAG_COMPONENT)
21
22
  span_op.set_tag(Tracing::Metadata::Ext::TAG_OPERATION, Ext::TAG_OPERATION_ROUTING)
22
23
 
@@ -32,6 +32,7 @@ module Datadog
32
32
 
33
33
  Tracing.trace(Ext::SPAN_REQUEST) do |span, trace|
34
34
  span.service = service_name(host, request_options, client_config)
35
+ span.set_tag(Tracing::Metadata::Ext::TAG_SVC_SRC, Ext::TAG_COMPONENT)
35
36
  span.type = Tracing::Metadata::Ext::HTTP::TYPE_OUTBOUND
36
37
  span.resource = req.method
37
38
 
@@ -63,11 +64,6 @@ module Datadog
63
64
  )
64
65
  end
65
66
 
66
- # Tag original global service name if not used
67
- if span.service != Datadog.configuration.service
68
- span.set_tag(Tracing::Contrib::Ext::Metadata::TAG_BASE_SERVICE, Datadog.configuration.service)
69
- end
70
-
71
67
  span.set_tag(Tracing::Metadata::Ext::TAG_KIND, Tracing::Metadata::Ext::SpanKind::TAG_CLIENT)
72
68
 
73
69
  span.set_tag(Tracing::Metadata::Ext::TAG_COMPONENT, Ext::TAG_COMPONENT)
@@ -28,6 +28,7 @@ module Datadog
28
28
  Tracing.trace(Ext::SPAN_REQUEST) do |span, trace|
29
29
  begin
30
30
  span.service = service_name(host, request_options, client_config)
31
+ span.set_tag(Tracing::Metadata::Ext::TAG_SVC_SRC, Ext::TAG_COMPONENT)
31
32
  span.type = Tracing::Metadata::Ext::HTTP::TYPE_OUTBOUND
32
33
 
33
34
  if Tracing::Distributed::PropagationPolicy.enabled?(
@@ -68,11 +69,6 @@ module Datadog
68
69
  )
69
70
  end
70
71
 
71
- # Tag original global service name if not used
72
- if span.service != Datadog.configuration.service
73
- span.set_tag(Tracing::Contrib::Ext::Metadata::TAG_BASE_SERVICE, Datadog.configuration.service)
74
- end
75
-
76
72
  span.set_tag(Tracing::Metadata::Ext::TAG_COMPONENT, Ext::TAG_COMPONENT)
77
73
  span.set_tag(Tracing::Metadata::Ext::TAG_OPERATION, Ext::TAG_OPERATION_REQUEST)
78
74
 
@@ -28,6 +28,7 @@ module Datadog
28
28
  Tracing.trace(Ext::SPAN_REQUEST) do |span, trace|
29
29
  begin
30
30
  span.service = service_name(host, request_options, client_config)
31
+ span.set_tag(Tracing::Metadata::Ext::TAG_SVC_SRC, Ext::TAG_COMPONENT)
31
32
  span.type = Tracing::Metadata::Ext::HTTP::TYPE_OUTBOUND
32
33
 
33
34
  if Tracing::Distributed::PropagationPolicy.enabled?(
@@ -66,11 +67,6 @@ module Datadog
66
67
  )
67
68
  end
68
69
 
69
- # Tag original global service name if not used
70
- if span.service != Datadog.configuration.service
71
- span.set_tag(Tracing::Contrib::Ext::Metadata::TAG_BASE_SERVICE, Datadog.configuration.service)
72
- end
73
-
74
70
  span.set_tag(Tracing::Metadata::Ext::TAG_COMPONENT, Ext::TAG_COMPONENT)
75
71
  span.set_tag(Tracing::Metadata::Ext::TAG_OPERATION, Ext::TAG_OPERATION_REQUEST)
76
72
 
@@ -30,6 +30,7 @@ module Datadog
30
30
  end
31
31
 
32
32
  def on_start(span, _event, _id, payload)
33
+ span.set_tag(Tracing::Metadata::Ext::TAG_SVC_SRC, Ext::TAG_COMPONENT)
33
34
  span.set_tag(Tracing::Metadata::Ext::TAG_COMPONENT, Ext::TAG_COMPONENT)
34
35
  span.set_tag(Contrib::Ext::Messaging::TAG_SYSTEM, Ext::TAG_MESSAGING_SYSTEM)
35
36
 
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative '../utils/quantization/hash'
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::Hash.merge_options(quantization_options, exclude: [command_name.to_s])
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::Hash.format(
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::Hash.format(command, options))
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::Hash.merge_options(DEFAULT_OPTIONS, configuration[:quantize])
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)
@@ -41,11 +43,6 @@ module Datadog
41
43
  )
42
44
  end
43
45
 
44
- # Tag original global service name if not used
45
- if span.service != Datadog.configuration.service
46
- span.set_tag(Tracing::Contrib::Ext::Metadata::TAG_BASE_SERVICE, Datadog.configuration.service)
47
- end
48
-
49
46
  span.set_tag(Contrib::Ext::DB::TAG_SYSTEM, Ext::TAG_SYSTEM)
50
47
 
51
48
  span.set_tag(Tracing::Metadata::Ext::TAG_KIND, Tracing::Metadata::Ext::SpanKind::TAG_CLIENT)
@@ -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,11 +35,6 @@ module Datadog
34
35
  )
35
36
  end
36
37
 
37
- # Tag original global service name if not used
38
- if span.service != Datadog.configuration.service
39
- span.set_tag(Tracing::Contrib::Ext::Metadata::TAG_BASE_SERVICE, Datadog.configuration.service)
40
- end
41
-
42
38
  span.set_tag(Contrib::Ext::DB::TAG_SYSTEM, Ext::TAG_SYSTEM)
43
39
  span.set_tag(Tracing::Metadata::Ext::TAG_KIND, Tracing::Metadata::Ext::SpanKind::TAG_CLIENT)
44
40
 
@@ -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)
@@ -62,11 +63,6 @@ module Datadog
62
63
  )
63
64
  end
64
65
 
65
- # Tag original global service name if not used
66
- if span.service != Datadog.configuration.service
67
- span.set_tag(Tracing::Contrib::Ext::Metadata::TAG_BASE_SERVICE, Datadog.configuration.service)
68
- end
69
-
70
66
  # Set url tags
71
67
  span.set_tag(OpenSearch::Ext::TAG_URL, url)
72
68
  span.set_tag(OpenSearch::Ext::TAG_HOST, host)
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative '../utils/quantization/hash'
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::Hash.format(obj, options)
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?
@@ -160,11 +161,6 @@ module Datadog
160
161
  )
161
162
  end
162
163
 
163
- # Tag original global service name if not used
164
- if span.service != Datadog.configuration.service
165
- span.set_tag(Tracing::Contrib::Ext::Metadata::TAG_BASE_SERVICE, Datadog.configuration.service)
166
- end
167
-
168
164
  span.set_tag(Tracing::Metadata::Ext::TAG_COMPONENT, Ext::TAG_COMPONENT)
169
165
  span.set_tag(Tracing::Metadata::Ext::TAG_OPERATION, Ext::TAG_OPERATION_QUERY)
170
166
  span.set_tag(Tracing::Metadata::Ext::TAG_KIND, Tracing::Metadata::Ext::SpanKind::TAG_CLIENT)
@@ -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
@@ -92,11 +95,6 @@ module Datadog
92
95
  )
93
96
  end
94
97
 
95
- # Tag original global service name if not used
96
- if span.service != Datadog.configuration.service
97
- span.set_tag(Tracing::Contrib::Ext::Metadata::TAG_BASE_SERVICE, Datadog.configuration.service)
98
- end
99
-
100
98
  if (host_port = @options[:server])
101
99
  host, port = Core::Utils.extract_host_port(host_port)
102
100
  if host && port
@@ -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)
@@ -48,11 +49,6 @@ module Datadog
48
49
  # Measure service stats
49
50
  Contrib::Analytics.set_measured(span)
50
51
 
51
- # Tag original global service name if not used
52
- if span.service != Datadog.configuration.service
53
- span.set_tag(Tracing::Contrib::Ext::Metadata::TAG_BASE_SERVICE, Datadog.configuration.service)
54
- end
55
-
56
52
  span.set_tag(Ext::TAG_TOPIC, payload[:topic])
57
53
  span.set_tag(Ext::TAG_CONSUMER, payload[:consumer_class])
58
54
  span.set_tag(Ext::TAG_PARTITION, payload[:partition])
@@ -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/hash'
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::Hash.format(args, quantize_options)
85
+ Contrib::Utils::Quantization::HashFormatter.format(args, quantize_options)
84
86
  end
85
87
 
86
88
  def enabled?
@@ -21,11 +21,6 @@ module Datadog
21
21
  )
22
22
  end
23
23
 
24
- # Tag original global service name if not used
25
- if span.service != Datadog.configuration.service
26
- span.set_tag(Tracing::Contrib::Ext::Metadata::TAG_BASE_SERVICE, Datadog.configuration.service)
27
- end
28
-
29
24
  span.set_tag(Tracing::Metadata::Ext::TAG_COMPONENT, Ext::TAG_COMPONENT)
30
25
  span.set_tag(Tracing::Metadata::Ext::TAG_OPERATION, Ext::TAG_OPERATION_COMMAND)
31
26
 
@@ -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
 
@@ -37,6 +37,7 @@ module Datadog
37
37
  end
38
38
 
39
39
  def datadog_tag_request(uri, span)
40
+ span.set_tag(Tracing::Metadata::Ext::TAG_SVC_SRC, Ext::TAG_COMPONENT)
40
41
  span.resource = method.to_s.upcase
41
42
 
42
43
  if datadog_configuration[:peer_service]
@@ -46,11 +47,6 @@ module Datadog
46
47
  )
47
48
  end
48
49
 
49
- # Tag original global service name if not used
50
- if span.service != Datadog.configuration.service
51
- span.set_tag(Tracing::Contrib::Ext::Metadata::TAG_BASE_SERVICE, Datadog.configuration.service)
52
- end
53
-
54
50
  span.set_tag(Tracing::Metadata::Ext::TAG_KIND, Tracing::Metadata::Ext::SpanKind::TAG_CLIENT)
55
51
 
56
52
  span.set_tag(Tracing::Metadata::Ext::TAG_COMPONENT, Ext::TAG_COMPONENT)