• bugfix: Only import future for py2. PR343.

  • bugfix: Defensively copy context entities to async thread. PR340.

  • improvement: Added support for IGNORE_ERROR option when context is missing. PR338.


  • bugfix: Change logging behavior to avoid overflow. PR302.

  • improvement: Lazy load samplers to speed up cold start in lambda. PR312.

  • improvement: Replace slow json file name resolver. PR 306.


  • improvement: feat(sqla-core): Add support for rendering Database Specific queries. PR291.

  • bugfix: Fixing broken instrumentation for sqlalchemy >= 1.4.0. PR289.

  • feature: no op trace id generation. PR293.

  • bugfix: Handle exception when sending entity to Daemon. PR292.

  • bugfix: Fixed serialization issue when cause is a string. PR284.

  • improvement: Publish metric on distribution availability. PR279.


  • improvement: Only run integration tests on master. PR277.

  • improvement: Add distribution channel smoke test. PR276.

  • improvement: Replace jsonpickle with json to serialize entity. PR275.

  • bugfix: Always close segment in teardown_request handler. PR272.

  • improvement: Close segment in only _handle_exception in case of Internal Server Error. PR271.

  • bugfix: Handling condition where Entity.cause is not a dict. PR267.

  • improvement: Add ability to ignore some requests from httplib. PR263.

  • feature: Add support for SQLAlchemy Core. PR264.

  • improvement: Added always() to run clean up workflow. PR259.

  • improvement: Allow configuring different Sampler in Django App. PR252.

  • bugfix: Restore python2 compatibility of EC2 plugin. PR249.

  • bugfix: eb solution stack name. PR251.

  • improvement: Integration Test Workflow. PR246.

  • improvement: Include unicode type for annotation value. PR235.

  • improvement: Run tests against Django 3.1 instead of 1.11. PR240.

  • bugfix: Generalize error check for pymysql error type. PR239.

  • bugfix: SqlAlchemy: Close segment even if error was raised. PR234.


  • bugfix: asyncio.Task.current_task PendingDeprecation fix. PR217.

  • bugfix: Added proper TraceID in dummy segments. PR223.

  • improvement: Add testing for current Django versions. PR200.

  • improvement: IMDSv2 support for EC2 plugin. PR226.

  • improvement: Using instance doc to fetch EC2 metadata. Added 2 additional fields. PR227.

  • improvement: Added StaleBot. PR228.


  • bugfix: Downgrade Coverage to 4.5.4. PR197.

  • bugfix: Unwrap context provided to psycopg2.extensions.quote_ident. PR198.

  • feature: extension support as Bottle plugin. PR204.

  • bugfix: streaming_threshold not None check. PR205.

  • bugfix: Add support for Django 2.0 to 3.0. PR206.

  • bugfix: add puttracesegments to boto whitelist avoid a catch 22. PR210.

  • feature: Add patch support for pymysql. PR215.


  • bugfix: Downstream Http Calls should use hostname rather than full URL as subsegment name. PR192.

  • improvement: Whitelist SageMakerRuntime InvokeEndpoint operation. PR183.

  • bugfix: Fix patching for PynamoDB4 with botocore 1.13. PR181.

  • bugfix: Add X-Ray client with default empty credentials. PR180.

  • improvement: Faster implementation of Wildcard Matching. PR178.

  • bugfix: Make patch compatible with PynamoDB4. PR177.

  • bugfix: Fix unit tests for newer versions of psycopg2. PR163.

  • improvement: Enable tests with python 3.7. PR157.


  • bugfix: Fix exception processing in Django running in Lambda. PR145.

  • bugfix: Poller threads block main thread from exiting bug. PR144.


  • bugfix: Middlewares should create subsegments only when in the Lambda context running under a Lambda environment. PR139.


  • feature: Add ability to enable/disable the SDK. PR119.

  • feature: Add Serverless Framework Support PR127.

  • feature: Bring aiobotocore support back. PR125.

  • bugfix: Fix httplib invalid scheme detection for HTTPS. PR122.

  • bugfix: Max_trace_back = 0 returns full exception stack trace bug fix. PR123.

  • bugfix: Rename incorrect config module name to the correct global name. PR130.

  • bugfix: Correctly remove password component from SQLAlchemy URLs, preventing… PR132.


  • feature: Stream Django ORM SQL queries and add flag to toggle their streaming. PR111.

  • feature: Recursively patch any given module functions with capture. PR113.

  • feature: Add patch support for pg8000 (Pure Python Driver). PR115.

  • improvement: Remove the dependency on Requests. PR112.

  • bugfix: Fix psycop2 register type. PR95.


  • feature: Added context managers on segment/subsegment capture. PR97.

  • feature: Added AWS SNS topic ARN to the default whitelist file. PR93.

  • bugfix: Fixed an issue on psycopg2 to support all keywords. PR91.

  • bugfix: Fixed an issue on endSegment when there is context missing. ISSUE98.

  • bugfix: Fixed the package description rendered on PyPI. PR101.

  • bugfix: Fixed an issue where patch_all could patch the same module multiple times. ISSUE99.

  • bugfix: Fixed the datetime to epoch conversion on Windows OS. ISSUE103.

  • bugfix: Fixed a wrong segment json key where it should be sampling_rule_name rather than rule_name.


  • feature: Added support for psycopg2. PR83.

  • feature: Added support for pynamodb >= 3.3.1. PR88.

  • improvement: Improved stack trace recording when exception is thrown in decorators. PR70.

  • bugfix: Argument sampling_req in LocalSampler should_trace method now becomes optional. PR89.

  • bugfix: Fixed a wrong test setup and leftover poller threads in recorder unit test.


  • bugfix: Fixed a issue where manually begin_segment might break when making sampling decisions. PR82.


  • Breaking: The default sampler now launches background tasks to poll sampling rules from X-Ray backend. See the new default sampling strategy in more details here:

  • Breaking: The should_trace function in the sampler now takes a dictionary for sampling rule matching.

  • Breaking: The original sampling modules for local defined rules are moved from models.sampling to models.sampling.local.

  • Breaking: The default behavior of patch_all changed to selectively patches libraries to avoid double patching. You can use patch_all(double_patch=True) to force it to patch ALL supported libraries. See more details on ISSUE63

  • Breaking: The latest botocore that has new X-Ray service API GetSamplingRules and GetSamplingTargets are required.

  • Breaking: Version 2.x doesn’t support pynamodb and aiobotocore as it requires botocore >= 1.11.3 which isn’t currently supported by the pynamodb and aiobotocore libraries. Please continue to use version 1.x if you’re using pynamodb or aiobotocore until those haven been updated to use botocore > = 1.11.3.

  • feature: Environment variable AWS_XRAY_DAEMON_ADDRESS now takes an additional notation in tcp: udp: to set TCP and UDP destination separately. By default it assumes a X-Ray daemon listening to both UDP and TCP traffic on

  • feature: Added MongoDB python client support. PR65.

  • bugfix: Support binding connection in sqlalchemy as well as engine. PR78.

  • bugfix: Flask middleware safe request teardown. ISSUE75.


  • bugfix: Fixed an issue on PynamoDB patcher where the capture didn’t handle client timeout.


  • bugfix: Handle Aiohttp Exceptions as valid responses PR59.


  • feature: Added Sqlalchemy parameterized query capture. PR34

  • bugfix: Allow standalone sqlalchemy integrations without flask_sqlalchemy. PR53

  • bugfix: Give up aiohttp client tracing when there is no open segment and LOG_ERROR is configured. PR58

  • bugfix: Handle missing subsegment when rendering a Django template. PR54

  • Typo fixes on comments and docs.


  • Changed development status to 5 - Production/Stable and removed beta tag.

  • feature: Added S3 API parameters to the default whitelist.

  • feature: Added new recorder APIs to add annotations/metadata.

  • feature: The recorder now adds more runtime and version information to sampled segments.

  • feature: Django, Flask and Aiohttp middleware now inject trace header to response headers.

  • feature: Added a new API to configure maximum captured stack trace.

  • feature: Modularized subsegments streaming logic and now it can be overriden with custom implementation.

  • bugfix(Breaking): Subsegment set_user API is removed since this attribute is not supported by X-Ray back-end.

  • bugfix: Fixed an issue where arbitrary fields in trace header being dropped when calling downstream.

  • bugfix: Fixed a compatibility issue between botocore and httplib patcher. ISSUE48.

  • bugfix: Fixed a typo in sqlalchemy decorators. PR50.

  • Updated README with more usage examples.


  • feature: Support aiohttp client tracing for aiohttp 3.x. PR42.

  • feature: Use the official middleware pattern for Aiohttp ext. PR29.

  • bugfix: Aiohttp middleware serialized URL values incorrectly. PR37

  • bugfix: Don’t overwrite plugins list on each .configure call. PR38

  • bugfix: Do not swallow return_value when context is missing and LOG_ERROR is set. PR44

  • bugfix: Loose entity name validation. ISSUE36

  • bugfix: Fix PyPI project page being rendered incorrectly. ISSUE30


  • feature: Add support for SQLAlchemy and Flask-SQLAlcemy. PR14.

  • feature: Add support for PynamoDB calls to DynamoDB. PR13.

  • feature: Add support for httplib calls. PR19.

  • feature: Make streaming threshold configurable through public interface. ISSUE21.

  • bugfix: Drop invalid annotation keys and log a warning. PR22.

  • bugfix: Respect with statement on cursor objects in dbapi2 patcher. PR17.

  • bugfix: Don’t throw error from built in subsegment capture when LOG_ERROR is set. ISSUE4.


  • Breaking: AWS API parameter whitelist json file is moved to path aws_xray_sdk/ext/resources/aws_para_whitelist.json in PR6.

  • Added aiobotocore/aioboto3 support and async function capture. PR6

  • Added logic to removing segment/subsegment name invalid characters. PR9

  • Temporarily disabled tests run on Django2.0. PR10

  • Code cleanup. PR11


  • Added aiohttp support. PR3



  • bugfix: Fixed an issue that caused the X-Ray recorder to omit the origin when recording segments with a service plugin. This caused the service’s type to not appear on the service map in the X-Ray console.


  • bugfix: Fixed an issue that caused all calls to Amazon DynamoDB tables to be grouped under a single node in the service map. With this update, each table gets a separate node.


  • feature: Add Flask support

  • feature: Add dynamic naming on segment name


  • bugfix: The SDK has been released as a universal wheel