Estimated end-of-life date, accurate to within three months: 05-2027
See the support level definitions for more information.
Upgrade Notes
- openfeature
- Reports strings, numbers, booleans, datetimes, and null values from evaluation context; unsupported values are no longer converted to strings and are omitted without affecting flag resolution.
- AAP
- Upgrades libddwaf to version 2.1.0.
- LLM Observability
- The
pydantic_aiintegration now reports agent configuration using the shared agent manifest schema.framework,name,model,model_settings,instructions,system_promptsandtoolskeep their names and meaning. New keys aremetadata,extra_instructions,capabilities,data_contracts,memory_policies,guardrailsandagent_settings.
- The
- ASM
- Upgrades libddwaf to version 2.0.1.
New Features
- tracing
- Adds a
discardboolean field toDD_TRACE_SAMPLING_RULESrules to fully drop trace chunks which were rejected during sampling. See theDD_TRACE_SAMPLING_RULESconfiguration docs for details. - add consistent probability sampling support for distributed traces in mixed Datadog - OpenTelemetry environment
- Adds OpenTelemetry consistent probability sampling state (
ot.thandot.rv) to spans exported through OTLP whenOTEL_TRACES_EXPORTER=otlpis configured, allowing downstream collectors to preserve and extrapolate sampling decisions. - Runtime metrics now include CPython GC collection counts and stop-the-world pause time and max pause when
DD_RUNTIME_METRICS_ENABLEDis true. - Adds OpenTelemetry thread-context synchronization for applications using uvloop on Linux with Python 3.13 and earlier. It rides on the asyncio integration, is enabled by default, and can be disabled with
DD_TRACE_OTEL_CTX_ENABLED=falseorDD_TRACE_ASYNCIO_ENABLED=false. - Adds support for exporting Datadog trace metrics when OTLP trace export is enabled. Set
OTEL_TRACES_SPAN_METRICS_ENABLED=trueto enable it. - Adds support for
DD_TRACE_STATS_ADDITIONAL_TAGS, which adds configured span tags to native v0.6 trace stats and OTLP trace metrics. - Adds
Span.remove_tag(key)andSpan.remove_metric(key)for removing a previously set tag or metric from a span. Both are no-ops if the key is not set. - Adds
DD_AGENTLESS_ENABLED(defaultfalse), a single switch that submits all telemetry, traces, Remote Configuration, Dynamic Instrumentation, crash reports, Test Optimization and LLM Observability data directly to the Datadog intake instead of through a local Datadog Agent. It becomes the default for the per-product agentless settings, which can still be set individually to override it.DD_API_KEYis required when it is enabled. Note that tracer flares, runtime metrics and profiling are notably not supported in this mode. - Adds OpenTelemetry thread-context synchronization for applications using Python's built-in asyncio event loop on Linux with Python 3.13 and earlier. This is enabled by default and can be disabled with
DD_TRACE_OTEL_CTX_ENABLED=false. - When
DD_TRACE_OTEL_CTX_ENABLEDis true (the default), propagated trace contexts are published to OpenTelemetry thread context records. This lets external readers retain trace and span correlation when no active span object is available. - Adds Python 3.14+ support for keeping OpenTelemetry thread-context records synchronized across asynchronous context switches. This behavior is enabled by default and can be disabled by setting
DD_TRACE_OTEL_CTX_ENABLEDtofalse. - Adds the
DD_TRACE_PROPAGATION_AS_SPAN_LINKSenvironment variable, a comma-separated list of integration names (e.g.google_cloud_pubsub,kafka) for which propagated context is attached as span links instead of a parent-child relationship.
- Adds a
- LLM Observability
- botocore: The Amazon Bedrock integration now captures tool definitions, tool calls, and tool results on
InvokeModelspans for Anthropic models, matching theConverseAPI. - Adds finish_reason to LLM spans to indicate the reason the model stopped generating for the
openai,litellm, andanthropicintegrations. - APM spans for LLM and agent operations now carry
gen_ai.*attributes, so model, provider, application, conversation, and token usage can be searched, faceted, and monitored directly in APM. - The OpenAI Realtime integration now traces each conversation turn as a span tree instead of a single
llmspan. - The Anthropic integration now captures inline base64 image inputs on message requests as
image_partson LLM span messages, so they can be rendered in LLM Observability. Note: images referenced by a URL or a file ID are not captured, and a very large inline image is replaced with a text placeholder. - Datasets, experiments, and custom evaluator publishing no longer require
DD_APP_KEYon the application when a Datadog Agent is used. - Adds
LLMObs.list_experiments()to query experiments by logical name, metadata containment (e.g.{"tags": ["git.commit.sha:abc123"]}). Returns run status and aggregate data (evals, token costs, error rates), so CI/CD workflows can compare a run against a baseline commit and gate on the result. - Adds support for manually versioning agents. Pass
versionwhen starting an agent span, either withLLMObs.agent(name="my-agent", version="v3")or with the@agent(version="v3")decorator. For agents created by an auto-instrumented framework, useLLMObs.annotation_context(agent={"version": "v3"}). This sets theagent_versiontag on agent spans. Theagentargument accepts a plain dictionary or the newddtrace.llmobs.AgentTypedDict class. - The OpenAI integration now captures inline base64 images from message content as
image_partson LLM span messages, for both Chat Completions and the Responses API, so image inputs render in LLM Observability. This also applies to the OpenAI Agents SDK and to the LiteLLM integration, which share the same message extraction. Images referenced by a remote URL orfile_idare not fetched and keep their existing text reference. A single inline image whose base64 payload exceeds 4 MiB is left as an[image omitted: too large]marker instead. Note that this budget is per image, not per request: several inline images (or an image alongside inline audio) can still take a span event past the 5 MB per-event limit, at which point the event's input and output are replaced with a placeholder. To stop image bytes from being recorded, register a span processor withLLMObs.register_processorand remove theimage_partskey from the messages onspan.input. - Adds
LLMObs.submit_feedback()for submitting end-user feedback associated with a span, trace, session, or customer-defined feedback join key.
- botocore: The Amazon Bedrock integration now captures tool definitions, tool calls, and tool results on
- openfeature
- Limits the amount and nesting depth of evaluation context data reported with flag evaluations; data outside these limits is omitted without affecting flag resolution.
- Adds agentless delivery for the Feature Flagging and Experimentation (FFE) OpenFeature provider, loading Universal Flag Configuration directly from Datadog over HTTPS without requiring a Datadog Agent. Agentless is now the default source and requires
DD_API_KEY; setDD_FEATURE_FLAGS_CONFIGURATION_SOURCE=remote_configto keep loading configuration through the Datadog Agent's Remote Configuration. - Datadog now uses a serial id to attribute an exposure to the experiment or holdout that assigned the variant.
- CI visibility
- Adds
DD_CIVISIBILITY_DYNAMIC_ATR_ENABLEDto enable dynamic Auto Test Retries budgets based on test duration, instead of the flat per-test retry limit. Optionally configure the five duration-based budgets withDD_CIVISIBILITY_DYNAMIC_ATR_BUCKETS(five comma-separated integers in[1, 20]), corresponding to the Early Flake Detection duration buckets. - Adds a new
ci.pipeline.display_nametag for the Buildkite provider, populated from theBUILDKITE_PIPELINE_NAMEenvironment variable.
- Adds
- uWSGI
- added support for normal, non-lazy mode, provided threads are enabled and the py-call-uwsgi-fork-hooks option is set.
- anyio
- Adds native trace-context support for synchronous FastAPI handlers running in AnyIO worker threads on Linux. The integration is enabled by default and can be disabled with
DD_TRACE_ANYIO_ENABLED=false.
- Adds native trace-context support for synchronous FastAPI handlers running in AnyIO worker threads on Linux. The integration is enabled by default and can be disabled with
- kafka
- Adds support for
kafkain theDD_TRACE_PROPAGATION_AS_SPAN_LINKSenvironment variable. When enabled together with distributed tracing, thekafka.consumespan starts a new trace and relates to every consumed message's producer via span links, instead of continuing a single producer's trace. This is disabled by default.
- Adds support for
- profiling
DD_PROFILING_MEMORY_MEM_DOMAIN_ENABLEDnow defaults totrue, so the heap profiler also tracks allocations in the Mem domain on Python 3.12+.- This introduces inclusion of birth timestamp to allocation samples.
- Add experimental native (C/C++) heap profiling for Python processes on Linux (glibc only). Enabled with
DD_PROFILING_NATIVE_HEAP_ENABLED=true. - Time spent in garbage collection is now tracked by the profiler and appears in flame graphs. It can be enable with
DD_PROFILING_STACK_GC_ENABLED=true. - It is now possible to set a maximum number of asyncio tasks/greenlets to sample per cycle.
- AAP
- Adds the
build_pyoption--no-bundle-libddwaf, set through the[build_py]section ofsetup.cfg, which builds the package without a bundled libddwaf. The library is then loaded from the system at import time (libddwaf.so.2, thenlibddwaf.so, resolved by the dynamic linker, and required to be 2.x). Intended for Linux distribution packages; default builds bundle libddwaf as before. - Adds SSRF exploit prevention and OWASP API Top 10 security risk analysis for the
httpx2client.
- Adds the
- httpx2
- Adds automatic tracing for synchronous and asynchronous HTTP requests made with
httpx2>=2.0.0
- Adds automatic tracing for synchronous and asynchronous HTTP requests made with
- AI Guard
- Added a redaction feature, which can be enabled in the UI. For more info, see https://docs.datadoghq.com/security/ai_guard/setup/sdk/
- ASM
- Adds SQL injection attack detection and blocking for applications using the
aiomysql,aiopg,psycopgasync, and MySQL Connector/Python asyncio database drivers.
- Adds SQL injection attack detection and blocking for applications using the
- data streams monitoring
- This adds an optional
tagsargument toddtrace.data_streams.set_produce_checkpointandddtrace.data_streams.set_consume_checkpoint. Pass a list of"key:value"strings to attach additional edge tags to a manual checkpoint alongside the automatically settype,topic, anddirectiontags, for exampleset_produce_checkpoint("eventbridge", detail_type, carrier_set, tags=["exchange:my-bus"]). Existing calls that do not passtagsare unaffected.
- This adds an optional
- gevent
- Adds automatic synchronization of OpenTelemetry thread context when gevent switches between greenlets.
- opentelemetry
- OTLP trace export now supports the
http/protobufprotocol (the default) andhttp/json, selected via theOTEL_EXPORTER_OTLP_TRACES_PROTOCOLenvironment variable.
- OTLP trace export now supports the
Bug Fixes
- AAP
- Fixes an issue where exceptions raised by
urllib3requests include an Exploit Prevention frame in their traceback, which caused ordinary application errors to be misattributed to Datadog. Enablingurllib3APM tracing, which is off by default, still contributes a frame of its own. - Fixes a rare crash that can occur when rules are updated concurrently.
- Fixes an issue where memory usage grows over time when AAP is enabled for applications making traced outbound HTTP requests.
- Fixes an issue where setting
DD_APPSEC_RULESto an empty value prevents AppSec rules from being updated through remote configuration. - Fixes an issue where exploit prevention misses command injection attempts when
subprocesscommands are passed as tuples. - Fixes incorrect request fingerprints when a web application is wrapped by same-service tracing middleware.
- Fixes an issue where exceptions raised by
- crashtracking
- fix crash reports being sent to the wrong intake when
DD_AGENTLESS_ENABLEDis set. The errors-intake upload was incorrectly reusing the same endpoint configured for the telemetry crash-report path, sending it to the telemetry intake host instead of the dedicated errors-intake host. - Strips the bootstrap directory from the inherited PYTHONPATH before spawning the receiver, so it stays an uninstrumented script. Empty PYTHONPATH entries (the current working directory) are preserved so the receiver can still import ddtrace when it is loaded from the working directory.
- fix crash reports being sent to the wrong intake when
- LLM Observability
- botocore: This fix resolves an issue where the Amazon Bedrock
InvokeModelintegration only captured the first content block of an Anthropic response, so output messages were empty or truncated when a response began with atool_useorthinkingblock. - Fixes an issue where span and evaluation metric events can be lost when intake temporarily returns a server error.
- Fixes an issue where enabling LLM Observability together with
DD_APM_TRACING_ENABLED=falsediscarded every trace, so AI Guard, App and API Protection, Code Security and Software Composition Analysis reported no spans while running in standalone mode. These traces are now sent, and APM billing stays opted out. - This fix resolves an issue where reasoning content from streamed
google_genairesponses was merged into the output message instead of being captured as a separatereasoningmessage. - fixes an issue where
_DD_TRACE_WRITER_ADDITIONAL_HEADERSheader values containing a whitespace (for exampleBearer <token>) were incorrectly parsed, resulting in a truncated header value that caused LLM Observability spans to be dropped. - Fixes an issue where token counts were not captured properly on LLM spans generated via the Claude Agent SDK integration. The integration now reads the accurate per-turn token counts from the SDK's streaming events, leaving the caller's message stream unchanged. This also enables token counts on
claude-agent-sdkversions prior to 0.1.49, which do not report usage on the assistant message. Note that explicitly settinginclude_partial_messages=FalseonClaudeAgentOptionsopts out of this behavior and will result in inaccurate per-turn output token counts. - Fixes an issue where spans created under an auto-instrumented agent span (CrewAI, Google ADK, LangGraph, LlamaIndex, Amazon Bedrock Agents, Claude Agent SDK, and OpenAI Agents) were not attributed to that agent, leaving
agent_attributionmissing or pointing at the wrong ancestor. - Resolves a
TypeErrorraised during streamed tool-call reconstruction when an OpenAI-compatible backend (e.g. DashScope/Qwen) emits a tool-call delta withfunction.argumentsorcustom.inputset toNoneinstead of"". - Fixes missing Prompt Experimentation exposures when
DD_FEATURE_FLAGS_CONFIGURATION_SOURCEis set toagentlessorremote_config. - Fixes an issue where the agentless exporter dropped traces due to non-JSON-serializable objects being stored on a span. All LLM Observability span data is now made JSON-serializable before the span is submitted. Non-string span tag keys, span metric keys, and agent versions supplied via
LLMObs.annotate(agent=...)are also now coerced to strings. - Fixes an issue where an inline base64 image sent in message content to the OpenAI Responses API (including through the OpenAI Agents SDK) was recorded as the entire base64 data URL inside the message text, producing unreadable multi-megabyte span content.
- Fixes an issue where an inline base64 image passed as a reusable-prompt variable to the OpenAI Responses API was recorded as the entire base64 data URL on the span. Such a variable is now recorded as
[image]; remote URL andfile_idreferences are unchanged. - Fixes an issue where OpenAI Responses API image-generation results and computer-use screenshots were recorded as a stringified dump of the whole response item, which embedded the image's base64 payload in the output message. They are now recorded as an
[image]marker, or as the screenshot's URL when it is a remote reference. - Resolves an issue where the OpenAI and LiteLLM integrations reported zero cost for OpenRouter requests using a bring-your-own-key setup.
- botocore: This fix resolves an issue where the Amazon Bedrock
- CI Visibility
- Fixes an issue where the
pytestplugin entered a code coverage collection context around every test even when code coverage was disabled, which reported coverage as active while no coverage was being collected and, on Python 3.12 and later, restartedsys.monitoringevents once per test. - Fixes an issue where collecting coverage could abort the session with a
TypeError. - Fixes
ValueError: I/O operation on closed filelogging tracebacks at the end of pytest sessions when standard stream handlers point to streams closed by pytest. Tracer logs continue to reach healthy root handlers, including file output and log forwarding. - Fixes an issue where test events can be reported without their test session when running pytest-xdist with the legacy pytest plugin.
- Fixes an issue where code coverage collected for Intelligent Test Runner (ITR) included files from
site-packagesordist-packagesdirectories. - fix the session status being reported as
passinstead offailwhen pytest exits with a non-OK, non-NO_TESTS_COLLECTEDexit code (e.g. collection errors, interruptions, internal errors). - Fixes an issue where test sessions running with pytest-xdist on shallow Git checkouts can spend excessive time unshallowing the repository and may fail or time out during collection.
- Fixes an issue where the
- botocore
- EventBridge
PutEventsnow propagates Data Streams Monitoring (DSM) context whenDD_DATA_STREAMS_ENABLEDis enabled. - This fix resolves an issue where LLM Observability spans for Bedrock
invoke_model_with_response_streamcalls reported all token usage metrics as0. Token counts are now extracted from the streamed response and set on the span.
- EventBridge
- AI Guard
- Fixes an issue where transport and unexpected internal evaluation failures were reported as
client_error, making them difficult to diagnose.
- Fixes an issue where transport and unexpected internal evaluation failures were reported as
- ASM
- Fixes an issue where Exploit Prevention does not evaluate SSRF rules for calls to
webbrowser.open, or for calls tourllib.request.urlopenthat pass the URL positionally or go through a custom opener installed withurllib.request.install_opener. - Fixes an issue where exceptions raised by
urllib.request.urlopenandhttp.clientrequests include an internal Datadog frame in their traceback when Exploit Prevention is enabled, which caused ordinary application errors to be misattributed to the tracer. - Fixes an issue where exceptions raised by
open()orpathlib.Path.open()are reported with a corrupted traceback when Exploit Prevention is enabled, showing a duplicated caller frame and omitting the frame that actually raised.
- Fixes an issue where Exploit Prevention does not evaluate SSRF rules for calls to
- opentelemetry
- Fixes an issue where empty
OTEL_*environment variables override ddtrace defaults instead of being treated as unset.
- Fixes an issue where empty
- httplib
- Fixes an issue where an outgoing request blocked by Exploit Prevention leaves the
http.client.requestspan unfinished and active, so it is never sent and every later span on that thread is parented to it.
- Fixes an issue where an outgoing request blocked by Exploit Prevention leaves the
- internal
- Fixes a memory leak that causes memory usage to grow over time in long-running processes, when instrumentation applied to a function fails while entering, returning from or unwinding that function. Each such call retained per-call state, and in some cases the frame of the instrumented function.
- Fixes race conditions after process forks that can cause telemetry recording to stall or background workers to restart incorrectly when multiple threads resume concurrently or forks are nested.
- Fixes an issue where Python-forked child processes can emit incorrect telemetry lifecycle events or block while cleaning up an inherited telemetry worker.
- Fixes an issue on Python 3.9 through 3.12.3 where applications can crash when background worker threads clean up thread-local or context-local data.
- A memory leak triggered when using
@tracer.wrapon functions created at run time has been fixed.
- mysql
- Fixes an issue where tracing and SQL-injection detection or blocking are skipped for database connections created with
mysql.connector.Connect().
- Fixes an issue where tracing and SQL-injection detection or blocking are skipped for database connections created with
- rq
- Fixes an issue where the
rq.worker.perform_jobspan was not created when jobs were processed byrq.SimpleWorkeron rq >= 2.7.
- Fixes an issue where the
- selenium
- Fixes a memory leak where memory usage grows over the lifetime of a browser test session, proportionally to the number of
WebDriver.get,WebDriver.quitandWebDriver.closecalls made.
- Fixes a memory leak where memory usage grows over the lifetime of a browser test session, proportionally to the number of
- tracing
- Fixes an issue where switching a product into standalone mode at runtime with
tracer.configure(apm_tracing_disabled=True)did not apply the standalone sampling settings, so traces were sent without the one trace per minute limit and without the_dd.apm.enabled=0metric that opts them out of APM billing. - Fixes an issue where the
datadog.runtime_idresource attribute on OTLP trace and trace-metrics exports was a randomly generated value instead of the tracer's runtime id, preventing those exports from being correlated with the other signals emitted by the same process. - Fixes an issue where untraced work in a reused thread-pool worker could expose stale OpenTelemetry trace context.
- Fixes an issue where APM Tracing remote configuration is not applied when the environment is configured only on the Datadog Agent.
- Fixed a memory leak in the HTTP client integrations (
aiohttp,httpx,requests,urllib3) where a strong reference to each response object was retained, preventing garbage collection of response bodies and causing linear RSS growth on sequential requests. - Fixes an issue where the sampling decision of an incoming distributed trace was discarded, reported as a propagation error on the local root span, and logged as a warning when the trace was sampled by a mechanism that is not known to this version of the library. Well-formed sampling decisions are now propagated unchanged.
- When
DD_TRACE_OTEL_SEMANTICS_ENABLED=true, HTTP client spans now use the HTTP method as their resource name. This keeps the resource name distinct from the operation name and adds method-level information that better aligns with OpenTelemetry semantics; default resource names are unchanged. - Fixes an issue where OpenTelemetry thread-context record publication could not be disabled on Linux. Publication can now be disabled by setting the experimental
DD_TRACE_OTEL_CTX_ENABLEDenvironment variable tofalse. - Fixes an issue where OTLP trace export failures report the Datadog Agent intake URL instead of the configured OTLP endpoint.
- Fixes an issue where
runtime.python.*metrics stopped carrying thedd.internal.entity_idtag after the first flush, even whenDD_ENTITY_IDwas set. This prevented the Datadog Agent from attachingpod_nameandkube_namespaceto runtime metrics in Kubernetes. - Fixes an issue where runtime metrics (memory RSS, thread count, CPU usage, context switches) reported the parent process's values instead of the current process's values after a fork, for example under a pre-fork server like gunicorn.
- Fixes an issue where applications using uWSGI can experience request stalls after worker processes start.
- Fixes an issue where the
v0.5trace API (DD_TRACE_API_VERSION=v0.5) drops traces when a single payload contains between 65,536 and 131,071 unique tag keys and values. - Fixes an issue where the Datadog environment is not set from the
deployment.environment.nameattribute inOTEL_RESOURCE_ATTRIBUTES. - Fixes an issue where _dd.svc_src was incorrectly set to either "m" or the name of the service
- Fixes an issue where switching a product into standalone mode at runtime with
- dynamic instrumentation
- Fixes an issue where Symbol Database uploads could be disabled in the first worker when multiple processes fork concurrently.
- telemetry
- Fixes an issue where an extra, redundant telemetry request was sent at process shutdown, adding avoidable latency to application teardown. The final telemetry payload is now sent as a single request.
- mcp
- Resolves an error logged when a module named
mcpis importable but is not the MCP SDK. Patching is now skipped instead of raising.
- Resolves an error logged when a module named
- profiling
- Stack collection now honors configured frame limits, reducing profiler CPU and memory overhead for deep Python call stacks.
- Fixes an issue where asyncio tasks can be duplicated in profiles on Python 3.14, causing inflated task counts and wall time and increased profiler CPU usage.
- Fixes an issue where asyncio task samples could be reported with the coroutine frames at the top of the stack and the calling frames duplicated underneath them.
- Fixes potential process memory growth when a stack profiling sampling cycle exits before completing a sample.
- Fixes potential process memory growth in asyncio and gevent workloads after stack profiling sampling cycles exit before completion.
- Fixes an issue where applications using uWSGI with
--lazy-appsand--skip-atexitcan crash while workers shut down on Python 3.12 or later. - Fixes an issue where untraced work is attributed to the endpoint of a previously finished trace on the same thread.
- Fast memory copy is now automatically disabled when Python is running as an embedded interpreter.
- A rare crash happening when using gevent has been fixed.
- Fixes an issue where child spans created from propagated tracing contexts can lose local-root and endpoint attribution when greenlets share a thread.
- anthropic
- Fixes an issue where spans were not exported when streamed responses were consumed using
get_final_message()orget_final_text().
- Fixes an issue where spans were not exported when streamed responses were consumed using
- code origin for spans
- fix a potential memory leak triggered by having code origin for span explicitly disabled via environment variables.
- prevent view or traced functions from raising an exception in situations where their number is large.
- django
- Fixes an issue (#19454) where Django processes that never serve HTTP requests, such as Celery and dramatiq workers, used substantially more memory and took longer to start. API endpoint discovery now runs when the WSGI or ASGI application is built rather than during
django.setup().
- Fixes an issue (#19454) where Django processes that never serve HTTP requests, such as Celery and dramatiq workers, used substantially more memory and took longer to start. API endpoint discovery now runs when the WSGI or ASGI application is built rather than during
- kombu
- This fix resolves an issue where messages published to the RabbitMQ default (unnamed) exchange were not linked to their consumers in the Data Streams Monitoring map.
- gevent
- Fixes an issue where running an application with
ddtrace-run(or single-step instrumentation) could raise aPydanticSchemaGenerationErrorat import time for models that use forward references, whengeventis installed and the application runs on CPython 3.14 or later. Theannotationlibmodule, which now owns theForwardRefclass on CPython 3.14, is preserved during module cloning so thatpydanticresolves forward references correctly. - Fixes an issue where context propagation bypasses a custom context provider configured on the tracer.
- Fixes an issue where running an application with
- google-adk
- Fixes an
AttributeErrorongoogle-adk >= 2.7.0caused by the removal of__call_tool_live. Applications with LLM Observability enabled failed to start. - Fixes an issue on
google-adk < 2.7.0where streaming tool call spans recorded no output.
- Fixes an
- Code Security (IAST)
- Fixes a
SystemErrorraised inside an instrumented request when an operation handled a container holding an object that cannot be hashed, such as the cookie objects Django builds inHttpResponse.set_cookie, and fixes the same error when a regular expression matched against abytearray. - Fixes a
NameErrorraised from application code that callseval()when thewraptC extension is unavailable and its pure-Python implementation is used, which caused Code Security to resolve the wrong caller scope.
- Fixes a
- openfeature
- This fix resolves an issue where replacing the feature flag configuration could leave a forked worker process (for example under
gunicornoruWSGI) with no configuration, so every subsequent flag evaluation returned the caller-provided default with thePROVIDER_NOT_READYerror code. - This fix resolves an issue where an invalid value for a numeric Feature Flagging environment variable raised an exception while importing
ddtrace.openfeature, preventing the application from starting. Such values are now logged and the documented default is used instead.
- This fix resolves an issue where replacing the feature flag configuration could leave a forked worker process (for example under
- otel
- Fixes an issue where OTLP gRPC exporter requests are incorrectly traced when OpenTelemetry logs or metrics collection is enabled with
opentelemetry-exporter-otlp-proto-grpc1.34.0 or later.
- Fixes an issue where OTLP gRPC exporter requests are incorrectly traced when OpenTelemetry logs or metrics collection is enabled with
- OpenTelemetry logs
- Fixes an issue where enabling OpenTelemetry logs collection (
DD_LOGS_OTEL_ENABLED=true) could cause the tracer to export its own internal log records, producing a growing volume of exported logs. The tracer's own log records and the OpenTelemetry exporter's log records are now excluded from OpenTelemetry logs export, while application logs continue to be collected and exported as before.
- Fixes an issue where enabling OpenTelemetry logs collection (
- pytorch
- Fix an issue where the
pytorch.rankspan could end too soon.
- Fix an issue where the
- requests
- Fixes an issue where distributed tracing context propagated on outbound
requestscalls pointed at the wrong span when theurllib3integration was also enabled (for example viaDD_TRACE_URLLIB3_ENABLED=true), causing those requests to be missing or show incorrect latency in downstream traces.
- Fixes an issue where distributed tracing context propagated on outbound
- snowflake
- Fixes an issue where traced cursor calls fail when
commandis passed as a keyword argument toexecuteorexecutemany.
- Fixes an issue where traced cursor calls fail when
- vllm
- Fixes an issue where the integration failed to instrument vLLM >= 0.14.0 with
ModuleNotFoundError: No module named 'vllm.v1.engine.processor', silently disabling all vLLM tracing and metrics.
- Fixes an issue where the integration failed to instrument vLLM >= 0.14.0 with
- Code Security
- Fixes an issue where applications could crash when asynchronous tasks accessed request data after the originating request completed.
Other Changes
- CI Visibility
- Reduces the cost of the source-location lookup the
pytestplugin performs once per test, which is most noticeable on large suites of fast tests.
- Reduces the cost of the source-location lookup the
- botocore
- Payload tagging redaction now uses
python-jsonpathin place of the vendoredjsonpath-ngandply, soddtraceno longer shipsply, which is unmaintained and reported by dependency scanners asCVE-2025-56005. Existing redaction paths continue to work.
- Payload tagging redaction now uses
Deprecation Notes
- tracing
- The
tracerparameter ofddtrace.runtime.RuntimeMetrics.enableis deprecated and will be removed in a future version. It has no effect.
- The
- google_cloud_pubsub
- The
DD_GOOGLE_CLOUD_PUBSUB_PROPAGATION_AS_SPAN_LINKSenvironment variable is deprecated and will be removed in a future release. Addgoogle_cloud_pubsubto theDD_TRACE_PROPAGATION_AS_SPAN_LINKSlist instead.
- The