datadog 2.28.0 → 2.30.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 +87 -1
- data/ext/datadog_profiling_native_extension/collectors_cpu_and_wall_time_worker.c +82 -12
- data/ext/datadog_profiling_native_extension/collectors_thread_context.c +32 -11
- data/ext/datadog_profiling_native_extension/collectors_thread_context.h +3 -1
- data/ext/datadog_profiling_native_extension/extconf.rb +9 -24
- data/ext/datadog_profiling_native_extension/heap_recorder.c +186 -55
- data/ext/datadog_profiling_native_extension/heap_recorder.h +12 -1
- data/ext/datadog_profiling_native_extension/http_transport.c +51 -64
- data/ext/datadog_profiling_native_extension/native_extension_helpers.rb +0 -13
- data/ext/datadog_profiling_native_extension/profiling.c +3 -1
- data/ext/datadog_profiling_native_extension/setup_signal_handler.c +24 -8
- data/ext/datadog_profiling_native_extension/setup_signal_handler.h +1 -3
- data/ext/datadog_profiling_native_extension/stack_recorder.c +63 -48
- data/ext/datadog_profiling_native_extension/stack_recorder.h +2 -1
- data/ext/libdatadog_api/crashtracker.c +5 -0
- data/ext/libdatadog_api/crashtracker_report_exception.c +126 -0
- data/ext/libdatadog_api/extconf.rb +4 -21
- data/ext/libdatadog_extconf_helpers.rb +49 -11
- data/lib/datadog/ai_guard/configuration/settings.rb +3 -0
- data/lib/datadog/appsec/assets/blocked.html +2 -1
- data/lib/datadog/appsec/configuration/settings.rb +14 -0
- data/lib/datadog/appsec/context.rb +44 -9
- data/lib/datadog/appsec/contrib/active_record/patcher.rb +3 -0
- data/lib/datadog/appsec/contrib/devise/integration.rb +1 -1
- data/lib/datadog/appsec/contrib/excon/patcher.rb +2 -0
- data/lib/datadog/appsec/contrib/excon/ssrf_detection_middleware.rb +55 -6
- data/lib/datadog/appsec/contrib/faraday/integration.rb +1 -1
- data/lib/datadog/appsec/contrib/faraday/patcher.rb +1 -1
- data/lib/datadog/appsec/contrib/faraday/ssrf_detection_middleware.rb +60 -7
- data/lib/datadog/appsec/contrib/graphql/gateway/multiplex.rb +11 -6
- data/lib/datadog/appsec/contrib/graphql/gateway/watcher.rb +1 -1
- data/lib/datadog/appsec/contrib/graphql/integration.rb +1 -1
- data/lib/datadog/appsec/contrib/rack/gateway/request.rb +6 -10
- data/lib/datadog/appsec/contrib/rack/gateway/watcher.rb +4 -4
- data/lib/datadog/appsec/contrib/rack/integration.rb +1 -1
- data/lib/datadog/appsec/contrib/rack/request_middleware.rb +26 -5
- data/lib/datadog/appsec/contrib/rack/response_body.rb +36 -0
- data/lib/datadog/appsec/contrib/rails/gateway/watcher.rb +2 -2
- data/lib/datadog/appsec/contrib/rails/integration.rb +1 -1
- data/lib/datadog/appsec/contrib/rails/patches/process_action_patch.rb +2 -0
- data/lib/datadog/appsec/contrib/rest_client/patcher.rb +2 -0
- data/lib/datadog/appsec/contrib/rest_client/request_ssrf_detection_patch.rb +72 -7
- data/lib/datadog/appsec/contrib/sinatra/gateway/watcher.rb +5 -3
- data/lib/datadog/appsec/counter_sampler.rb +25 -0
- data/lib/datadog/appsec/event.rb +1 -17
- data/lib/datadog/appsec/instrumentation/gateway/middleware.rb +2 -3
- data/lib/datadog/appsec/instrumentation/gateway.rb +2 -2
- data/lib/datadog/appsec/metrics/telemetry_exporter.rb +18 -0
- data/lib/datadog/appsec/monitor/gateway/watcher.rb +2 -2
- data/lib/datadog/appsec/security_engine/engine.rb +23 -2
- data/lib/datadog/appsec/utils/http/body.rb +38 -0
- data/lib/datadog/appsec/utils/http/media_range.rb +2 -1
- data/lib/datadog/appsec/utils/http/media_type.rb +28 -35
- data/lib/datadog/appsec/utils/http/url_encoded.rb +52 -0
- data/lib/datadog/core/configuration/components.rb +29 -4
- data/lib/datadog/core/configuration/option.rb +2 -1
- data/lib/datadog/core/configuration/options.rb +1 -1
- data/lib/datadog/core/configuration/settings.rb +27 -3
- data/lib/datadog/core/configuration/supported_configurations.rb +19 -0
- data/lib/datadog/core/configuration.rb +2 -2
- data/lib/datadog/core/crashtracking/component.rb +71 -19
- data/lib/datadog/core/environment/agent_info.rb +65 -1
- data/lib/datadog/core/logger.rb +1 -1
- data/lib/datadog/core/metrics/logging.rb +1 -1
- data/lib/datadog/core/process_discovery.rb +20 -19
- data/lib/datadog/core/rate_limiter.rb +2 -0
- data/lib/datadog/core/remote/component.rb +16 -5
- data/lib/datadog/core/remote/transport/config.rb +5 -11
- data/lib/datadog/core/runtime/metrics.rb +1 -2
- data/lib/datadog/core/telemetry/component.rb +0 -13
- data/lib/datadog/core/telemetry/transport/telemetry.rb +5 -6
- data/lib/datadog/core/transport/ext.rb +1 -0
- data/lib/datadog/core/transport/http/response.rb +4 -0
- data/lib/datadog/core/transport/parcel.rb +61 -9
- data/lib/datadog/core/utils/base64.rb +1 -1
- data/lib/datadog/core/utils/fnv.rb +26 -0
- data/lib/datadog/core/workers/interval_loop.rb +13 -6
- data/lib/datadog/core/workers/queue.rb +0 -4
- data/lib/datadog/core/workers/runtime_metrics.rb +9 -1
- data/lib/datadog/core.rb +6 -1
- data/lib/datadog/data_streams/processor.rb +35 -33
- data/lib/datadog/data_streams/transport/http/stats.rb +6 -0
- data/lib/datadog/data_streams/transport/http.rb +0 -4
- data/lib/datadog/data_streams/transport/stats.rb +5 -12
- data/lib/datadog/di/boot.rb +1 -0
- data/lib/datadog/di/component.rb +17 -5
- data/lib/datadog/di/configuration/settings.rb +9 -0
- data/lib/datadog/di/context.rb +6 -0
- data/lib/datadog/di/instrumenter.rb +183 -134
- data/lib/datadog/di/probe.rb +10 -1
- data/lib/datadog/di/probe_file_loader.rb +2 -2
- data/lib/datadog/di/probe_manager.rb +86 -64
- data/lib/datadog/di/probe_notification_builder.rb +46 -18
- data/lib/datadog/di/probe_notifier_worker.rb +65 -9
- data/lib/datadog/di/probe_repository.rb +198 -0
- data/lib/datadog/di/proc_responder.rb +4 -0
- data/lib/datadog/di/remote.rb +6 -7
- data/lib/datadog/di/serializer.rb +127 -9
- data/lib/datadog/di/transport/diagnostics.rb +5 -7
- data/lib/datadog/di/transport/http/diagnostics.rb +3 -1
- data/lib/datadog/di/transport/http/input.rb +1 -1
- data/lib/datadog/di/transport/http.rb +12 -3
- data/lib/datadog/di/transport/input.rb +51 -14
- data/lib/datadog/kit/tracing/method_tracer.rb +132 -0
- data/lib/datadog/open_feature/configuration.rb +2 -0
- data/lib/datadog/open_feature/transport.rb +8 -11
- data/lib/datadog/profiling/collectors/cpu_and_wall_time_worker.rb +13 -0
- data/lib/datadog/profiling/component.rb +20 -6
- data/lib/datadog/profiling/http_transport.rb +5 -6
- data/lib/datadog/profiling/profiler.rb +15 -8
- data/lib/datadog/tracing/contrib/dalli/integration.rb +4 -1
- data/lib/datadog/tracing/contrib/ethon/configuration/settings.rb +5 -1
- data/lib/datadog/tracing/contrib/ethon/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/excon/configuration/settings.rb +5 -2
- data/lib/datadog/tracing/contrib/excon/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/faraday/configuration/settings.rb +5 -2
- data/lib/datadog/tracing/contrib/faraday/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/grape/endpoint.rb +2 -2
- data/lib/datadog/tracing/contrib/grape/instrumentation.rb +13 -8
- data/lib/datadog/tracing/contrib/grape/patcher.rb +6 -1
- data/lib/datadog/tracing/contrib/grpc/configuration/settings.rb +5 -2
- data/lib/datadog/tracing/contrib/grpc/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/http/configuration/settings.rb +5 -2
- data/lib/datadog/tracing/contrib/http/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/http/integration.rb +0 -2
- data/lib/datadog/tracing/contrib/httpclient/configuration/settings.rb +5 -2
- data/lib/datadog/tracing/contrib/httpclient/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/httprb/configuration/settings.rb +5 -2
- data/lib/datadog/tracing/contrib/httprb/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/karafka/configuration/settings.rb +5 -1
- data/lib/datadog/tracing/contrib/karafka/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/mysql2/configuration/settings.rb +6 -0
- data/lib/datadog/tracing/contrib/mysql2/instrumentation.rb +2 -1
- data/lib/datadog/tracing/contrib/pg/configuration/settings.rb +6 -0
- data/lib/datadog/tracing/contrib/pg/instrumentation.rb +2 -1
- data/lib/datadog/tracing/contrib/propagation/sql_comment/ext.rb +10 -0
- data/lib/datadog/tracing/contrib/propagation/sql_comment/mode.rb +5 -1
- data/lib/datadog/tracing/contrib/propagation/sql_comment.rb +24 -0
- data/lib/datadog/tracing/contrib/que/configuration/settings.rb +5 -2
- data/lib/datadog/tracing/contrib/que/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/rack/configuration/settings.rb +5 -1
- data/lib/datadog/tracing/contrib/rack/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/rack/route_inference.rb +18 -6
- data/lib/datadog/tracing/contrib/rails/configuration/settings.rb +5 -2
- data/lib/datadog/tracing/contrib/rails/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/registerable.rb +11 -0
- data/lib/datadog/tracing/contrib/rest_client/configuration/settings.rb +5 -2
- data/lib/datadog/tracing/contrib/rest_client/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/sidekiq/configuration/settings.rb +5 -1
- data/lib/datadog/tracing/contrib/sidekiq/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/sinatra/configuration/settings.rb +5 -1
- data/lib/datadog/tracing/contrib/sinatra/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/sneakers/integration.rb +15 -4
- data/lib/datadog/tracing/contrib/trilogy/configuration/settings.rb +6 -0
- data/lib/datadog/tracing/contrib/trilogy/instrumentation.rb +3 -1
- data/lib/datadog/tracing/contrib/waterdrop/configuration/settings.rb +5 -1
- data/lib/datadog/tracing/contrib/waterdrop/ext.rb +1 -0
- data/lib/datadog/tracing/metadata/ext.rb +4 -0
- data/lib/datadog/tracing/sync_writer.rb +0 -1
- data/lib/datadog/tracing/transport/io/client.rb +5 -8
- data/lib/datadog/tracing/transport/io/traces.rb +28 -34
- data/lib/datadog/tracing/transport/trace_formatter.rb +11 -0
- data/lib/datadog/tracing/transport/traces.rb +4 -10
- data/lib/datadog/tracing/writer.rb +0 -1
- data/lib/datadog/version.rb +1 -1
- metadata +14 -8
- data/lib/datadog/appsec/contrib/rails/ext.rb +0 -13
- data/lib/datadog/tracing/workers/trace_writer.rb +0 -204
|
@@ -45,6 +45,8 @@ module Datadog
|
|
|
45
45
|
|
|
46
46
|
overhead_target_percentage = valid_overhead_target(settings.profiling.advanced.overhead_target_percentage, logger)
|
|
47
47
|
upload_period_seconds = [60, settings.profiling.advanced.upload_period_seconds].max
|
|
48
|
+
cpu_sampling_interval_ms =
|
|
49
|
+
valid_cpu_sampling_interval(settings.profiling.advanced.experimental_cpu_sampling_interval_ms, logger)
|
|
48
50
|
|
|
49
51
|
recorder = Datadog::Profiling::StackRecorder.new(
|
|
50
52
|
cpu_time_enabled: RUBY_PLATFORM.include?("linux"), # Only supported on Linux currently
|
|
@@ -65,6 +67,7 @@ module Datadog
|
|
|
65
67
|
allocation_counting_enabled: settings.profiling.advanced.allocation_counting_enabled,
|
|
66
68
|
gvl_profiling_enabled: enable_gvl_profiling?(settings, logger),
|
|
67
69
|
sighandler_sampling_enabled: settings.profiling.advanced.sighandler_sampling_enabled,
|
|
70
|
+
cpu_sampling_interval_ms: cpu_sampling_interval_ms,
|
|
68
71
|
)
|
|
69
72
|
|
|
70
73
|
internal_metadata = {
|
|
@@ -123,6 +126,7 @@ module Datadog
|
|
|
123
126
|
site: settings.site,
|
|
124
127
|
api_key: settings.api_key,
|
|
125
128
|
upload_timeout_seconds: settings.profiling.upload.timeout_seconds,
|
|
129
|
+
use_system_dns: settings.profiling.advanced.experimental_use_system_dns,
|
|
126
130
|
)
|
|
127
131
|
end
|
|
128
132
|
|
|
@@ -219,12 +223,6 @@ module Datadog
|
|
|
219
223
|
"Please upgrade to Ruby >= 3.1 in order to use this feature. Heap profiling has been disabled."
|
|
220
224
|
)
|
|
221
225
|
return false
|
|
222
|
-
elsif RUBY_VERSION.start_with?("4.")
|
|
223
|
-
logger.warn(
|
|
224
|
-
"Datadog Ruby heap profiler is currently incompatible with Ruby 4. " \
|
|
225
|
-
"Heap profiling has been disabled."
|
|
226
|
-
)
|
|
227
|
-
return false
|
|
228
226
|
end
|
|
229
227
|
|
|
230
228
|
unless allocation_profiling_enabled
|
|
@@ -403,6 +401,22 @@ module Datadog
|
|
|
403
401
|
end
|
|
404
402
|
end
|
|
405
403
|
|
|
404
|
+
private_class_method def self.valid_cpu_sampling_interval(cpu_sampling_interval_ms, logger)
|
|
405
|
+
if cpu_sampling_interval_ms > 10
|
|
406
|
+
logger.warn(
|
|
407
|
+
"Profiling cpu_sampling_interval_ms is set to #{cpu_sampling_interval_ms}ms, but values above 10ms are " \
|
|
408
|
+
"not supported. Using 10ms instead. To reduce profiler overhead, consider adjusting the " \
|
|
409
|
+
"overhead_target_percentage setting."
|
|
410
|
+
)
|
|
411
|
+
10
|
|
412
|
+
elsif cpu_sampling_interval_ms < 10
|
|
413
|
+
logger.debug { "Profiling cpu_sampling_interval_ms set to #{cpu_sampling_interval_ms}ms" }
|
|
414
|
+
cpu_sampling_interval_ms
|
|
415
|
+
else
|
|
416
|
+
cpu_sampling_interval_ms
|
|
417
|
+
end
|
|
418
|
+
end
|
|
419
|
+
|
|
406
420
|
# To add just a bit more complexity to our detection code, in https://github.com/DataDog/dd-trace-rb/issues/3334
|
|
407
421
|
# a user reported that our code was incorrectly flagging the mariadb variant of libmysqlclient as being
|
|
408
422
|
# incompatible. In fact we have no reports of the mariadb variant needing the "no signals" workaround,
|
|
@@ -10,17 +10,17 @@ module Datadog
|
|
|
10
10
|
class HttpTransport
|
|
11
11
|
attr_reader :exporter_configuration
|
|
12
12
|
|
|
13
|
-
def initialize(agent_settings:, site:, api_key:, upload_timeout_seconds:)
|
|
14
|
-
|
|
13
|
+
def initialize(agent_settings:, site:, api_key:, upload_timeout_seconds:, use_system_dns:)
|
|
14
|
+
timeout_milliseconds = (upload_timeout_seconds * 1_000).to_i
|
|
15
15
|
|
|
16
16
|
# Steep: multiple issues here
|
|
17
17
|
# first https://github.com/soutaro/steep/issues/363
|
|
18
18
|
# then https://github.com/soutaro/steep/issues/1603 (remove the .freeze to see it)
|
|
19
19
|
@exporter_configuration = # steep:ignore IncompatibleAssignment
|
|
20
20
|
if agentless?(site, api_key)
|
|
21
|
-
[:agentless, site, api_key].freeze
|
|
21
|
+
[:agentless, timeout_milliseconds, use_system_dns, site, api_key].freeze
|
|
22
22
|
else
|
|
23
|
-
[:agent, agent_settings.url].freeze
|
|
23
|
+
[:agent, timeout_milliseconds, use_system_dns, agent_settings.url].freeze
|
|
24
24
|
end
|
|
25
25
|
|
|
26
26
|
status, result = self.class._native_validate_exporter(exporter_configuration)
|
|
@@ -31,7 +31,6 @@ module Datadog
|
|
|
31
31
|
def export(flush)
|
|
32
32
|
status, result = self.class._native_do_export(
|
|
33
33
|
exporter_configuration,
|
|
34
|
-
@upload_timeout_milliseconds,
|
|
35
34
|
flush
|
|
36
35
|
)
|
|
37
36
|
|
|
@@ -63,7 +62,7 @@ module Datadog
|
|
|
63
62
|
end
|
|
64
63
|
|
|
65
64
|
def config_without_api_key
|
|
66
|
-
"#{exporter_configuration[0]}: #{exporter_configuration[
|
|
65
|
+
"#{exporter_configuration[0]}: #{exporter_configuration[3]}"
|
|
67
66
|
end
|
|
68
67
|
end
|
|
69
68
|
end
|
|
@@ -27,7 +27,12 @@ module Datadog
|
|
|
27
27
|
scheduler.reset_after_fork
|
|
28
28
|
end
|
|
29
29
|
|
|
30
|
-
worker.start(
|
|
30
|
+
worker.start(
|
|
31
|
+
on_failure_proc: ->(log_failure: true) do
|
|
32
|
+
# @type var log_failure: bool
|
|
33
|
+
component_failed(:worker, log_failure: log_failure)
|
|
34
|
+
end
|
|
35
|
+
)
|
|
31
36
|
scheduler.start(on_failure_proc: proc { component_failed(:scheduler) })
|
|
32
37
|
end
|
|
33
38
|
|
|
@@ -50,13 +55,15 @@ module Datadog
|
|
|
50
55
|
scheduler.stop(true)
|
|
51
56
|
end
|
|
52
57
|
|
|
53
|
-
def component_failed(failed_component)
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
58
|
+
def component_failed(failed_component, log_failure: true)
|
|
59
|
+
if log_failure
|
|
60
|
+
Datadog.logger.warn(
|
|
61
|
+
"Detected issue with profiler (#{failed_component} component), stopping profiling. " \
|
|
62
|
+
"See previous log messages for details."
|
|
63
|
+
)
|
|
64
|
+
Datadog::Core::Telemetry::Logger
|
|
65
|
+
.error("Detected issue with profiler (#{failed_component} component), stopping profiling")
|
|
66
|
+
end
|
|
60
67
|
|
|
61
68
|
if failed_component == :worker
|
|
62
69
|
scheduler.disable_reporting
|
|
@@ -14,6 +14,7 @@ module Datadog
|
|
|
14
14
|
|
|
15
15
|
MINIMUM_VERSION = Gem::Version.new('2.0.0')
|
|
16
16
|
DALLI_PROTOCOL_BINARY_VERSION = Gem::Version.new('3.0.0')
|
|
17
|
+
DALLI_PROTOCOL_META_VERSION = Gem::Version.new('5.0.0')
|
|
17
18
|
|
|
18
19
|
# @public_api Changing the integration name or integration options can cause breaking changes
|
|
19
20
|
register_as :dalli, auto_patch: true
|
|
@@ -31,7 +32,9 @@ module Datadog
|
|
|
31
32
|
end
|
|
32
33
|
|
|
33
34
|
def self.dalli_class
|
|
34
|
-
if version >=
|
|
35
|
+
if version >= DALLI_PROTOCOL_META_VERSION
|
|
36
|
+
::Dalli::Protocol::Meta
|
|
37
|
+
elsif version >= DALLI_PROTOCOL_BINARY_VERSION
|
|
35
38
|
::Dalli::Protocol::Binary
|
|
36
39
|
else
|
|
37
40
|
::Dalli::Server
|
|
@@ -30,7 +30,11 @@ module Datadog
|
|
|
30
30
|
o.default 1.0
|
|
31
31
|
end
|
|
32
32
|
|
|
33
|
-
option :distributed_tracing
|
|
33
|
+
option :distributed_tracing do |o|
|
|
34
|
+
o.type :bool
|
|
35
|
+
o.env Ext::ENV_DISTRIBUTED_TRACING
|
|
36
|
+
o.default true
|
|
37
|
+
end
|
|
34
38
|
|
|
35
39
|
option :split_by_domain, default: false, type: :bool
|
|
36
40
|
|
|
@@ -8,6 +8,7 @@ module Datadog
|
|
|
8
8
|
# @public_api Changing resource names, tag names, or environment variables creates breaking changes.
|
|
9
9
|
module Ext
|
|
10
10
|
ENV_ENABLED = 'DD_TRACE_ETHON_ENABLED'
|
|
11
|
+
ENV_DISTRIBUTED_TRACING = 'DD_TRACE_ETHON_DISTRIBUTED_TRACING'
|
|
11
12
|
ENV_SERVICE_NAME = 'DD_TRACE_ETHON_SERVICE_NAME'
|
|
12
13
|
ENV_PEER_SERVICE = 'DD_TRACE_ETHON_PEER_SERVICE'
|
|
13
14
|
|
|
@@ -33,8 +33,11 @@ module Datadog
|
|
|
33
33
|
o.default 1.0
|
|
34
34
|
end
|
|
35
35
|
|
|
36
|
-
option :distributed_tracing
|
|
37
|
-
|
|
36
|
+
option :distributed_tracing do |o|
|
|
37
|
+
o.type :bool
|
|
38
|
+
o.env Ext::ENV_DISTRIBUTED_TRACING
|
|
39
|
+
o.default true
|
|
40
|
+
end
|
|
38
41
|
option :on_error do |o|
|
|
39
42
|
o.type :proc, nilable: true
|
|
40
43
|
end
|
|
@@ -8,6 +8,7 @@ module Datadog
|
|
|
8
8
|
# @public_api Changing resource names, tag names, or environment variables creates breaking changes.
|
|
9
9
|
module Ext
|
|
10
10
|
ENV_ENABLED = 'DD_TRACE_EXCON_ENABLED'
|
|
11
|
+
ENV_DISTRIBUTED_TRACING = 'DD_TRACE_EXCON_DISTRIBUTED_TRACING'
|
|
11
12
|
ENV_SERVICE_NAME = 'DD_TRACE_EXCON_SERVICE_NAME'
|
|
12
13
|
ENV_PEER_SERVICE = 'DD_TRACE_EXCON_PEER_SERVICE'
|
|
13
14
|
|
|
@@ -32,8 +32,11 @@ module Datadog
|
|
|
32
32
|
o.default 1.0
|
|
33
33
|
end
|
|
34
34
|
|
|
35
|
-
option :distributed_tracing
|
|
36
|
-
|
|
35
|
+
option :distributed_tracing do |o|
|
|
36
|
+
o.type :bool
|
|
37
|
+
o.env Ext::ENV_DISTRIBUTED_TRACING
|
|
38
|
+
o.default true
|
|
39
|
+
end
|
|
37
40
|
option :on_error do |o|
|
|
38
41
|
o.type :proc, nilable: true
|
|
39
42
|
end
|
|
@@ -8,6 +8,7 @@ module Datadog
|
|
|
8
8
|
# @public_api Changing resource names, tag names, or environment variables creates breaking changes.
|
|
9
9
|
module Ext
|
|
10
10
|
ENV_ENABLED = 'DD_TRACE_FARADAY_ENABLED'
|
|
11
|
+
ENV_DISTRIBUTED_TRACING = 'DD_TRACE_FARADAY_DISTRIBUTED_TRACING'
|
|
11
12
|
ENV_SERVICE_NAME = 'DD_TRACE_FARADAY_SERVICE_NAME'
|
|
12
13
|
ENV_PEER_SERVICE = 'DD_TRACE_FARADAY_PEER_SERVICE'
|
|
13
14
|
ENV_ERROR_STATUS_CODES = 'DD_TRACE_FARADAY_ERROR_STATUS_CODES'
|
|
@@ -253,10 +253,10 @@ module Datadog
|
|
|
253
253
|
end
|
|
254
254
|
|
|
255
255
|
def api_view(api)
|
|
256
|
-
# If the API inherits from Grape::API in version >= 1.2.0
|
|
256
|
+
# If the API inherits from Grape::API in version >= 1.2.0 and version <= 2.3.0
|
|
257
257
|
# then the API will be an instance and the name must be derived from the base.
|
|
258
258
|
# See https://github.com/ruby-grape/grape/issues/1825
|
|
259
|
-
if defined?(::Grape::API::Instance) && api <= ::Grape::API::Instance
|
|
259
|
+
if defined?(::Grape::API::Instance) && api <= ::Grape::API::Instance && api.respond_to?(:base)
|
|
260
260
|
api.base.to_s
|
|
261
261
|
else
|
|
262
262
|
api.to_s
|
|
@@ -6,13 +6,8 @@ module Datadog
|
|
|
6
6
|
module Grape
|
|
7
7
|
# Instrumentation for Grape::Endpoint
|
|
8
8
|
module Instrumentation
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
base.prepend(InstanceMethods)
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
# ClassMethods - implementing instrumentation
|
|
15
|
-
module ClassMethods
|
|
9
|
+
# GenerateApiMethodPatch - class method instrumentation for endpoint render (Grape < 3.0.0)
|
|
10
|
+
module GenerateApiMethodPatch
|
|
16
11
|
def generate_api_method(*params, &block)
|
|
17
12
|
method_api = super
|
|
18
13
|
|
|
@@ -23,7 +18,17 @@ module Datadog
|
|
|
23
18
|
end
|
|
24
19
|
end
|
|
25
20
|
|
|
26
|
-
#
|
|
21
|
+
# ExecutePatch - instance method instrumentation for endpoint render (Grape >= 3.0.0)
|
|
22
|
+
module ExecutePatch
|
|
23
|
+
def execute(*args)
|
|
24
|
+
return unless @source
|
|
25
|
+
|
|
26
|
+
::ActiveSupport::Notifications.instrument('endpoint_render.grape.start_render')
|
|
27
|
+
super
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
# InstanceMethods - instance method instrumentation for endpoint run
|
|
27
32
|
module InstanceMethods
|
|
28
33
|
def run(*args)
|
|
29
34
|
::ActiveSupport::Notifications.instrument('endpoint_run.grape.start_process', endpoint: self, env: env)
|
|
@@ -21,7 +21,12 @@ module Datadog
|
|
|
21
21
|
|
|
22
22
|
def patch
|
|
23
23
|
# Patch endpoints
|
|
24
|
-
::Grape::Endpoint.
|
|
24
|
+
::Grape::Endpoint.prepend(Instrumentation::InstanceMethods)
|
|
25
|
+
if target_version < Gem::Version.new('3.0.0')
|
|
26
|
+
::Grape::Endpoint.singleton_class.prepend(Instrumentation::GenerateApiMethodPatch)
|
|
27
|
+
else
|
|
28
|
+
::Grape::Endpoint.prepend(Instrumentation::ExecutePatch)
|
|
29
|
+
end
|
|
25
30
|
|
|
26
31
|
# Subscribe to ActiveSupport events
|
|
27
32
|
Endpoint.subscribe
|
|
@@ -30,8 +30,11 @@ module Datadog
|
|
|
30
30
|
o.default 1.0
|
|
31
31
|
end
|
|
32
32
|
|
|
33
|
-
option :distributed_tracing
|
|
34
|
-
|
|
33
|
+
option :distributed_tracing do |o|
|
|
34
|
+
o.type :bool
|
|
35
|
+
o.env Ext::ENV_DISTRIBUTED_TRACING
|
|
36
|
+
o.default true
|
|
37
|
+
end
|
|
35
38
|
option :service_name do |o|
|
|
36
39
|
o.type :string, nilable: true
|
|
37
40
|
o.default do
|
|
@@ -8,6 +8,7 @@ module Datadog
|
|
|
8
8
|
# @public_api Changing resource names, tag names, or environment variables creates breaking changes.
|
|
9
9
|
module Ext
|
|
10
10
|
ENV_ENABLED = 'DD_TRACE_GRPC_ENABLED'
|
|
11
|
+
ENV_DISTRIBUTED_TRACING = 'DD_TRACE_GRPC_DISTRIBUTED_TRACING'
|
|
11
12
|
ENV_SERVICE_NAME = 'DD_TRACE_GRPC_SERVICE_NAME'
|
|
12
13
|
ENV_PEER_SERVICE = 'DD_TRACE_GRPC_PEER_SERVICE'
|
|
13
14
|
# @!visibility private
|
|
@@ -32,8 +32,11 @@ module Datadog
|
|
|
32
32
|
o.default 1.0
|
|
33
33
|
end
|
|
34
34
|
|
|
35
|
-
option :distributed_tracing
|
|
36
|
-
|
|
35
|
+
option :distributed_tracing do |o|
|
|
36
|
+
o.type :bool
|
|
37
|
+
o.env Ext::ENV_DISTRIBUTED_TRACING
|
|
38
|
+
o.default true
|
|
39
|
+
end
|
|
37
40
|
option :service_name do |o|
|
|
38
41
|
o.type :string, nilable: true
|
|
39
42
|
o.default do
|
|
@@ -8,6 +8,7 @@ module Datadog
|
|
|
8
8
|
# @public_api Changing resource names, tag names, or environment variables creates breaking changes.
|
|
9
9
|
module Ext
|
|
10
10
|
ENV_ENABLED = 'DD_TRACE_HTTP_ENABLED'
|
|
11
|
+
ENV_DISTRIBUTED_TRACING = 'DD_TRACE_HTTP_DISTRIBUTED_TRACING'
|
|
11
12
|
ENV_SERVICE_NAME = 'DD_TRACE_NET_HTTP_SERVICE_NAME'
|
|
12
13
|
ENV_PEER_SERVICE = 'DD_TRACE_NET_HTTP_PEER_SERVICE'
|
|
13
14
|
# @!visibility private
|
|
@@ -18,8 +18,6 @@ module Datadog
|
|
|
18
18
|
class Integration
|
|
19
19
|
include Contrib::Integration
|
|
20
20
|
|
|
21
|
-
MINIMUM_VERSION = Datadog::VERSION::MINIMUM_RUBY_VERSION
|
|
22
|
-
|
|
23
21
|
# @public_api Changing the integration name or integration options can cause breaking changes
|
|
24
22
|
register_as :http, auto_patch: true
|
|
25
23
|
def self.gem_name
|
|
@@ -32,8 +32,11 @@ module Datadog
|
|
|
32
32
|
o.default 1.0
|
|
33
33
|
end
|
|
34
34
|
|
|
35
|
-
option :distributed_tracing
|
|
36
|
-
|
|
35
|
+
option :distributed_tracing do |o|
|
|
36
|
+
o.type :bool
|
|
37
|
+
o.env Ext::ENV_DISTRIBUTED_TRACING
|
|
38
|
+
o.default true
|
|
39
|
+
end
|
|
37
40
|
option :service_name do |o|
|
|
38
41
|
o.default do
|
|
39
42
|
Contrib::SpanAttributeSchema.fetch_service_name(
|
|
@@ -8,6 +8,7 @@ module Datadog
|
|
|
8
8
|
# @public_api Changing resource names, tag names, or environment variables creates breaking changes.
|
|
9
9
|
module Ext
|
|
10
10
|
ENV_ENABLED = 'DD_TRACE_HTTPCLIENT_ENABLED'
|
|
11
|
+
ENV_DISTRIBUTED_TRACING = 'DD_TRACE_HTTPCLIENT_DISTRIBUTED_TRACING'
|
|
11
12
|
ENV_SERVICE_NAME = 'DD_TRACE_HTTPCLIENT_SERVICE_NAME'
|
|
12
13
|
ENV_PEER_SERVICE = 'DD_TRACE_HTTPCLIENT_PEER_SERVICE'
|
|
13
14
|
|
|
@@ -32,8 +32,11 @@ module Datadog
|
|
|
32
32
|
o.default 1.0
|
|
33
33
|
end
|
|
34
34
|
|
|
35
|
-
option :distributed_tracing
|
|
36
|
-
|
|
35
|
+
option :distributed_tracing do |o|
|
|
36
|
+
o.type :bool
|
|
37
|
+
o.env Ext::ENV_DISTRIBUTED_TRACING
|
|
38
|
+
o.default true
|
|
39
|
+
end
|
|
37
40
|
option :service_name do |o|
|
|
38
41
|
o.default do
|
|
39
42
|
Contrib::SpanAttributeSchema.fetch_service_name(
|
|
@@ -8,6 +8,7 @@ module Datadog
|
|
|
8
8
|
# @public_api Changing resource names, tag names, or environment variables creates breaking changes.
|
|
9
9
|
module Ext
|
|
10
10
|
ENV_ENABLED = 'DD_TRACE_HTTPRB_ENABLED'
|
|
11
|
+
ENV_DISTRIBUTED_TRACING = 'DD_TRACE_HTTPRB_DISTRIBUTED_TRACING'
|
|
11
12
|
ENV_SERVICE_NAME = 'DD_TRACE_HTTPRB_SERVICE_NAME'
|
|
12
13
|
ENV_PEER_SERVICE = 'DD_TRACE_HTTPRB_PEER_SERVICE'
|
|
13
14
|
# @!visibility private
|
|
@@ -53,6 +53,12 @@ module Datadog
|
|
|
53
53
|
o.default false
|
|
54
54
|
end
|
|
55
55
|
|
|
56
|
+
option :inject_sql_basehash do |o|
|
|
57
|
+
o.type :bool
|
|
58
|
+
o.env Contrib::Propagation::SqlComment::Ext::ENV_DBM_INJECT_SQL_BASEHASH
|
|
59
|
+
o.default false
|
|
60
|
+
end
|
|
61
|
+
|
|
56
62
|
option :peer_service do |o|
|
|
57
63
|
o.type :string, nilable: true
|
|
58
64
|
o.env Ext::ENV_PEER_SERVICE
|
|
@@ -65,7 +65,8 @@ module Datadog
|
|
|
65
65
|
def inject_propagation(span, sql, trace_op)
|
|
66
66
|
propagation_mode = Contrib::Propagation::SqlComment::Mode.new(
|
|
67
67
|
datadog_configuration[:comment_propagation],
|
|
68
|
-
datadog_configuration[:append_comment]
|
|
68
|
+
datadog_configuration[:append_comment],
|
|
69
|
+
datadog_configuration[:inject_sql_basehash]
|
|
69
70
|
)
|
|
70
71
|
|
|
71
72
|
Contrib::Propagation::SqlComment.annotate!(span, propagation_mode)
|
|
@@ -57,6 +57,12 @@ module Datadog
|
|
|
57
57
|
o.default false
|
|
58
58
|
end
|
|
59
59
|
|
|
60
|
+
option :inject_sql_basehash do |o|
|
|
61
|
+
o.type :bool
|
|
62
|
+
o.env Contrib::Propagation::SqlComment::Ext::ENV_DBM_INJECT_SQL_BASEHASH
|
|
63
|
+
o.default false
|
|
64
|
+
end
|
|
65
|
+
|
|
60
66
|
option :peer_service do |o|
|
|
61
67
|
o.type :string, nilable: true
|
|
62
68
|
o.env Ext::ENV_PEER_SERVICE
|
|
@@ -116,7 +116,8 @@ module Datadog
|
|
|
116
116
|
if sql
|
|
117
117
|
propagation_mode = Contrib::Propagation::SqlComment::Mode.new(
|
|
118
118
|
comment_propagation,
|
|
119
|
-
datadog_configuration[:append_comment]
|
|
119
|
+
datadog_configuration[:append_comment],
|
|
120
|
+
datadog_configuration[:inject_sql_basehash]
|
|
120
121
|
)
|
|
121
122
|
Contrib::Propagation::SqlComment.annotate!(span, propagation_mode)
|
|
122
123
|
propagated_sql_statement = Contrib::Propagation::SqlComment.prepend_comment(
|
|
@@ -8,6 +8,10 @@ module Datadog
|
|
|
8
8
|
module Ext
|
|
9
9
|
ENV_DBM_PROPAGATION_MODE = 'DD_DBM_PROPAGATION_MODE'
|
|
10
10
|
|
|
11
|
+
# Determines whether to inject the propagation hash into the SQL comment
|
|
12
|
+
# TODO: BASEHASH is confusing as a name, so look into better names that can apply cross tracer in the future
|
|
13
|
+
ENV_DBM_INJECT_SQL_BASEHASH = 'DD_DBM_INJECT_SQL_BASEHASH'
|
|
14
|
+
|
|
11
15
|
# The default mode for sql comment propagation
|
|
12
16
|
DISABLED = 'disabled'
|
|
13
17
|
|
|
@@ -20,6 +24,9 @@ module Datadog
|
|
|
20
24
|
# The value should be `true` when `full` mode
|
|
21
25
|
TAG_DBM_TRACE_INJECTED = '_dd.dbm_trace_injected'
|
|
22
26
|
|
|
27
|
+
# Checksum of the agent's container tags and this process' tags
|
|
28
|
+
TAG_PROPAGATED_HASH = '_dd.propagated_hash'
|
|
29
|
+
|
|
23
30
|
# Database service/sql span service (i.e. the service executing the actual query)
|
|
24
31
|
#
|
|
25
32
|
# If fake services are disabled:
|
|
@@ -52,6 +59,9 @@ module Datadog
|
|
|
52
59
|
# @see Datadog::Tracing::Metadata::Ext::TAG_PEER_SERVICE
|
|
53
60
|
KEY_PEER_SERVICE = 'ddprs'
|
|
54
61
|
|
|
62
|
+
# DBM service hash (ddsh) for propagation
|
|
63
|
+
KEY_BASE_HASH = 'ddsh'
|
|
64
|
+
|
|
55
65
|
KEY_TRACEPARENT = 'traceparent'
|
|
56
66
|
end
|
|
57
67
|
end
|
|
@@ -8,7 +8,7 @@ module Datadog
|
|
|
8
8
|
module Propagation
|
|
9
9
|
# Implements sql comment propagation related contracts.
|
|
10
10
|
module SqlComment
|
|
11
|
-
Mode = Struct.new(:mode, :append) do
|
|
11
|
+
Mode = Struct.new(:mode, :append, :inject_sql_basehash) do
|
|
12
12
|
def enabled?
|
|
13
13
|
service? || full?
|
|
14
14
|
end
|
|
@@ -24,6 +24,10 @@ module Datadog
|
|
|
24
24
|
def append?
|
|
25
25
|
append
|
|
26
26
|
end
|
|
27
|
+
|
|
28
|
+
def inject_sql_basehash?
|
|
29
|
+
inject_sql_basehash
|
|
30
|
+
end
|
|
27
31
|
end
|
|
28
32
|
end
|
|
29
33
|
end
|
|
@@ -14,6 +14,16 @@ module Datadog
|
|
|
14
14
|
def self.annotate!(span_op, mode)
|
|
15
15
|
return unless mode.enabled?
|
|
16
16
|
|
|
17
|
+
config = Datadog.configuration
|
|
18
|
+
|
|
19
|
+
# Add DBM propagation hash when enabled and available.
|
|
20
|
+
# This matches the behavior in the Python tracer:
|
|
21
|
+
# https://github.com/DataDog/dd-trace-py/blob/5e94be5c97b42060e5800e35d8fa41472fb8c569/ddtrace/propagation/_database_monitoring.py#L89
|
|
22
|
+
if inject_hash?(mode, config)
|
|
23
|
+
checksum = Datadog.send(:components).agent_info.propagation_checksum
|
|
24
|
+
span_op.set_tag(Ext::TAG_PROPAGATED_HASH, checksum.to_s) if checksum
|
|
25
|
+
end
|
|
26
|
+
|
|
17
27
|
span_op.set_tag(Ext::TAG_DBM_TRACE_INJECTED, true) if mode.full?
|
|
18
28
|
end
|
|
19
29
|
|
|
@@ -36,6 +46,14 @@ module Datadog
|
|
|
36
46
|
Ext::KEY_PEER_SERVICE => peer_service,
|
|
37
47
|
}
|
|
38
48
|
|
|
49
|
+
# Add DBM propagation hash to SQL comment when enabled and available.
|
|
50
|
+
# This matches the behavior in the Python tracer:
|
|
51
|
+
# https://github.com/DataDog/dd-trace-py/blob/5e94be5c97b42060e5800e35d8fa41472fb8c569/ddtrace/propagation/_database_monitoring.py#L139
|
|
52
|
+
if inject_hash?(mode, config)
|
|
53
|
+
checksum = Datadog.send(:components).agent_info.propagation_checksum
|
|
54
|
+
tags[Ext::KEY_BASE_HASH] = checksum.to_s if checksum
|
|
55
|
+
end
|
|
56
|
+
|
|
39
57
|
db_service = peer_service || span_op.service
|
|
40
58
|
if parent_service != db_service # Only set if it's different from parent_service; otherwise it's redundant
|
|
41
59
|
tags[Ext::KEY_DATABASE_SERVICE] = db_service
|
|
@@ -60,6 +78,12 @@ module Datadog
|
|
|
60
78
|
"#{Comment.new(tags)} #{sql}"
|
|
61
79
|
end
|
|
62
80
|
end
|
|
81
|
+
|
|
82
|
+
# @return [Boolean] whether to inject the propagation checksum (basehash)
|
|
83
|
+
def self.inject_hash?(mode, config)
|
|
84
|
+
mode.inject_sql_basehash? && config.experimental_propagate_process_tags_enabled
|
|
85
|
+
end
|
|
86
|
+
private_class_method :inject_hash?
|
|
63
87
|
end
|
|
64
88
|
end
|
|
65
89
|
end
|
|
@@ -11,8 +11,11 @@ module Datadog
|
|
|
11
11
|
# Default settings for the Que integration
|
|
12
12
|
class Settings < Contrib::Configuration::Settings
|
|
13
13
|
option :service_name
|
|
14
|
-
option :distributed_tracing
|
|
15
|
-
|
|
14
|
+
option :distributed_tracing do |o|
|
|
15
|
+
o.type :bool
|
|
16
|
+
o.env Ext::ENV_DISTRIBUTED_TRACING
|
|
17
|
+
o.default true
|
|
18
|
+
end
|
|
16
19
|
option :enabled do |o|
|
|
17
20
|
o.type :bool
|
|
18
21
|
o.env Ext::ENV_ENABLED
|
|
@@ -11,6 +11,7 @@ module Datadog
|
|
|
11
11
|
ENV_ANALYTICS_ENABLED = 'DD_TRACE_QUE_ANALYTICS_ENABLED'
|
|
12
12
|
ENV_ANALYTICS_SAMPLE_RATE = 'DD_TRACE_QUE_ANALYTICS_SAMPLE_RATE'
|
|
13
13
|
ENV_ENABLED = 'DD_TRACE_QUE_ENABLED'
|
|
14
|
+
ENV_DISTRIBUTED_TRACING = 'DD_TRACE_QUE_DISTRIBUTED_TRACING'
|
|
14
15
|
ENV_TAG_ARGS_ENABLED = 'DD_TRACE_QUE_TAG_ARGS_ENABLED'
|
|
15
16
|
ENV_TAG_DATA_ENABLED = 'DD_TRACE_QUE_TAG_DATA_ENABLED'
|
|
16
17
|
SERVICE_NAME = 'que'
|
|
@@ -37,7 +37,11 @@ module Datadog
|
|
|
37
37
|
end
|
|
38
38
|
|
|
39
39
|
option :application
|
|
40
|
-
option :distributed_tracing
|
|
40
|
+
option :distributed_tracing do |o|
|
|
41
|
+
o.type :bool
|
|
42
|
+
o.env Ext::ENV_DISTRIBUTED_TRACING
|
|
43
|
+
o.default true
|
|
44
|
+
end
|
|
41
45
|
option :headers, default: DEFAULT_HEADERS, type: :hash
|
|
42
46
|
option :middleware_names, default: false, type: :bool
|
|
43
47
|
option :quantize, default: {}, type: :hash
|
|
@@ -8,6 +8,7 @@ module Datadog
|
|
|
8
8
|
# @public_api Changing resource names, tag names, or environment variables creates breaking changes.
|
|
9
9
|
module Ext
|
|
10
10
|
ENV_ENABLED = 'DD_TRACE_RACK_ENABLED'
|
|
11
|
+
ENV_DISTRIBUTED_TRACING = 'DD_TRACE_RACK_DISTRIBUTED_TRACING'
|
|
11
12
|
# @!visibility private
|
|
12
13
|
ENV_ANALYTICS_ENABLED = 'DD_TRACE_RACK_ANALYTICS_ENABLED'
|
|
13
14
|
ENV_ANALYTICS_SAMPLE_RATE = 'DD_TRACE_RACK_ANALYTICS_SAMPLE_RATE'
|