Prelude
Vulnerability Management for Code-level (IAST) is now available in private beta. Use the environment variable DD_IAST_ENABLED=True
to enable this feature.
New Features
- Adds the db.row_count tag to redis and other redis-like integrations. The tag represents the number of returned results.
- CI Visibility: adds test level visibility for unittest
- ASM: Adds detection of insecure cookie vulnerabilities on responses.
- ASM: This introduces trusted IPs capabilities in the tracer, to allow specific IPs not to be blocked by ASM but still be monitored.
- ASM: This introduces a new capability to configure the blocking response of ASM. Users can change the default blocking response behavior or create new custom actions. Configuration of a custom blocking page or payload can still be provided by using DD_APPSEC_HTTP_BLOCKED_TEMPLATE_JSON and DD_APPSEC_HTTP_BLOCKED_TEMPLATE_HTML to change the static files used for the response body. The action block, that can be defined in the static rule file or via remote configuration, allows now to create new custom blocking actions with any status code for the response.
- The aiopg and aiomysql integrations no longer set the sql.query tag on query spans. This tag duplicated the value captured by the span resource. Users who want to send this query unobfuscated can use the tracer API to set tags on the query span.
- data_streams: Starts tracking Kafka lag in seconds.
- kafka: Adds support for the Kafka serializing producer and deserializing consumer.
- profiling: allow individual collectors to be disabled.
- tracing: This change introduces the
allow_false
keyword argument toBaseSampler.sample()
, which defaults toTrue
.allow_false
controls the function's return value. Ifallow_false
isFalse
, the function will always returnTrue
regardless of the sampling decision it made. This is useful whensample
is called only for its side effects, which can include setting span tags.
Known Issues
- There are known issues configuring python's builtin multiprocessing library when ddtrace is installed. To use the multiprocessing library with ddtrace ensure
DD_UNLOAD_MODULES_FROM_SITECUSTOMIZE
is set toTrue
. - When running setup.py extensions with the CMake parameter "-j", it could potentially raise an out-of-memory error. If someone wants to expedite the ddtrace installation, they should manually set the "CMAKE_BUILD_PARALLEL_LEVEL" environment variable.
Bug Fixes
-
ASM: avoid potentially unneeded import of the IAST native module.
-
ASM: avoid potentially unneeded import of the IAST native module if setup doesn't build extensions correctly.
-
data_streams: This fix resolves an issue where data stream context propagation would not propagate via SNS if raw message delivery was enabled.
-
dynamic instrumentation: function duration measurements are now reported in milliseconds to match the expectation from the UI.
-
dynamic instrumentation: fixed an issue that prevented line probes from being injected in some finally blocks.
-
dynamic instrumentation: Fixed the programmatic API to ensure that the dynamic instrumentation service is fully enabled when
Dynamic Instrumentation.enable()
is called. -
dynamic instrumentation: fixed a bug that might have caused probe status to fail to update correctly.
-
django: This fix resolves an issue where 'span.resource' would not include the endpoint when a Handler was interrupted, such as in the case of gunicorn worker timeouts.
-
CI Visibility: fixes an issue where the Intelligent Test Runner would not work when in EVP proxy mode due to missing
X-Datadog-NeedsAppKey
header. -
CI Visibility: revert to using DD_CIVISIBILITY_ITR_ENABLED (instead of _DISABLED) to conform with other tracers.
-
profiling: fixed a bug that prevented profiles from being correctly correlated to traces in gevent-based applications, thus causing code hotspot and end point data to be missing from the UI.
-
docs: Fix undefined variable reference in otel documentation
-
CI Visibility: fixes that Python 2.7 test results were not visible in UI due to improperly msgpack-ed data
-
ASM: This fix resolves an issue where track_user_signup_event and track_custom_event where not correctly tagging the span. This could lead to the loss of some events in the sampling.
-
appsec: Fixes an issue where ddtrace.appsec is imported and assumed to be available in all deployments of ddtrace
-
lib-inject: This fix resolves an issue where
libdl.so.2: cannot open shared object file: No such file or directory
errors occurred when the
injection image started. -
lib-injection: Resolves permissions errors raised when ddtrace packages are copied from the InitContainer to the shared volume.
-
mariadb: This fix resolves an issue where MariaDB connection information objects not including the user or port caused exceptions to be raised.
-
appsec: This fix resolves an issue in which the library attempted to finalize twice a context object used by the Application Security Management product.
-
propagation: Prevent propagating unsupported non-ascii
origin
header values. -
pymongo: This upgrades the PyMongo integration to work with PyMongo versions 4.5.0 and above by choosing the root function of the integration on the basis of the PyMongo version.
-
tracing: This fix resolves an issue where the _dd.p.dm and _dd.*_psr tags were applied to spans in ways that did not match their intended semantics, increasing the potential for metrics-counting bugs.
-
ASM: This fix resolves issue where user information was only set in root span. Now span for user information can be selected.
-
sqlalchemy: sqlalchemy rollbacks could previously cause intermittent deadlocks in some cases. To fix this
DD_TRACE_SPAN_AGGREGATOR_RLOCK
was introduced in 1.16.2 with the default asFalse
. We are now changing the default toTrue
. -
kafka: Resolves an issue where traced kafka connections were assigned a default timeout of 1 second. The default timeout in
Consumer.poll(...)
should beNone
. -
openai: This fix resolves an issue where errors during streamed requests resulted in unfinished spans.
Other Changes
- Adds a get_version method to each integration and updates the basic template for developing an integration to include this method. The get_version method returns the integration's package distribution version and is to be included in the APM Telemetry integrations payload.
- Add a ddtrace_iast_flask_patch function defined in ddtrace.appsec.iast to ensure that the main Flask app.py file is patched for IAST propagation. This function should be called before the app.run() call. You only need this if you have set DD_IAST_ENABLED=1. Only the main file needs to call this functions, other imported modules are automatically patched.
- docs: Fixes formatting in ddtrace docs.
- ASM: Improve default value of regex for query string obfuscation. Rename env var
DD_TRACE_OBFUSCATION_QUERY_STRING_PATTERN
toDD_TRACE_OBFUSCATION_QUERY_STRING_REGEXP
.