New Features
- propagation: 128-bit trace ids are now used by default for propagation. Previously the default was 64-bit. This change is backwards compatible with tracers that still use 64-bit trace ids and should not cause any breaking behavior.
- dsm: Adds DSM
pathway.hash
tag to spans when DSM is enabled. This allows traces from the instrumented service to show up in the DSM traces tab. - propagation: When the tracer is configured to extract and inject
tracecontext
, the tracer will propagate the tracestate values from other vendors so long as the traceparent trace-id matches the first found trace context, regardless of propagator configuration order. To disable this behaviorDD_TRACE_PROPAGATION_EXTRACT_FIRST=true
can be set. - opentelemetry: Map reserved OpenTelemetry attributes to Datadog span model.
- opentelemetry: datadog operation name from semantic conventions
- propagation: If a valid context is extracted from headers, and the following extracted trace context's
trace_id
s do not match the valid context's, then add a span link to the root span to represent the broken propagation. - tracing: This change treats spans that terminated with
sys.exit(0)
as successful non-error spans. - tracing: This introduces the
DD_TRACE_SPAN_TRACEBACK_MAX_SIZE
environment variable, allowing the maximum size of tracebacks included on spans to be configured.
Bug Fixes
-
CI Visibility: fixes the fact that the GITHUB_SERVER_URL environment variable was not being sanitized for credentials
-
dynamic instrumentation: Needs to update the pubsub instance when the application forks because the probe mechanism should run in the child process. For that, DI needs the callback as the method of an instance of Debugger, which lives in the child process.
-
CI Visibility: Fixes an issue where a
ValueError
was raised when using different path drives on Windows -
build: Fixes an issue where ddtrace could not be installed from source when using
setuptools>=69
due to a change in the license field. -
tracing: Fixes an issue where the thread responsible for sending traces is killed due to concurrent dictionary modification.
-
Vulnerability Management for Code-level (IAST): Generates cookies vulnerabilities report if IAST is enabled. Before this fix, Cookies vulnerabilities were only generated if both IAST and Appsec were enabled.
-
Vulnerability Management for Code-level (IAST): This fix resolves an issue where, at AST patching to replace code with IAST aspects, passing the original function/method as an extra parameter for accurate patching unintentionally triggers side effects in methods obtained from an expression (like
decode
infile.read(n).decode()
), resulting in unexpected multiple calls to the expression (file.read(n)
in the example). -
Vulnerability Management for Code-level (IAST): This fix eliminates some reference leaks and C-API usage when IAST reports a vulnerability and calls
get_info_frame
. -
kafka: This fix resolves an issue where calls to
confluent_kafka
'sproduce
method withkey=None
would cause an exception to be raised. -
tracing: This fix resolves an issue where ddtrace's signal handlers could cause Flask apps not to respond correctly to SIGINT.
-
lambda: This change disables the use of
multiprocessing.queue
in Lambda, because it is not supported in Lambda -
logging: A log handler is automatically added to the ddtrace logger upon ddtrace import, when not using ddtrace-run. This can lead to duplicate logging if users add additional loggers and do not explicitly modify the ddtrace logger. This fix adds a feature flag that can be used to toggle this behavior off
DD_TRACE_LOG_STREAM_HANDLER
which defaults totrue
. -
structlog: Fixes
TypeError
raised when ddtrace log processor is configured with a tuple