datadog 2.31.0 → 2.33.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/ext/datadog_profiling_native_extension/clock_id.h +9 -1
- data/ext/datadog_profiling_native_extension/clock_id_from_mach.c +73 -0
- data/ext/datadog_profiling_native_extension/clock_id_from_pthread.c +1 -1
- data/ext/datadog_profiling_native_extension/collectors_cpu_and_wall_time_worker.c +17 -7
- data/ext/datadog_profiling_native_extension/collectors_thread_context.c +16 -5
- data/ext/datadog_profiling_native_extension/collectors_thread_context.h +6 -0
- data/ext/datadog_profiling_native_extension/extconf.rb +8 -4
- data/ext/datadog_profiling_native_extension/http_transport.c +10 -5
- data/ext/datadog_profiling_native_extension/stack_recorder.c +3 -9
- data/ext/datadog_profiling_native_extension/time_helpers.h +1 -0
- data/ext/libdatadog_api/crashtracker.c +2 -0
- data/ext/libdatadog_api/di.c +48 -0
- data/ext/libdatadog_api/extconf.rb +7 -4
- data/ext/libdatadog_extconf_helpers.rb +38 -1
- data/lib/datadog/ai_guard/autoload.rb +10 -0
- data/lib/datadog/ai_guard/component.rb +1 -1
- data/lib/datadog/ai_guard/configuration.rb +105 -2
- data/lib/datadog/ai_guard/contrib/auto_instrument.rb +24 -0
- data/lib/datadog/ai_guard/contrib/rack/integration.rb +42 -0
- data/lib/datadog/ai_guard/contrib/rack/patcher.rb +26 -0
- data/lib/datadog/ai_guard/contrib/rack/request_middleware.rb +83 -0
- data/lib/datadog/ai_guard/contrib/rails/integration.rb +41 -0
- data/lib/datadog/ai_guard/contrib/rails/patcher.rb +97 -0
- data/lib/datadog/ai_guard/evaluation.rb +2 -0
- data/lib/datadog/ai_guard/ext.rb +2 -0
- data/lib/datadog/ai_guard.rb +8 -0
- data/lib/datadog/appsec/autoload.rb +1 -1
- data/lib/datadog/appsec/component.rb +1 -1
- data/lib/datadog/appsec/configuration.rb +414 -1
- data/lib/datadog/appsec/contrib/aws_lambda/gateway/watcher.rb +75 -0
- data/lib/datadog/appsec/contrib/aws_lambda/integration.rb +39 -0
- data/lib/datadog/appsec/contrib/aws_lambda/patcher.rb +30 -0
- data/lib/datadog/appsec/contrib/aws_lambda/waf_addresses.rb +111 -0
- data/lib/datadog/appsec/contrib/devise/patches/signin_tracking_patch.rb +2 -1
- data/lib/datadog/appsec/contrib/rack/gateway/request.rb +1 -1
- data/lib/datadog/appsec/contrib/rails/patcher.rb +2 -2
- data/lib/datadog/appsec/metrics/telemetry.rb +13 -1
- data/lib/datadog/appsec/security_engine/runner.rb +1 -1
- data/lib/datadog/appsec/trace_keeper.rb +18 -6
- data/lib/datadog/appsec/utils/http/url_encoded.rb +2 -2
- data/lib/datadog/appsec.rb +1 -0
- data/lib/datadog/core/configuration/components.rb +1 -1
- data/lib/datadog/core/configuration/settings.rb +13 -0
- data/lib/datadog/core/configuration/supported_configurations.rb +4 -0
- data/lib/datadog/core/configuration.rb +1 -1
- data/lib/datadog/core/contrib/rails/utils.rb +1 -1
- data/lib/datadog/core/crashtracking/component.rb +3 -3
- data/lib/datadog/core/diagnostics/environment_logger.rb +3 -1
- data/lib/datadog/core/environment/container.rb +2 -2
- data/lib/datadog/core/environment/ext.rb +1 -0
- data/lib/datadog/core/environment/socket.rb +13 -0
- data/lib/datadog/core/feature_flags.rb +1 -1
- data/lib/datadog/core/metrics/client.rb +5 -5
- data/lib/datadog/core/remote/client.rb +1 -1
- data/lib/datadog/core/remote/component.rb +2 -2
- data/lib/datadog/core/runtime/metrics.rb +1 -1
- data/lib/datadog/core/telemetry/emitter.rb +1 -1
- data/lib/datadog/core/telemetry/event/app_started.rb +2 -2
- data/lib/datadog/core/transport/http.rb +2 -0
- data/lib/datadog/core/utils.rb +1 -1
- data/lib/datadog/core/workers/async.rb +1 -1
- data/lib/datadog/core.rb +1 -1
- data/lib/datadog/data_streams/configuration.rb +40 -1
- data/lib/datadog/data_streams/pathway_context.rb +1 -1
- data/lib/datadog/data_streams/processor.rb +1 -1
- data/lib/datadog/data_streams.rb +1 -1
- data/lib/datadog/di/base.rb +8 -5
- data/lib/datadog/di/code_tracker.rb +179 -1
- data/lib/datadog/di/component.rb +1 -1
- data/lib/datadog/di/configuration.rb +235 -2
- data/lib/datadog/di/instrumenter.rb +46 -26
- data/lib/datadog/di/probe_builder.rb +1 -1
- data/lib/datadog/di/probe_file_loader.rb +2 -2
- data/lib/datadog/di/probe_manager.rb +6 -6
- data/lib/datadog/di/probe_notification_builder.rb +1 -1
- data/lib/datadog/di/probe_notifier_worker.rb +2 -2
- data/lib/datadog/di/remote.rb +6 -6
- data/lib/datadog/di/serializer.rb +1 -1
- data/lib/datadog/di/transport/input.rb +3 -3
- data/lib/datadog/error_tracking/configuration.rb +55 -2
- data/lib/datadog/kit/enable_core_dumps.rb +1 -1
- data/lib/datadog/open_feature/component.rb +18 -1
- data/lib/datadog/open_feature/evaluation_engine.rb +3 -3
- data/lib/datadog/open_feature/exposures/reporter.rb +1 -1
- data/lib/datadog/open_feature/exposures/worker.rb +1 -1
- data/lib/datadog/open_feature/hooks/flag_eval_hook.rb +49 -0
- data/lib/datadog/open_feature/metrics/flag_eval_metrics.rb +149 -0
- data/lib/datadog/open_feature/provider.rb +19 -1
- data/lib/datadog/open_feature/remote.rb +1 -1
- data/lib/datadog/open_feature/transport.rb +1 -1
- data/lib/datadog/opentelemetry/metrics.rb +13 -4
- data/lib/datadog/opentelemetry/sdk/configurator.rb +1 -1
- data/lib/datadog/opentelemetry/sdk/id_generator.rb +16 -10
- data/lib/datadog/opentelemetry/sdk/metrics_exporter.rb +1 -1
- data/lib/datadog/profiling/collectors/code_provenance.rb +35 -9
- data/lib/datadog/profiling/collectors/cpu_and_wall_time_worker.rb +31 -2
- data/lib/datadog/profiling/collectors/idle_sampling_helper.rb +8 -2
- data/lib/datadog/profiling/collectors/info.rb +16 -3
- data/lib/datadog/profiling/component.rb +3 -6
- data/lib/datadog/profiling/exporter.rb +37 -12
- data/lib/datadog/profiling/ext.rb +0 -2
- data/lib/datadog/profiling/flush.rb +21 -12
- data/lib/datadog/profiling/http_transport.rb +12 -1
- data/lib/datadog/profiling/load_native_extension.rb +1 -1
- data/lib/datadog/profiling/profiler.rb +13 -1
- data/lib/datadog/profiling/scheduler.rb +2 -2
- data/lib/datadog/profiling/stack_recorder.rb +0 -4
- data/lib/datadog/profiling/tasks/exec.rb +8 -3
- data/lib/datadog/profiling/tasks/help.rb +1 -0
- data/lib/datadog/profiling/tasks/setup.rb +2 -2
- data/lib/datadog/single_step_instrument.rb +1 -1
- data/lib/datadog/symbol_database/configuration.rb +65 -0
- data/lib/datadog/symbol_database/extractor.rb +906 -0
- data/lib/datadog/symbol_database/file_hash.rb +46 -0
- data/lib/datadog/symbol_database/logger.rb +43 -0
- data/lib/datadog/symbol_database/scope.rb +102 -0
- data/lib/datadog/symbol_database/scope_batcher.rb +280 -0
- data/lib/datadog/symbol_database/service_version.rb +57 -0
- data/lib/datadog/symbol_database/symbol.rb +66 -0
- data/lib/datadog/symbol_database/transport/http/endpoint.rb +28 -0
- data/lib/datadog/symbol_database/transport/http.rb +45 -0
- data/lib/datadog/symbol_database/transport.rb +54 -0
- data/lib/datadog/symbol_database/uploader.rb +169 -0
- data/lib/datadog/symbol_database.rb +49 -0
- data/lib/datadog/tracing/buffer.rb +3 -3
- data/lib/datadog/tracing/configuration/settings.rb +1 -1
- data/lib/datadog/tracing/contrib/action_pack/action_controller/instrumentation.rb +5 -3
- data/lib/datadog/tracing/contrib/action_view/events/render_template.rb +1 -1
- data/lib/datadog/tracing/contrib/active_job/events/discard.rb +1 -1
- data/lib/datadog/tracing/contrib/active_job/events/enqueue.rb +1 -1
- data/lib/datadog/tracing/contrib/active_job/events/enqueue_at.rb +1 -1
- data/lib/datadog/tracing/contrib/active_job/events/enqueue_retry.rb +1 -1
- data/lib/datadog/tracing/contrib/active_job/events/perform.rb +1 -1
- data/lib/datadog/tracing/contrib/active_job/events/retry_stopped.rb +1 -1
- data/lib/datadog/tracing/contrib/active_model_serializers/events/render.rb +1 -1
- data/lib/datadog/tracing/contrib/active_model_serializers/events/serialize.rb +1 -1
- data/lib/datadog/tracing/contrib/active_record/configuration/resolver.rb +2 -2
- data/lib/datadog/tracing/contrib/active_record/events/instantiation.rb +1 -1
- data/lib/datadog/tracing/contrib/active_record/events/sql.rb +1 -1
- data/lib/datadog/tracing/contrib/active_record/utils.rb +1 -1
- data/lib/datadog/tracing/contrib/active_support/cache/events/cache.rb +1 -1
- data/lib/datadog/tracing/contrib/active_support/notifications/subscription.rb +2 -2
- data/lib/datadog/tracing/contrib/aws/instrumentation.rb +1 -1
- data/lib/datadog/tracing/contrib/component.rb +1 -1
- data/lib/datadog/tracing/contrib/configuration/resolver.rb +7 -4
- data/lib/datadog/tracing/contrib/dalli/quantize.rb +1 -1
- data/lib/datadog/tracing/contrib/elasticsearch/patcher.rb +1 -1
- data/lib/datadog/tracing/contrib/excon/middleware.rb +2 -2
- data/lib/datadog/tracing/contrib/extensions.rb +9 -0
- data/lib/datadog/tracing/contrib/faraday/middleware.rb +2 -2
- data/lib/datadog/tracing/contrib/grape/endpoint.rb +5 -5
- data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/client.rb +2 -2
- data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/server.rb +2 -2
- data/lib/datadog/tracing/contrib/http/instrumentation.rb +2 -2
- data/lib/datadog/tracing/contrib/httpclient/instrumentation.rb +6 -2
- data/lib/datadog/tracing/contrib/httprb/instrumentation.rb +2 -2
- data/lib/datadog/tracing/contrib/kafka/instrumentation/consumer.rb +2 -2
- data/lib/datadog/tracing/contrib/kafka/instrumentation/producer.rb +2 -2
- data/lib/datadog/tracing/contrib/karafka/patcher.rb +1 -1
- data/lib/datadog/tracing/contrib/mongodb/subscribers.rb +3 -3
- data/lib/datadog/tracing/contrib/opensearch/patcher.rb +1 -1
- data/lib/datadog/tracing/contrib/presto/instrumentation.rb +3 -3
- data/lib/datadog/tracing/contrib/rack/configuration/settings.rb +6 -0
- data/lib/datadog/tracing/contrib/rack/ext.rb +27 -0
- data/lib/datadog/tracing/contrib/rack/patcher.rb +1 -1
- data/lib/datadog/tracing/contrib/rack/request_queue.rb +1 -1
- data/lib/datadog/tracing/contrib/rack/trace_proxy_middleware.rb +117 -1
- data/lib/datadog/tracing/contrib/rails/log_injection.rb +1 -1
- data/lib/datadog/tracing/contrib/rails/runner.rb +1 -1
- data/lib/datadog/tracing/contrib/rake/instrumentation.rb +2 -2
- data/lib/datadog/tracing/contrib/redis/quantize.rb +1 -1
- data/lib/datadog/tracing/contrib/redis/tags.rb +1 -1
- data/lib/datadog/tracing/contrib/sidekiq/utils.rb +1 -1
- data/lib/datadog/tracing/contrib/stripe/request.rb +1 -1
- data/lib/datadog/tracing/contrib.rb +8 -0
- data/lib/datadog/tracing/diagnostics/environment_logger.rb +3 -1
- data/lib/datadog/tracing/distributed/baggage.rb +59 -5
- data/lib/datadog/tracing/distributed/datadog.rb +11 -11
- data/lib/datadog/tracing/distributed/datadog_tags_codec.rb +1 -1
- data/lib/datadog/tracing/distributed/propagation.rb +2 -2
- data/lib/datadog/tracing/distributed/trace_context.rb +74 -32
- data/lib/datadog/tracing/event.rb +1 -1
- data/lib/datadog/tracing/metadata/tagging.rb +2 -2
- data/lib/datadog/tracing/pipeline.rb +1 -1
- data/lib/datadog/tracing/remote.rb +1 -1
- data/lib/datadog/tracing/sampling/rule.rb +1 -1
- data/lib/datadog/tracing/sampling/rule_sampler.rb +2 -2
- data/lib/datadog/tracing/sampling/span/rule_parser.rb +2 -2
- data/lib/datadog/tracing/span_operation.rb +3 -3
- data/lib/datadog/tracing/trace_operation.rb +4 -4
- data/lib/datadog/tracing/tracer.rb +6 -8
- data/lib/datadog/tracing/transport/io/client.rb +1 -1
- data/lib/datadog/tracing/workers.rb +2 -1
- data/lib/datadog/version.rb +1 -1
- metadata +33 -12
- data/ext/datadog_profiling_native_extension/clock_id_noop.c +0 -21
- data/lib/datadog/ai_guard/configuration/settings.rb +0 -113
- data/lib/datadog/appsec/configuration/settings.rb +0 -423
- data/lib/datadog/data_streams/configuration/settings.rb +0 -49
- data/lib/datadog/di/configuration/settings.rb +0 -243
- data/lib/datadog/error_tracking/configuration/settings.rb +0 -63
|
@@ -25,7 +25,7 @@ module Datadog
|
|
|
25
25
|
def query
|
|
26
26
|
::Rack::Utils.parse_query(request.query_string)
|
|
27
27
|
rescue => e
|
|
28
|
-
Datadog.logger.debug { "AppSec: Failed to parse request query string: #{e.class}: #{e}" }
|
|
28
|
+
Datadog.logger.debug { "AppSec: Failed to parse request query string: #{e.class}: #{e.message}" }
|
|
29
29
|
AppSec.telemetry.report(e, description: 'AppSec: Failed to parse request query string')
|
|
30
30
|
|
|
31
31
|
{}
|
|
@@ -138,7 +138,7 @@ module Datadog
|
|
|
138
138
|
end
|
|
139
139
|
rescue => e
|
|
140
140
|
error_message = 'Failed to get application routes'
|
|
141
|
-
Datadog.logger.error("#{error_message}, #{e.class}: #{e}")
|
|
141
|
+
Datadog.logger.error("#{error_message}, #{e.class}: #{e.message}")
|
|
142
142
|
AppSec.telemetry.report(e, description: error_message)
|
|
143
143
|
end
|
|
144
144
|
end
|
|
@@ -148,7 +148,7 @@ module Datadog
|
|
|
148
148
|
Datadog::AppSec::Contrib::Rails::Patcher.report_routes_via_telemetry(::Rails.application.routes.routes)
|
|
149
149
|
rescue => e
|
|
150
150
|
error_message = 'Failed to get application routes'
|
|
151
|
-
Datadog.logger.error("#{error_message}, #{e.class}: #{e}")
|
|
151
|
+
Datadog.logger.error("#{error_message}, #{e.class}: #{e.message}")
|
|
152
152
|
AppSec.telemetry.report(e, description: error_message)
|
|
153
153
|
end
|
|
154
154
|
end
|
|
@@ -5,6 +5,11 @@ module Datadog
|
|
|
5
5
|
module Metrics
|
|
6
6
|
# A class responsible for reporting WAF and RASP telemetry metrics.
|
|
7
7
|
module Telemetry
|
|
8
|
+
ACTION_BLOCK = 'block_request'
|
|
9
|
+
ACTION_REDIRECT = 'redirect_request'
|
|
10
|
+
BLOCK_SUCCESS = 'success'
|
|
11
|
+
BLOCK_IRRELEVANT = 'irrelevant'
|
|
12
|
+
|
|
8
13
|
module_function
|
|
9
14
|
|
|
10
15
|
def report_rasp(type, result, phase: nil)
|
|
@@ -19,8 +24,15 @@ module Datadog
|
|
|
19
24
|
namespace = Ext::TELEMETRY_METRICS_NAMESPACE
|
|
20
25
|
|
|
21
26
|
AppSec.telemetry.inc(namespace, 'rasp.rule.eval', 1, tags: tags)
|
|
22
|
-
AppSec.telemetry.inc(namespace, 'rasp.rule.match', 1, tags: tags) if result.match?
|
|
23
27
|
AppSec.telemetry.inc(namespace, 'rasp.timeout', 1, tags: tags) if result.timeout?
|
|
28
|
+
|
|
29
|
+
if result.match?
|
|
30
|
+
blocked = result.actions.key?(ACTION_BLOCK) || result.actions.key?(ACTION_REDIRECT)
|
|
31
|
+
# NOTE: Mutates tags to avoid an extra hash allocation. Keep this the last .inc call.
|
|
32
|
+
tags[:block] = blocked ? BLOCK_SUCCESS : BLOCK_IRRELEVANT
|
|
33
|
+
|
|
34
|
+
AppSec.telemetry.inc(namespace, 'rasp.rule.match', 1, tags: tags)
|
|
35
|
+
end
|
|
24
36
|
end
|
|
25
37
|
end
|
|
26
38
|
end
|
|
@@ -79,7 +79,7 @@ module Datadog
|
|
|
79
79
|
def try_run(persistent_data, ephemeral_data, timeout)
|
|
80
80
|
waf_context.run(persistent_data, ephemeral_data, timeout)
|
|
81
81
|
rescue WAF::LibDDWAFError => e
|
|
82
|
-
Datadog.logger.debug { "#{@debug_tag} execution error: #{e} backtrace: #{e.backtrace&.first(3)}" }
|
|
82
|
+
Datadog.logger.debug { "#{@debug_tag} execution error: #{e.class}: #{e.message} backtrace: #{e.backtrace&.first(3)}" }
|
|
83
83
|
AppSec.telemetry.report(e, description: 'libddwaf-rb internal low-level error')
|
|
84
84
|
|
|
85
85
|
WAF::Result.new(
|
|
@@ -7,16 +7,28 @@ module Datadog
|
|
|
7
7
|
def self.keep!(trace)
|
|
8
8
|
return unless trace
|
|
9
9
|
|
|
10
|
+
previous_dm = trace.get_tag(Tracing::Metadata::Ext::Distributed::TAG_DECISION_MAKER)
|
|
11
|
+
|
|
10
12
|
# NOTE: This action will not set correct decision maker value, so the
|
|
11
13
|
# trace keeping must be done with additional steps below
|
|
12
14
|
trace.keep!
|
|
13
15
|
|
|
14
|
-
#
|
|
15
|
-
#
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
16
|
+
# NOTE: Preserve decision maker if already set by another product.
|
|
17
|
+
# As `trace.keep!` resets `_dd.p.dm` to `MANUAL`, we restore the
|
|
18
|
+
# previous value when another product has already claimed the
|
|
19
|
+
# decision maker.
|
|
20
|
+
if previous_dm.nil? || previous_dm == Tracing::Sampling::Ext::Decision::MANUAL
|
|
21
|
+
trace.set_tag(
|
|
22
|
+
Tracing::Metadata::Ext::Distributed::TAG_DECISION_MAKER,
|
|
23
|
+
Tracing::Sampling::Ext::Decision::ASM
|
|
24
|
+
)
|
|
25
|
+
else
|
|
26
|
+
trace.set_tag(
|
|
27
|
+
Tracing::Metadata::Ext::Distributed::TAG_DECISION_MAKER,
|
|
28
|
+
previous_dm,
|
|
29
|
+
)
|
|
30
|
+
end
|
|
31
|
+
|
|
20
32
|
trace.set_distributed_source(Ext::PRODUCT_BIT)
|
|
21
33
|
end
|
|
22
34
|
end
|
|
@@ -30,8 +30,8 @@ module Datadog
|
|
|
30
30
|
#
|
|
31
31
|
# @type var key: ::String
|
|
32
32
|
# @type var value: ::String
|
|
33
|
-
key, value = pair.split('=', 2).map! do |
|
|
34
|
-
CGI.unescape(
|
|
33
|
+
key, value = pair.split('=', 2).map! do |val|
|
|
34
|
+
CGI.unescape(val)
|
|
35
35
|
end #: [::String, ::String]
|
|
36
36
|
|
|
37
37
|
if (stored = memo[key])
|
data/lib/datadog/appsec.rb
CHANGED
|
@@ -63,5 +63,6 @@ require_relative 'appsec/contrib/graphql/integration'
|
|
|
63
63
|
require_relative 'appsec/contrib/faraday/integration'
|
|
64
64
|
require_relative 'appsec/contrib/excon/integration'
|
|
65
65
|
require_relative 'appsec/contrib/rest_client/integration'
|
|
66
|
+
require_relative 'appsec/contrib/aws_lambda/integration'
|
|
66
67
|
|
|
67
68
|
require_relative 'appsec/autoload'
|
|
@@ -98,7 +98,7 @@ module Datadog
|
|
|
98
98
|
agent_info: agent_info
|
|
99
99
|
)
|
|
100
100
|
rescue => e
|
|
101
|
-
logger.warn("Failed to initialize Data Streams Monitoring: #{e.class}: #{e}")
|
|
101
|
+
logger.warn("Failed to initialize Data Streams Monitoring: #{e.class}: #{e.message}")
|
|
102
102
|
nil
|
|
103
103
|
end
|
|
104
104
|
end
|
|
@@ -13,6 +13,7 @@ require_relative '../../profiling/ext'
|
|
|
13
13
|
|
|
14
14
|
require_relative '../../tracing/configuration/settings'
|
|
15
15
|
require_relative '../../opentelemetry/configuration/settings'
|
|
16
|
+
require_relative '../../symbol_database/configuration'
|
|
16
17
|
|
|
17
18
|
module Datadog
|
|
18
19
|
module Core
|
|
@@ -170,6 +171,16 @@ module Datadog
|
|
|
170
171
|
o.env Core::Environment::Ext::ENV_ENVIRONMENT
|
|
171
172
|
end
|
|
172
173
|
|
|
174
|
+
# Override the hostname reported by this process.
|
|
175
|
+
# When `report_hostname` is enabled, sets the hostname on traces and
|
|
176
|
+
# the `host.name` resource attribute in OpenTelemetry.
|
|
177
|
+
# @default `DD_HOSTNAME` environment variable, otherwise `nil`
|
|
178
|
+
# @return [String,nil]
|
|
179
|
+
option :hostname do |o|
|
|
180
|
+
o.type :string, nilable: true
|
|
181
|
+
o.env Core::Environment::Ext::ENV_HOSTNAME
|
|
182
|
+
end
|
|
183
|
+
|
|
173
184
|
# Configuration for container environments. For internal use only.
|
|
174
185
|
# @!visibility private
|
|
175
186
|
settings :container do
|
|
@@ -1111,6 +1122,8 @@ module Datadog
|
|
|
1111
1122
|
extend Datadog::Tracing::Configuration::Settings
|
|
1112
1123
|
|
|
1113
1124
|
extend Datadog::OpenTelemetry::Configuration::Settings
|
|
1125
|
+
|
|
1126
|
+
extend Datadog::SymbolDatabase::Configuration::Settings
|
|
1114
1127
|
end
|
|
1115
1128
|
# standard:enable Metrics/BlockLength
|
|
1116
1129
|
end
|
|
@@ -61,12 +61,14 @@ module Datadog
|
|
|
61
61
|
"DD_GIT_COMMIT_SHA",
|
|
62
62
|
"DD_GIT_REPOSITORY_URL",
|
|
63
63
|
"DD_HEALTH_METRICS_ENABLED",
|
|
64
|
+
"DD_HOSTNAME",
|
|
64
65
|
"DD_INJECTION_ENABLED",
|
|
65
66
|
"DD_INJECT_FORCE",
|
|
66
67
|
"DD_INSTRUMENTATION_INSTALL_ID",
|
|
67
68
|
"DD_INSTRUMENTATION_INSTALL_TIME",
|
|
68
69
|
"DD_INSTRUMENTATION_INSTALL_TYPE",
|
|
69
70
|
"DD_INSTRUMENTATION_TELEMETRY_ENABLED",
|
|
71
|
+
"DD_INTERNAL_FORCE_SYMBOL_DATABASE_UPLOAD",
|
|
70
72
|
"DD_LOGS_INJECTION",
|
|
71
73
|
"DD_METRICS_OTEL_ENABLED",
|
|
72
74
|
"DD_METRIC_AGENT_PORT",
|
|
@@ -104,6 +106,7 @@ module Datadog
|
|
|
104
106
|
"DD_SITE",
|
|
105
107
|
"DD_SPAN_SAMPLING_RULES",
|
|
106
108
|
"DD_SPAN_SAMPLING_RULES_FILE",
|
|
109
|
+
"DD_SYMBOL_DATABASE_UPLOAD_ENABLED",
|
|
107
110
|
"DD_TAGS",
|
|
108
111
|
"DD_TELEMETRY_AGENTLESS_URL",
|
|
109
112
|
"DD_TELEMETRY_DEPENDENCY_COLLECTION_ENABLED",
|
|
@@ -226,6 +229,7 @@ module Datadog
|
|
|
226
229
|
"DD_TRACE_HTTP_ENABLED",
|
|
227
230
|
"DD_TRACE_HTTP_ERROR_STATUS_CODES",
|
|
228
231
|
"DD_TRACE_HTTP_SERVER_ERROR_STATUSES",
|
|
232
|
+
"DD_TRACE_INFERRED_PROXY_SERVICES_ENABLED",
|
|
229
233
|
"DD_TRACE_KAFKA_ANALYTICS_ENABLED",
|
|
230
234
|
"DD_TRACE_KAFKA_ANALYTICS_SAMPLE_RATE",
|
|
231
235
|
"DD_TRACE_KAFKA_ENABLED",
|
|
@@ -238,7 +238,7 @@ module Datadog
|
|
|
238
238
|
yield write_components
|
|
239
239
|
rescue ThreadError => e
|
|
240
240
|
logger_without_components.error(
|
|
241
|
-
"Detected deadlock during datadog initialization: #{e.class}: #{e}. " \
|
|
241
|
+
"Detected deadlock during datadog initialization: #{e.class}: #{e.message}. " \
|
|
242
242
|
'Please report this at https://github.com/datadog/dd-trace-rb/blob/master/CONTRIBUTING.md#found-a-bug' \
|
|
243
243
|
"\n\tSource:\n\t#{Array(e.backtrace).join("\n\t")}"
|
|
244
244
|
)
|
|
@@ -14,7 +14,7 @@ module Datadog
|
|
|
14
14
|
end
|
|
15
15
|
application_name&.underscore
|
|
16
16
|
rescue => e
|
|
17
|
-
Datadog.logger.debug("Failed to extract Rails application name: #{e.class}: #{e}")
|
|
17
|
+
Datadog.logger.debug("Failed to extract Rails application name: #{e.class}: #{e.message}")
|
|
18
18
|
nil
|
|
19
19
|
end
|
|
20
20
|
|
|
@@ -55,7 +55,7 @@ module Datadog
|
|
|
55
55
|
# Unhandled exception report triggering means that the application is already in a bad state
|
|
56
56
|
# We don't want to swallow non-StandardError exceptions here; we would rather just let the
|
|
57
57
|
# application crash
|
|
58
|
-
Datadog.logger.debug { "Crashtracker failed to report unhandled exception: #{e.class}: #{e}" }
|
|
58
|
+
Datadog.logger.debug { "Crashtracker failed to report unhandled exception: #{e.class}: #{e.message}" }
|
|
59
59
|
end
|
|
60
60
|
end
|
|
61
61
|
|
|
@@ -130,7 +130,7 @@ module Datadog
|
|
|
130
130
|
self.class._native_stop
|
|
131
131
|
logger.debug('Crash tracking stopped successfully')
|
|
132
132
|
rescue => e
|
|
133
|
-
logger.error("Failed to stop crash tracking: #{e.class}: #{e}")
|
|
133
|
+
logger.error("Failed to stop crash tracking: #{e.class}: #{e.message}")
|
|
134
134
|
end
|
|
135
135
|
|
|
136
136
|
private
|
|
@@ -149,7 +149,7 @@ module Datadog
|
|
|
149
149
|
)
|
|
150
150
|
logger.debug("Crash tracking action: #{action} successful")
|
|
151
151
|
rescue => e
|
|
152
|
-
logger.error("Failed to #{action} crash tracking: #{e.class}: #{e}")
|
|
152
|
+
logger.error("Failed to #{action} crash tracking: #{e.class}: #{e.message}")
|
|
153
153
|
end
|
|
154
154
|
end
|
|
155
155
|
end
|
|
@@ -52,7 +52,9 @@ module Datadog
|
|
|
52
52
|
log_configuration!('CORE', data.to_json)
|
|
53
53
|
end
|
|
54
54
|
rescue => e
|
|
55
|
-
logger.warn(
|
|
55
|
+
logger.warn(
|
|
56
|
+
"Failed to collect core environment information: #{e.class}: #{e.message} Location: #{Array(e.backtrace).first}"
|
|
57
|
+
)
|
|
56
58
|
end
|
|
57
59
|
end
|
|
58
60
|
|
|
@@ -108,7 +108,7 @@ module Datadog
|
|
|
108
108
|
end
|
|
109
109
|
rescue => e
|
|
110
110
|
Datadog.logger.debug(
|
|
111
|
-
"Error while checking cgroup namespace. Cause: #{e.class}: #{e} Location: #{Array(e.backtrace).first}"
|
|
111
|
+
"Error while checking cgroup namespace. Cause: #{e.class}: #{e.message} Location: #{Array(e.backtrace).first}"
|
|
112
112
|
)
|
|
113
113
|
false
|
|
114
114
|
end
|
|
@@ -172,7 +172,7 @@ module Datadog
|
|
|
172
172
|
@entry = Entry.new # Empty entry if no valid cgroup entry is found
|
|
173
173
|
rescue => e
|
|
174
174
|
Datadog.logger.debug(
|
|
175
|
-
"Error while reading container entry. Cause: #{e.class}: #{e} Location: #{Array(e.backtrace).first}"
|
|
175
|
+
"Error while reading container entry. Cause: #{e.class}: #{e.message} Location: #{Array(e.backtrace).first}"
|
|
176
176
|
)
|
|
177
177
|
@entry = Entry.new unless defined?(@entry)
|
|
178
178
|
@entry
|
|
@@ -18,6 +18,19 @@ module Datadog
|
|
|
18
18
|
|
|
19
19
|
@hostname ||= ::Socket.gethostname.freeze
|
|
20
20
|
end
|
|
21
|
+
|
|
22
|
+
# Returns the resolved hostname when `report_hostname` is enabled:
|
|
23
|
+
# the configured DD_HOSTNAME if set, otherwise the system hostname.
|
|
24
|
+
# Returns nil when `report_hostname` is disabled or no hostname is available.
|
|
25
|
+
def resolved_hostname(settings)
|
|
26
|
+
return nil unless settings.tracing.report_hostname
|
|
27
|
+
|
|
28
|
+
configured = settings.hostname
|
|
29
|
+
return configured if configured && !configured.empty?
|
|
30
|
+
|
|
31
|
+
resolved_hostname = hostname
|
|
32
|
+
resolved_hostname if resolved_hostname && !resolved_hostname.empty?
|
|
33
|
+
end
|
|
21
34
|
end
|
|
22
35
|
end
|
|
23
36
|
end
|
|
@@ -37,7 +37,7 @@ module Datadog
|
|
|
37
37
|
# moved into C extension
|
|
38
38
|
@value = json?(value) ? JSON.parse(value) : value
|
|
39
39
|
rescue JSON::ParserError => e
|
|
40
|
-
raise Error, "Failed to parse JSON value: #{e.class}: #{e}"
|
|
40
|
+
raise Error, "Failed to parse JSON value: #{e.class}: #{e.message}"
|
|
41
41
|
end
|
|
42
42
|
|
|
43
43
|
# Check if the resolution resulted in an error
|
|
@@ -101,7 +101,7 @@ module Datadog
|
|
|
101
101
|
statsd.count(stat, value, metric_options(options))
|
|
102
102
|
rescue => e
|
|
103
103
|
logger.error(
|
|
104
|
-
"Failed to send count stat. Cause: #{e.class}: #{e} Source: #{Array(e.backtrace).first}"
|
|
104
|
+
"Failed to send count stat. Cause: #{e.class}: #{e.message} Source: #{Array(e.backtrace).first}"
|
|
105
105
|
)
|
|
106
106
|
telemetry.report(e, description: 'Failed to send count stat')
|
|
107
107
|
end
|
|
@@ -115,7 +115,7 @@ module Datadog
|
|
|
115
115
|
statsd.distribution(stat, value, metric_options(options))
|
|
116
116
|
rescue => e
|
|
117
117
|
logger.error(
|
|
118
|
-
"Failed to send distribution stat. Cause: #{e.class}: #{e} Source: #{Array(e.backtrace).first}"
|
|
118
|
+
"Failed to send distribution stat. Cause: #{e.class}: #{e.message} Source: #{Array(e.backtrace).first}"
|
|
119
119
|
)
|
|
120
120
|
telemetry.report(e, description: 'Failed to send distribution stat')
|
|
121
121
|
end
|
|
@@ -128,7 +128,7 @@ module Datadog
|
|
|
128
128
|
statsd.increment(stat, metric_options(options))
|
|
129
129
|
rescue => e
|
|
130
130
|
logger.error(
|
|
131
|
-
"Failed to send increment stat. Cause: #{e.class}: #{e} Source: #{Array(e.backtrace).first}"
|
|
131
|
+
"Failed to send increment stat. Cause: #{e.class}: #{e.message} Source: #{Array(e.backtrace).first}"
|
|
132
132
|
)
|
|
133
133
|
telemetry.report(e, description: 'Failed to send increment stat')
|
|
134
134
|
end
|
|
@@ -142,7 +142,7 @@ module Datadog
|
|
|
142
142
|
statsd.gauge(stat, value, metric_options(options))
|
|
143
143
|
rescue => e
|
|
144
144
|
logger.error(
|
|
145
|
-
"Failed to send gauge stat. Cause: #{e.class}: #{e} Source: #{Array(e.backtrace).first}"
|
|
145
|
+
"Failed to send gauge stat. Cause: #{e.class}: #{e.message} Source: #{Array(e.backtrace).first}"
|
|
146
146
|
)
|
|
147
147
|
telemetry.report(e, description: 'Failed to send gauge stat')
|
|
148
148
|
end
|
|
@@ -162,7 +162,7 @@ module Datadog
|
|
|
162
162
|
rescue => e
|
|
163
163
|
# TODO: Likely to be redundant, since `distribution` handles its own errors.
|
|
164
164
|
logger.error(
|
|
165
|
-
"Failed to send time stat. Cause: #{e.class}: #{e} Source: #{Array(e.backtrace).first}"
|
|
165
|
+
"Failed to send time stat. Cause: #{e.class}: #{e.message} Source: #{Array(e.backtrace).first}"
|
|
166
166
|
)
|
|
167
167
|
telemetry.report(e, description: 'Failed to send time stat')
|
|
168
168
|
end
|
|
@@ -57,7 +57,7 @@ module Datadog
|
|
|
57
57
|
|
|
58
58
|
contents = Configuration::ContentList.parse(response.target_files)
|
|
59
59
|
rescue Remote::Configuration::Path::ParseError => e
|
|
60
|
-
raise SyncError, e.message
|
|
60
|
+
raise SyncError, "#{e.class}: #{e.message}"
|
|
61
61
|
end
|
|
62
62
|
|
|
63
63
|
# To make sure steep does not complain
|
|
@@ -45,7 +45,7 @@ module Datadog
|
|
|
45
45
|
rescue Client::SyncError => e
|
|
46
46
|
# Transient errors due to network or agent. Logged the error but not via telemetry
|
|
47
47
|
logger.error do
|
|
48
|
-
"remote worker client sync error: #{e.class}: #{e} location: #{Array(e.backtrace).first}. skipping sync"
|
|
48
|
+
"remote worker client sync error: #{e.class}: #{e.message} location: #{Array(e.backtrace).first}. skipping sync"
|
|
49
49
|
end
|
|
50
50
|
rescue => e
|
|
51
51
|
# In case of unexpected errors, reset the negotiation object
|
|
@@ -55,7 +55,7 @@ module Datadog
|
|
|
55
55
|
|
|
56
56
|
# Transient errors due to network or agent. Logged the error but not via telemetry
|
|
57
57
|
logger.error do
|
|
58
|
-
"remote worker error: #{e.class}: #{e} location: #{Array(e.backtrace).first}. " \
|
|
58
|
+
"remote worker error: #{e.class}: #{e.message} location: #{Array(e.backtrace).first}. " \
|
|
59
59
|
'resetting client state'
|
|
60
60
|
end
|
|
61
61
|
|
|
@@ -100,7 +100,7 @@ module Datadog
|
|
|
100
100
|
def try_flush
|
|
101
101
|
yield
|
|
102
102
|
rescue => e
|
|
103
|
-
Datadog.logger.warn("Error while sending runtime metric. Cause: #{e.class}: #{e}")
|
|
103
|
+
Datadog.logger.warn("Error while sending runtime metric. Cause: #{e.class}: #{e.message}")
|
|
104
104
|
end
|
|
105
105
|
|
|
106
106
|
def default_metric_options
|
|
@@ -39,7 +39,7 @@ module Datadog
|
|
|
39
39
|
res
|
|
40
40
|
rescue => e
|
|
41
41
|
logger.debug {
|
|
42
|
-
"Unable to send telemetry request for event `#{event.respond_to?(:type) ? event.type : event.to_s}`: #{e.class}: #{e}"
|
|
42
|
+
"Unable to send telemetry request for event `#{event.respond_to?(:type) ? event.type : event.to_s}`: #{e.class}: #{e.message}"
|
|
43
43
|
}
|
|
44
44
|
Core::Transport::InternalErrorResponse.new(e)
|
|
45
45
|
end
|
|
@@ -260,9 +260,9 @@ module Datadog
|
|
|
260
260
|
end
|
|
261
261
|
|
|
262
262
|
def collect_integration_configuration_options(tracing_settings)
|
|
263
|
-
return [] unless tracing_settings.respond_to?(:
|
|
263
|
+
return [] unless tracing_settings.respond_to?(:instrumented_built_in_integrations)
|
|
264
264
|
|
|
265
|
-
tracing_settings.
|
|
265
|
+
tracing_settings.instrumented_built_in_integrations.each_with_object([]) do |integration, entries|
|
|
266
266
|
integration.configurations.each_value do |configuration|
|
|
267
267
|
entries.concat(collect_configuration_options_from(configuration))
|
|
268
268
|
end
|
|
@@ -4,6 +4,8 @@ require_relative 'http/builder'
|
|
|
4
4
|
require_relative 'http/adapters/net'
|
|
5
5
|
require_relative 'http/adapters/unix_socket'
|
|
6
6
|
require_relative 'http/adapters/test'
|
|
7
|
+
require_relative '../environment/container'
|
|
8
|
+
require_relative '../environment/ext'
|
|
7
9
|
|
|
8
10
|
module Datadog
|
|
9
11
|
module Core
|
data/lib/datadog/core/utils.rb
CHANGED
|
@@ -168,7 +168,7 @@ module Datadog
|
|
|
168
168
|
rescue Exception => e
|
|
169
169
|
@error = e
|
|
170
170
|
Datadog.logger.debug(
|
|
171
|
-
"Worker thread error. Cause: #{e.class}: #{e} Location: #{Array(e.backtrace).first}"
|
|
171
|
+
"Worker thread error. Cause: #{e.class}: #{e.message} Location: #{Array(e.backtrace).first}"
|
|
172
172
|
)
|
|
173
173
|
raise
|
|
174
174
|
|
data/lib/datadog/core.rb
CHANGED
|
@@ -1,11 +1,50 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require_relative '
|
|
3
|
+
require_relative '../core/environment/variable_helpers'
|
|
4
|
+
require_relative 'ext'
|
|
4
5
|
|
|
5
6
|
module Datadog
|
|
6
7
|
module DataStreams
|
|
7
8
|
# Configuration for Data Streams Monitoring
|
|
8
9
|
module Configuration
|
|
10
|
+
# Configuration settings for Data Streams Monitoring.
|
|
11
|
+
module Settings
|
|
12
|
+
def self.extended(base)
|
|
13
|
+
base = base.singleton_class unless base.is_a?(Class)
|
|
14
|
+
add_settings!(base)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def self.add_settings!(base)
|
|
18
|
+
base.class_eval do
|
|
19
|
+
# Data Streams Monitoring configuration
|
|
20
|
+
# @public_api
|
|
21
|
+
settings :data_streams do
|
|
22
|
+
# Whether Data Streams Monitoring is enabled. When enabled, the library will
|
|
23
|
+
# collect and report data lineage information for messaging systems.
|
|
24
|
+
#
|
|
25
|
+
# @default `DD_DATA_STREAMS_ENABLED` environment variable, otherwise `false`.
|
|
26
|
+
# @return [Boolean]
|
|
27
|
+
option :enabled do |o|
|
|
28
|
+
o.type :bool
|
|
29
|
+
o.env Ext::ENV_ENABLED
|
|
30
|
+
o.default false
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
# The interval (in seconds) at which Data Streams Monitoring stats are flushed.
|
|
34
|
+
#
|
|
35
|
+
# @default 10.0
|
|
36
|
+
# @env '_DD_TRACE_STATS_WRITER_INTERVAL'
|
|
37
|
+
# @return [Float]
|
|
38
|
+
# @!visibility private
|
|
39
|
+
option :interval do |o|
|
|
40
|
+
o.type :float
|
|
41
|
+
o.env '_DD_TRACE_STATS_WRITER_INTERVAL'
|
|
42
|
+
o.default 10.0
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
9
48
|
end
|
|
10
49
|
end
|
|
11
50
|
end
|
|
@@ -46,7 +46,7 @@ module Datadog
|
|
|
46
46
|
decode(binary_data)
|
|
47
47
|
rescue ArgumentError => e
|
|
48
48
|
# Invalid base64 encoding - may indicate version mismatch or corruption
|
|
49
|
-
Datadog.logger.debug { "Failed to decode DSM pathway context: #{e.class}: #{e}" }
|
|
49
|
+
Datadog.logger.debug { "Failed to decode DSM pathway context: #{e.class}: #{e.message}" }
|
|
50
50
|
nil
|
|
51
51
|
end
|
|
52
52
|
end
|
|
@@ -329,7 +329,7 @@ module Datadog
|
|
|
329
329
|
# Send to agent outside mutex to avoid blocking customer code if agent is slow/hung.
|
|
330
330
|
send_stats_to_agent(payload)
|
|
331
331
|
rescue => e
|
|
332
|
-
@logger.debug("Failed to flush DSM stats to agent: #{e.class}: #{e}")
|
|
332
|
+
@logger.debug("Failed to flush DSM stats to agent: #{e.class}: #{e.message}")
|
|
333
333
|
end
|
|
334
334
|
|
|
335
335
|
def get_current_pathway
|
data/lib/datadog/data_streams.rb
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
require_relative 'data_streams/processor'
|
|
4
4
|
require_relative 'data_streams/pathway_context'
|
|
5
|
-
require_relative 'data_streams/configuration
|
|
5
|
+
require_relative 'data_streams/configuration'
|
|
6
6
|
require_relative 'data_streams/extensions'
|
|
7
7
|
require_relative 'core/utils/time'
|
|
8
8
|
|
data/lib/datadog/di/base.rb
CHANGED
|
@@ -17,6 +17,10 @@ module Datadog
|
|
|
17
17
|
module DI
|
|
18
18
|
LOCK = Mutex.new
|
|
19
19
|
|
|
20
|
+
# Initialized eagerly to avoid "instance variable not initialized"
|
|
21
|
+
# warning on Ruby 2.6/2.7 and to simplify the type to non-nullable.
|
|
22
|
+
@current_components = []
|
|
23
|
+
|
|
20
24
|
class << self
|
|
21
25
|
attr_reader :code_tracker
|
|
22
26
|
|
|
@@ -48,12 +52,12 @@ module Datadog
|
|
|
48
52
|
Datadog::DI.activate_tracking!
|
|
49
53
|
rescue => exc
|
|
50
54
|
if defined?(Datadog.logger)
|
|
51
|
-
Datadog.logger.warn { "di: Failed to activate code tracking for DI: #{exc.class}: #{exc}" }
|
|
55
|
+
Datadog.logger.warn { "di: Failed to activate code tracking for DI: #{exc.class}: #{exc.message}" }
|
|
52
56
|
else
|
|
53
57
|
# We do not have Datadog logger potentially because DI code tracker is
|
|
54
58
|
# being loaded early in application boot process and the rest of datadog
|
|
55
59
|
# wasn't loaded yet. Output to standard error.
|
|
56
|
-
warn("datadog: di: Failed to activate code tracking for DI: #{exc.class}: #{exc}")
|
|
60
|
+
warn("datadog: di: Failed to activate code tracking for DI: #{exc.class}: #{exc.message}")
|
|
57
61
|
end
|
|
58
62
|
end
|
|
59
63
|
end
|
|
@@ -88,7 +92,7 @@ module Datadog
|
|
|
88
92
|
# Datadog.components from the code tracker.
|
|
89
93
|
def current_component
|
|
90
94
|
LOCK.synchronize do
|
|
91
|
-
@current_components
|
|
95
|
+
@current_components.last
|
|
92
96
|
end
|
|
93
97
|
end
|
|
94
98
|
|
|
@@ -100,14 +104,13 @@ module Datadog
|
|
|
100
104
|
# guaranteed to not end up with no component when one is running.
|
|
101
105
|
def add_current_component(component)
|
|
102
106
|
LOCK.synchronize do
|
|
103
|
-
@current_components ||= []
|
|
104
107
|
@current_components << component
|
|
105
108
|
end
|
|
106
109
|
end
|
|
107
110
|
|
|
108
111
|
def remove_current_component(component)
|
|
109
112
|
LOCK.synchronize do
|
|
110
|
-
@current_components
|
|
113
|
+
@current_components.delete(component)
|
|
111
114
|
end
|
|
112
115
|
end
|
|
113
116
|
end
|