Troubleshooting page load timing in Python

Problem

If you have problems instrumenting your New Relic Python app for page load timing, follow the standard troubleshooting procedures for browser monitoring. Here are some additional tips for Python.

Solution

Follow these recommendations to check content structure and verify that content compression is not interfering.

Check content structure.

If you are expecting to see page load timing instrumentation added automatically but do not, check whether any of these restrictions might apply.

  • The Content-Type for the HTML response must be text/html.
  • The Content-Encoding response header cannot be set.
  • The Content-Disposition response header cannot mark the response as an attachment.
  • The Content-Disposition specified in an http-equiv meta tag within the HTML<head> element cannot mark the response as an attachment.
  • The <body> element of the HTML response must appear within the first 64 kbytes.

If you are generating HTML page responses and using the Content-Type of application/xhtml+xml, you can override the allowed content types to list both this content type and text/html in your agent configuration file.

browser_monitoring.content_type = text/html application/xhtml+xml

Make sure the browser_monitoring.content_typeis a space-separated list of content types.

When adding application/xhtml+xml as an allowed content type for automatic instrumentation, be aware that the resulting page will no longer validate correctly as application/xhtml+xml, although the page should still be loaded and rendered correctly by browsers.

To resolve issues with the other content limitations, use manual instrumentation.

Verify that content compression is not interfering.

If you are using a WSGI or web framework middleware or a plugin that encodes the response content, such as when doing response compression, automatic instrumentation may not work. The Python agent provides specific support for Django GZipMiddleware and Flask-Compress with auto-instrumentation. However, currently this is not supported for paste.gzipper, because it contains a bug which makes it unusable in conjunction with the agent's WSGI middleware that adds the browser monitoring instrumentation.

If you encounter this problem, use manual instrumentation, or switch to using your web server or front-end proxy to compress the response content, rather than performing compression within your web application. The latter solution may also offer performance benefits.

For more help

Additional documentation resources include Manual page load timing instrumentation with Django (using template tags to instrument with Django).

Join the discussion about Python in the New Relic Online Technical Community! The Technical Community is a public platform to discuss and troubleshoot your New Relic toolset.

If you need additional help, get support at support.newrelic.com.