Elastic APM Python Agent release notes
Review the changes, fixes, and more in each version of Elastic APM Python Agent.
To check for security updates, go to Security announcements for the Elastic stack.
Release date: July 30, 2024
- Make published Docker images multi-platform with the addition of linux/arm64 #2080
- Fix handling consumer iteration if transaction not sampled in kafka instrumentation #2075
- Fix race condition with urllib3 at shutdown #2085
- Fix compatibility with setuptools>=72 that removed test command #2090
Release date: June 10, 2024
- Fix outcome in ASGI and Starlette apps on error status codes without an exception #2060
Release date: May 20, 2024
- Fix CI release workflow #2046
Release date: May 17, 2024
- Relax wrapt dependency to only exclude 1.15.0 #2005
Release date: April 3, 2024
- Add ability to override default JSON serialization #2018
Release date: March 19, 2024
- Fix urllib3 2.0.1+ crash with many args #2002
Release date: March 8, 2024
- Fix artifacts download in CI workflows #1996
Release date: March 7, 2024
- Fix artifacts upload in CI build-distribution workflow #1993
Release date: March 7, 2024
- Fix CI release workflow #1990
Release date: March 6, 2024
- Fix starlette middleware setup without client argument #1952
- Fix blocking of gRPC stream-to-stream requests #1967
- Always take into account body reading time for starlette requests #1970
- Make urllib3 transport tests more robust against local env #1969
- Clarify starlette integration documentation #1956
- Make dbapi2 query scanning for dollar quotes a bit more correct #1976
- Normalize headers in AWS Lambda integration on API Gateway v1 requests #1982
Release date: January 10, 2024
- Async support for dbapi2 (starting with psycopg) #1944
- Add object name to procedure call spans in dbapi2 #1938
- Add support for python 3.10 and 3.11 lambda runtimes
- Fix asyncpg support for 0.29+ #1935
- Fix dbapi2 signature extraction to handle square brackets in table name #1947
Release date: October 11, 2023
- Add Python 3.12 support
- Collect the
configured_hostname
anddetected_hostname
separately, and switch to FQDN for thedetected_hostname
. #1891 - Improve postgres dollar-quote detection to be much faster #1905
- Fix url argument fetching in aiohttp_client instrumentation #1890
- Fix a bug in the AWS Lambda instrumentation when
event["headers"] is None
#1907 - Fix a bug in AWS Lambda where metadata could be incomplete, causing validation errors with the APM Server #1914
- Fix a bug in AWS Lambda where sending the partial transaction would be recorded as an extra span #1914
Release date: July 25, 2023
- Add support for grpc aio server interceptor #1870
- Fix a bug in the Elasticsearch client instrumentation which was causing loss of database context (including statement) when interacting with Elastic Cloud #1878
Release date: July 3, 2023
- Add
server_ca_cert_file
option to provide custom CA certificate #1852 - Add
include_process_args
option to allow users to opt-in to collecting process args #1867
- Fix a bug in the GRPC instrumentation when reaching the maximum amount of spans per transaction #1861
Release date: June 12, 2023
- Fix compatibility issue with older versions of OpenSSL in lambda runtimes #1847
- Add
latest
tag to docker images #1848 - Fix issue with redacting
user:pass
in URLs in Python 3.11.4 #1850
Release date: June 6, 2023
- Fix release process for docker and the lambda layer #1845
Release date: June 5, 2023
- Add lambda layer for instrumenting AWS Lambda functions #1826
- Implement instrumentation of Azure Functions #1766
- Add support for Django to wrapper script #1780
- Add support for Starlette to wrapper script #1830
- Add
transport_json_serializer
configuration option #1777 - Add S3 bucket and key name to OTel attributes #1790
- Implement partial transaction support in AWS lambda #1784
- Add instrumentation for redis.asyncio #1807
- Add support for urllib3 v2.0.1+ #1822
- Add
service.environment
to log correlation #1833 - Add
ecs_logging
as a dependency #1840 - Add support for synchronous psycopg3 #1841
- Fix spans being dropped if they don’t have a name #1770
- Fix AWS Lambda support when
event
is not a dict #1775 - Fix deprecation warning with urllib3 2.0.0 pre-release versions #1778
- Fix
activation_method
to only send to APM server 8.7.1+ #1787 - Fix span.context.destination.service.resource for S3 spans to have an "s3/" prefix. #1783
Note: While this is considered a bugfix, it can potentially be a breaking change in the Kibana APM app: It can break the history of the S3-Spans / metrics for users relying on context.destination.service.resource
. If users happen to run agents both with and without this fix (for same or different languages), the same S3-buckets can appear twice in the service map (with and without s3-prefix).
- Fix instrumentation to not bubble up exceptions during instrumentation #1791
- Fix HTTP transport to not print useless and confusing stack trace #1809
Release date: March 6, 2023
- Fix issue with botocore instrumentation creating spans with an incorrect
service.name
#1765 - Fix a bug in the GRPC instrumentation when the agent is disabled or not recording #1761
Release date: February 16, 2023
- Add
service.agent.activation_method
to the metadata #1743
- Small fix to underlying Starlette logic to prevent duplicate Client objects #1735
- Change
server_url
default tohttp://127.0.0.1:8200
to avoid ipv6 ambiguity #1744 - Fix an issue in GRPC instrumentation with unsampled transactions #1740
- Fix error in async Elasticsearch instrumentation when spans are dropped #1758
Release date: January 30, 2023
- Fix an async issue with long elasticsearch queries #1725
- Fix a minor inconsistency with the W3C tracestate spec #1728
- Fix a cold start performance issue with our AWS Lambda integration #1727
- Mark
**kwargs
config usage in our AWS Lambda integration as deprecated #1727
Release date: November 17, 2022
- Fix error in Elasticsearch instrumentation when spans are dropped #1690
- Lower log level for errors in APM Server version fetching #1692
- Fix for missing parent.id when logging from a DroppedSpan under a leaf span #1695
Release date: November 3, 2022
- Fix elasticsearch instrumentation for track_total_hits=False #1687
Release date: October 26, 2022
- Add support for Python 3.11
- Add backend granularity data to SQL backends as well as Cassandra and pymongo #1585, #1639
- Add support for instrumenting the Elasticsearch 8 Python client #1642
- Add
*principal*
to defaultsanitize_field_names
configuration #1664 - Add docs and better support for custom metrics, including in AWS Lambda #1643
- Add support for capturing span links from AWS SQS in AWS Lambda #1662
- Fix Django’s
manage.py check
when agent is disabled #1632 - Fix an issue with long body truncation for Starlette #1635
- Fix an issue with transaction outcomes in Flask for uncaught exceptions #1637
- Fix Starlette instrumentation to make sure transaction information is still present during exception handling #1674
Release date: September 7, 2022
- Add redis query to context data for redis instrumentation #1406
- Add AWS request ID to all botocore spans (at
span.context.http.request.id
) #1625
- Differentiate Lambda URLs from API Gateway in AWS Lambda integration #1609
- Restrict the size of Django request bodies to prevent APM Server rejection #1610
- Restrict length of
exception.message
for exceptions captured by the agent #1619 - Restrict length of Starlette request bodies #1549
- Fix error when using elasticsearch(sniff_on_start=True) #1618
- Improve handling of ignored URLs and capture_body=off for Starlette #1549
- Fix possible error in the transport flush for Lambda functions #1628
Release date: August 9, 2022
- Added lambda support for ELB triggers #1605
Release date: August 9, 2022
- Fixed an issue with non-integer ports in Django #1590
- Fixed an issue with non-integer ports in Redis #1591
- Fixed a performance issue for local variable shortening via
varmap()
#1593 - Fixed
elasticapm.label()
when a Client object is not available #1596
Release date: June 30, 2022
- Fix an issue with Kafka instrumentation and unsampled transactions #1579
Release date: June 22, 2022
- Add instrumentation for
aiobotocore
#1520 - Add instrumentation for
kafka-python
#1555 - Add API for span links, and implement span link support for OpenTelemetry bridge #1562
- Add span links to SQS ReceiveMessage call #1575
- Add specific instrumentation for SQS delete/batch-delete #1567
- Add
trace_continuation_strategy
setting #1564
- Fix return for
opentelemetry.Span.is_recording()
#1530 - Fix error logging for bad SERVICE_NAME config #1546
- Do not instrument old versions of Tornado > 6.0 due to incompatibility #1566
- Fix transaction names for class based views in Django 4.0+ #1571
- Fix a problem with our logging handler failing to report internal errors in its emitter #1568
Release date: March 30, 2022
- Fix
otel_attributes
-related regression with older versions of APM Server (<7.16) #1510
Release date: March 29, 2022
- Add OpenTelemetry API bridge #1411
- Change default for
sanitize_field_names
to sanitize*auth*
instead ofauthorization
#1494 - Add
span_stack_trace_min_duration
to replace deprecatedspan_frames_min_duration
#1498 - Enable exact_match span compression by default #1504
- Allow parent celery tasks to specify the downstream
parent_span_id
in celery headers #1500
- Fix Sanic integration to properly respect the
capture_body
config #1485 - Lambda fixes to align with the cross-agent spec #1489
- Lambda fix for custom
service_name
#1493 - Change default for
stack_trace_limit
from 500 to 50 #1492 - Switch all duration handling to use
datetime.timedelta
objects #1488
Release date: March 9, 2022
- Fix
exit_span_min_duration
and disable by default #1483
Release date: February 22, 2022
- use "unknown-python-service" as default service name if no service name is configured #1438
- add transaction name to error objects #1441
- don’t send unsampled transactions to APM Server 8.0+ #1442
- implement snapshotting of certain configuration during transaction lifetime #1431
- propagate traceparent IDs via Celery #1371
- removed Python 2 compatibility shims #1463
Note: Python 2 support was already removed with version 6.0 of the agent, this now removes unused compatibilit shims.
- fix span compression for redis, mongodb, cassandra and memcached #1444
- fix recording of status_code for starlette #1466
- fix aioredis span context handling #1462
Release date: December 7, 2021
- fix AttributeError in sync instrumentation of httpx #1423
- add setting to disable span compression, default to disabled #1429
Release date: November 29, 2021
- fix an issue with Sanic exception tracking #1414
- asyncpg: Limit SQL queries in context data to 10000 characters #1416
Release date: November 17, 2021
- Add support for Sanic framework #1390
- fix compatibility issues with httpx 0.21 #1403
- fix
span_compression_exact_match_max_duration
default value #1407
Release date: November 15, 2021
- fix an issue with
metrics_sets
configuration referencing theTransactionMetricSet
removed in 6.6.2 #1397
Release date: November 10, 2021
- Fix an issue where compressed spans would count against
transaction_max_spans
#1377 - Make sure HTTP connections are not re-used after a process fork #1374
- Fix an issue with psycopg2 instrumentation when multiple hosts are defined #1386
- Update the
User-Agent
header to the new spec #1378 - Improve status_code handling in AWS Lambda integration #1382
- Fix
aiohttp
exception handling to allow for non-500 responses includingHTTPOk
#1384 - Force transaction names to strings #1389
- Remove unused
http.request.socket.encrypted
context field #1332 - Remove unused transaction metrics (APM Server handles these metrics instead) #1388
Release date: November 2, 2021
- Fix some context fields and metadata handling in AWS Lambda support #1368
Release date: October 18, 2021
- Add experimental support for AWS lambda instrumentation #1193
- Add support for span compression #1321
- Auto-infer destination resources for easier instrumentation of new resources #1359
- Add support for dropped span statistics #1327
- Ensure that Prometheus histograms are encoded correctly for APM Server #1354
- Remove problematic (and duplicate)
event.dataset
from logging integrations #1365 - Fix for memcache instrumentation when configured with a unix socket #1357
Release date: October 4, 2021
- Add instrumentation for Azure Storage (blob/table/fileshare) and Azure Queue #1316
- Improve span coverage for
asyncpg
#1328 - aiohttp: Correctly pass custom client to tracing middleware #1345
- Fixed an issue with httpx instrumentation #1337
- Fixed an issue with Django 4.0 removing a private method #1347
Release date: August 31, 2021
- Rename the experimental
log_ecs_formatting
config tolog_ecs_reformatting
#1300 - Add support for Prometheus histograms #1165
- Fixed cookie sanitization when Cookie is capitalized #1301
- Fix a bug with exception capturing for bad UUIDs #1304
- Fix potential errors in json serialization #1203
- Fix an issue with certain aioredis commands #1308
Release date: July 14, 2021
- ensure that the elasticsearch instrumentation handles DroppedSpans correctly #1190
Release date: July 7, 2021
- Fix handling of non-http scopes in Starlette/FastAPI middleware #1187
Release date: July 7, 2021
- Fix issue with Starlette/FastAPI hanging on startup #1185
Release date: July 6, 2021
- Add additional context information about elasticsearch client requests #1108
- Add
use_certifi
config option to allow users to disablecertifi
#1163
Release date: June 28, 2021
- suppress the default_app_config attribute in Django 3.2+ #1155
- bump log level for multiple set_client calls to WARNING #1164
- fix issue with adding disttracing to SQS messages when dropping spans #1170
Release date: June 7, 2021
- Fix an attribute access bug introduced in 6.2.0 #1149
Release date: June 3, 2021
- catch and log exceptions in interval timer threads #1145
Release date: May 31, 2021
- Added support for aioredis 1.x #2526
- Added support for aiomysql #1107
- Added Redis pub/sub instrumentation #1129
- Added specific instrumentation for AWS SQS #1123
- ensure metrics are flushed before agent shutdown #1139
- added safeguard for exceptions in processors #1138
- ensure sockets are closed which were opened for cloud environment detection #1134
Release date: April 28, 2021
- added destination information to asyncpg instrumentation #1115
- fixed issue with collecting request meta data with Django REST Framework #1117
- fixed httpx instrumentation for newly released httpx 0.18.0 #1118
Release date: April 14, 2021
- fixed issue with empty transaction name for the root route with Django #1095
- fixed on-the-fly initialisation of Flask apps #1099
Release date: April 8, 2021
- fixed a validation issue with the newly introduced instrumentation for S3, SNS and DynamoDB #1090
Release date: March 31, 2021
- Add global access to Client singleton object at
elasticapm.get_client()
#1043 - Add
log_ecs_formatting
config option #1058 #1063 - Add instrumentation for httplib2 #1031
- Add better instrumentation for some AWS services (S3, SNS, DynamoDB) #1054
- Added beta support for collecting metrics from prometheus_client #1083
- Fix for potential
capture_body: error
hang in Starlette/FastAPI #1038 - Fix a rare error around processing stack frames #1012
- Fix for Starlette/FastAPI to correctly capture request bodies as strings #1041
- Fix transaction names for Starlette Mount routes #1037
- Fix for elastic excepthook arguments #1050
- Fix issue with remote configuration when resetting config values #1068
- Use a label for the elasticapm Django app that is compatible with Django 3.2 validation #1064
- Fix an issue with undefined routes in Starlette #1076
Release date: February 1, 2021
- Fix for GraphQL span spamming from scalar fields with required flag #1015