Notes
This release of the Python agent introduces distributed tracing, adds improvement to our Pyramid instrumentation, adds support for custom CA bundles, and contains bug fixes.
The agent can be installed using easy_install/pip/distribute via the Python Package Index or can be downloaded directly from the New Relic download site.
Features
Distributed tracing support
Distributed tracing lets you see the path that a request takes as it travels through your distributed system. By showing the distributed activity through a unified view, you can troubleshoot and understand a complex system better than ever before.
Distributed tracing is available with an APM Pro or equivalent subscription. To see a complete distributed trace, you need to enable the feature on a set of neighboring services. Enabling distributed tracing changes the behavior of some New Relic features, so carefully consult the transition guide before you enable this feature.
To enable distributed tracing, add
distributed_tracing.enabled = true
to your newrelic.ini file or use the environment variableNEW_RELIC_DISTRIBUTED_TRACING_ENABLED=true
.Add support for tracing Pyramid tweens
Pyramid tweens are now automatically timed and added to the transaction detail view. The time spent in a Pyramid tween will be displayed in the transaction breakdown table and in the trace details of a transaction trace.
Provide configuration option for custom CA bundle
Customers can now use the
ca_bundle_path
configuration option or set theNEW_RELIC_CA_BUNDLE_PATH
environment variable to set the path to a local CA bundle. This CA bundle will be used to validate the SSL certificate presented by New Relic's data collection service.
Bug Fixes
Custom Insights event data attached to transactions in excess of 100 events were omitted
The agent may have failed to send custom event data (record_custom_event) to insights when recorded as part of a Transaction containing over 100 custom events. This issue has now been corrected.
Notes
This release of the Python agent removes previously deprecated APIs, and removes support for Python 2.6 and Python 3.3.
The agent can be installed using easy_install/pip/distribute via the Python Package Index or can be downloaded directly from the New Relic download site.
Deprecations
Removed previously deprecated APIs
The following APIs have been removed:
- Transaction.add_user_attribute (use Transaction.add_custom_parameter)
- Transaction.add_user_attributes (use Transaction.add_custom_parameters)
- wrap_callable (use FunctionWrapper)
Removed support for Python 2.6 and Python 3.3
Python 2.6 and Python 3.3 are no longer supported. Please consider upgrading your application to a supported version of Python in order to continue to receive updates to the Python Agent.
Notes
This release of the Python agent adds support for Python 3.7 and contains various bug fixes.
The agent can be installed using easy_install/pip/distribute via the Python Package Index or can be downloaded directly from the New Relic download site.
New Features
Support Python 3.7
The New Relic Python Agent now supports Python 3.7.
Bug Fixes
Agent raises a KeyError: 'NEW_RELIC_ADMIN_COMMAND' exception causing a crash
Under certain conditions, using the newrelic-admin wrapper script could cause an application to crash shortly after startup with a KeyError exception. The cause of the crash has been addressed.
Agent raises an AttributeError on Python 3 when using WSGI overrides with multiple app names
When using WSGI environ overrides to specify multiple app names as described in the docs https://docs.newrelic.com/docs/agents/manage-apm-agents/app-naming/use-m... the agent will raise an AttributeError. This error has been corrected.
Agent raises an AttributeError exception under rare conditions when halting a trace
Under certain rare conditions, the agent might raise an exception when trying to trace an external call in a transaction that has been forcibly halted. The cause of the exception has been addressed.
Agent raises a RuntimeError exception under particular conditions when using the Tornado r3 instrumentation
When attempting to yield many times from a wrapped tornado.gen.coroutine when using Tornado's r3 instrumentation, a RuntimeError due to hitting the maximum recursion limit can occur. The cause of this exception has been patched.
Notes
This release of the Python agent contains various bug fixes.
The agent can be installed using easy_install/pip/distribute via the Python Package Index or can be downloaded directly from the New Relic download site.
Bug Fixes
Improved handling of celery max-tasks-per-child
Data recorded by the Python Agent may not have been reported when celery was operated with the max-tasks-per-child setting. All data is now reported independent of the max tasks per child setting.
Improve support for PyMongo v3.x
PyMongo v3 added many new methods on the
pymongo.Collection
object that did not exist in v2. These methods have now been instrumented. Calls to these methods will now appear in APM.Scheduling tasks that run after a transaction ends causes an error
Coroutines scheduled to execute after a transaction ends using create_task or ensure_future may have caused the runtime instrumentation error and subsequent crash:
The transaction already completed meaning a child called complete trace after the trace had been finalized.Coroutines that execute beyond the end of a transaction will no longer cause an error.
Notes
This release of the Python agent contains various bug fixes.
The agent can be installed using easy_install/pip/distribute via the Python Package Index or can be downloaded directly from the New Relic download site.
Bug Fixes
Do not run explain plans for psycopg2 connections using the
async_
kwargAs "async" is now a keyword in Python 3.7, psycopg2 now allows "async_" as an alias for its "async" kwarg for psycopg2.connect as of psycopg2 v2.7.4. Previously, explain plans were attempted for these connections and a traceback would be seen in the logs. This has now been fixed.
Fix traceback when using callbacks as partials in pika consumers
When passing a callback that is a functools partial to pika channel consumers, a traceback occurred in some instances. This issue has now been fixed.
cx_Oracle database calls that use SessionPool objects were not recorded
When using the cx_Oracle SessionPool interace, database transactions made through the acquired pool connection may not have been reported. Database transactions that using connections generated by SessionPool are now reported as expected.
SQL targets for call statements may contain a period
For a SQL command like
CALL foo.bar(:baz)
, APM would show metrics under the target namefoo
instead of the full namefoo.bar
. This has been fixed.
Notes
This release of the Python agent adds the request.uri attribute on transaction events in insights, adds built-in cheroot instrumentation, adds support for recording flask-restful/flask-restplus exceptions, and contains bug fixes.
The agent can be installed using easy_install/pip/distribute via the Python Package Index or can be downloaded directly from the New Relic download site.
Improved Features
Add request.uri attribute to transaction and error events
The Python agent will now report request.uri as an attribute on transaction events and error events. To disable this feature, add request.uri to the attributes.exclude list in the newrelic.ini configuration file.
Record Flask RESTful and Flask RestPlus exceptions
Since Flask RESTful and Flask RestPlus handle all errors that are raised in their handlers, these errors were not being captured by the normal Flask instrumentation in the Python agent. Exception handling has now been added for these two components.
Add instrumentation hooks for the Cheroot WSGI server
Any customers using Cheroot with an unsupported application framework will now see data reported in New Relic APM.
Bug Fixes
Fix CherryPy ignore by status code for exceptions using reason phrases
CherryPy accepts string values for HTTPError status (reason phrases). When creating HTTPError exceptions in this way, responses were not properly ignored by status code. Responses generated by HTTPError exceptions using reason phrases are now properly ignored.
Using send_file with Flask Compress middleware may have caused an application crash
When using browser monitoring auto instrumentation on an application using Flask Compress, the use of the Flask send_file helper to send html files resulted in an application crash. This issue has now been resolved.
Fix incorrect parenting for traces of coroutines scheduled with asyncio gather/ensure_future
Coroutines scheduled with asyncio gather/ensure_future may have been reported as being a child of the wrong function. This issue has now been corrected.
Notes
This release of the Python agent removes previously deprecated APIs, makes SSL communication with New Relic mandatory, and updates support for aiohttp middleware.
The agent can be installed using easy_install/pip/distribute via the Python Package Index or can be downloaded directly from the New Relic download site.
Deprecations
Removed previously deprecated APIs
The following APIs have been removed:
- transaction (use current_transaction)
- name_transaction (use set_transaction_name)
- Application.record_metric (use Application.record_custom_metric)
- Application.record_metrics (use Application.record_custom_metrics)
- Transaction.notice_error (use Transaction.record_exception)
- Transaction.record_metric (use Transaction.record_custom_metric)
- Transaction.name_transaction (use Transaction.set_transaction_name)
Deprecate Transaction.add_user_attribute
Transaction.add_user_attribute has been deprecated in favor of Transaction.add_custom_parameter. Transaction.add_user_attribute will be removed in a future release.
Deprecate Transaction.add_user_attributes
Transaction.add_user_attributes has been deprecated in favor of Transaction.add_custom_parameters. Transaction.add_user_attributes will be removed in a future release.
Deprecate wrap_callable
wrap_callable has been deprecated in favor of FunctionWrapper. wrap_callable will be removed in a future release.
Remove data-source admin command
The platform API (used by newrelic-admin data-source) has been removed. Please use data sources in place of the platform API.
SSL
SSL connections to New Relic are now mandatory
Prior to this version, using an SSL connection to New Relic was the default behavior. SSL connections are now enforced (not overrideable).
AIOHTTP Updates
Add automatic tracing of AIOHTTP 3 middleware
In addition to the old-style middleware previously supported, the AIOHTTP 3 style middleware is now automatically traced as part of the AIOHTTP instrumentation package.
Notes
This release of the Python agent includes a fix for security bulletin nr18-07.
The agent can be installed using easy_install/pip/distribute via the Python Package Index or can be downloaded directly from the New Relic download site.
Notes
This release of the Python agent adds support for AIOHTTP version 3.
The agent can be installed using easy_install/pip/distribute via the Python Package Index or can be downloaded directly from the New Relic download site.
Improved AIOHTTP Support
Support for AIOHTTP 3
AIOHTTP major version 3 is now supported by the New Relic Python agent.
Notes
This release of the Python agent adds a deprecation warning for customers that disable SSL, and adds bugfixes for supported async frameworks that use asyncio.
The agent can be installed using easy_install/pip/distribute via the Python Package Index or can be downloaded directly from the New Relic download site.
Mandatory SSL
Disabling SSL connections to New Relic has been deprecated
SSL connections are enabled by default. In a future release, the option to disable SSL will be removed.
Bug Fixes
Using asyncio.gather or asyncio.ensure_future now tracks transaction context
Prior to this release, using asyncio.gather or asyncio.ensure_future may result in certain traces (such as external calls) not being reported in the transaction. Traces scheduled with asyncio.gather or asyncio.ensure_future from within the context of a transaction should now be properly attributed to the transaction.