Prelude
Initial library support has been added for Python 3.11. Continuous Profiler and Dynamic Instrumentation are not yet compatible and must be disabled in order to use the library with Python 3.11. Support for Continuous Profiler and Dynamic Instrumentation will be added in a future release. To track the status, see the Support Python 3.11 issue on GitHub.
Application Security Management (ASM) has added support for preventing attacks by blocking malicious IPs using one click within Datadog.
NOTE: One click activation for ASM is currently in beta.
Dynamic instrumentation allows instrumenting a running service dynamically to extract runtime information that could be useful for, e.g., debugging purposes, or to add extra metrics without having to make code changes and re-deploy the service. See https://ddtrace.readthedocs.io/en/stable/configuration.html for more details.
New Features
- ASM: add support for one click activation using Remote Configuration Management (RCM). Set
DD_REMOTE_CONFIGURATION_ENABLED=true
to enable this feature. - ASM: ip address collection will be enabled if not explicitly disabled and appsec is enabled.
- tracing: HTTP query string tagged by default in http.url tag (sensitive query strings will be obfuscated).
- Django: set
usr.id
tag by default ifrequest.user
is authenticated. - Introduced the public interface for the dynamic instrumentation service. See https://ddtrace.readthedocs.io/en/stable/configuration.html for more details.
- Add
Span.set_tag_str()
as an alternative to the overloaded functionality ofSpan.set_tag()
when the value can be coerced to unicode text. - Enable
telemetry <Instrumentation Telemetry>
collection when tracing is enabled. - ASM: now http.client_ip and network.client.ip will only be collected if ASM is enabled.
- tracer: added support for Python 3.11.
Upgrade Notes
- Pin attrs dependency to version
>=20
due to incompatibility with cattrs version22.1.0
. - Use
Span.set_tag_str()
instead ofSpan.set_tag()
when the tag value is a text type as a performance optimizations in manual instrumentation. - Python 3.11: Continuous Profiler and Dynamic Instrumentation must be disabled as they do not currently support Python 3.11.
Bug Fixes
- ASM: only report actor.ip on attack.
- aioredis: added exception handling for
CancelledError
in the aioredis integration. - CI Visibility: fixed AppVeyor integration not extracting the full commit message.
- Add iterable methods on TracedCursor. Previously these were not present and would cause iterable usage of cursors in DB API integrations to fail.
- Fix parsing of the
DD_TAGS
environment variable value to include support for values with colons (e.g. URLs). Also fixed the parsing of invalid tags that begin with a space (e.g.DD_TAGS=" key:val"
will now produce a tag with labelkey
, instead ofkey
, and valueval
). - opentracing: don't raise an exception when distributed tracing headers are not present when attempting to extract.
- sqlite3: fix error when using
connection.backup
method. - Change dependency from
backport_ipaddress
toipaddress
. Only installipaddress
for Python < 3.7. - gevent: disable gevent after fork hook which could result in a performance regression.
- profiling: restart automatically on all Python versions.
- profiling: fixes an issue with Gunicorn child processes not storing profiling events.
- wsgi: when using more than one nested wsgi traced middleware in the same app ensure wsgi spans have the correct parenting.
- Fix issue with
attrs
andcontextlib2
version constraints for Python 2.7. - tracing: make
ddtrace.context.Context
serializable which fixes distributed tracing across processes. - flask: add support for flask v2.3. Remove deprecated usages of
flask._app_ctx_stack
andflask._request_ctx_stack
. - CGroup file parsing was fixed to correctly parse container UUID for PCF containers.
- django: avoid
SynchronousOnlyOperation
when failing to retrieve user information.
Other Notes
- tracing: add http.route tag to root span for Flask framework.