Install New Relic Python agent in GAE flexible environment

With New Relic APM's Python agent, you can monitor applications that reside in the Google App Engine (GAE) flexible environment. Adding New Relic to your GAE flex app gives you insight into the health and performance of your app and extends GAE with metrics you can view in New Relic APM, Browser, and Insights.

This document explains how to add New Relic to your GAE flex app using either of these methods:

Deploy using GAE's native support

When using Google App Engine "native mode" installation, you provide your app code and an app.yaml file. Google App Engine then deploys to a standard prebuilt Docker image.

For example, to deploy with native support for a Flask/Django app:

  1. Follow standard procedures to install New Relic's Python agent, including your license key.
  2. Set the NEW_RELIC_CONFIG_FILE as an environment variable pointing to newrelic.ini.

Once the agent and configuration file have been installed, New Relic's Python agent can automatically monitor applications that reside in the GAE flexible environment. Wait until the deployment completes, then view your GAE flex app data in the New Relic APM Overview page.

Build a custom runtime using Docker

See Google's documentation for building custom runtimes. This example describes how to add New Relic to your GAE flex app by building a custom runtime for Docker.

For more information about deploying and configuring your Node.js app in the GAE flexible environment, see:

1. Set up the GAE project and install dependencies

When building a custom runtime using Docker, set the NEW_RELIC_CONFIG_FILE as an environment variable pointing to the Dockerfile instead of to your Python app's newrelic.ini.

  1. Follow standard procedures to install New Relic's Python agent, including your license key.
  2. Follow Google App Engine procedures Python to create a Google Cloud Platform project, create an App Engine application, and complete other prerequisites for the Google Cloud SDK.

The Google Cloud SDK also provides the gcloud command line tool to manage and deploy GAE apps.

2. Configure your app.yaml

The app.yaml configuration file is required for a GAE flexible environment app with a custom runtime. At a minimum, make sure it contains:

env: flex
runtime: custom
3. Configure a Dockerfile

The Dockerfile defines the Docker image to be built and is required for a GAE flexible environment app. The following Dockerfile example shows the Python agent installed for an application served with gunicorn.

These procedures are similar to New Relic's Python quick start guide. The Dockerfile will contain customer-specific code, including Python version, installation requirements, etc).

# [START dockerfile]
FROM gcr.io/google_appengine/python

# Install the fortunes binary from the debian repositories.
RUN apt-get update && apt-get install -y fortunes

# Optional: Change the -p argument to use Python 2.7.
RUN virtualenv /env -p python3.4

# Set virtualenv environment variables. This is equivalent to running
# source /env/bin/activate.
ENV VIRTUAL_ENV /env
ENV PATH /env/bin:$PATH

ADD requirements.txt /app/
RUN pip install -r requirements.txt
ADD . /app/

CMD NEW_RELIC_CONFIG_FILE=newrelic.ini newrelic-admin run-program gunicorn -b :$PORT main:app
# [END dockerfile]

4. Deploy Docker image to initialized GAE flexible environment
  1. To deploy your Docker image to your initialized GAE flexible environment, run the following command:

    gcloud app deploy
  2. Wait until the deployment completes.
  3. To open the app in the browser, run the following command:

    gcloud app browse
  4. To view your GAE flex app data in New Relic, go to the New Relic APM Overview page.

Recommendation: Disable health checks

Google App Engine sends periodic health check requests to confirm that an instance has been successfully deployed, and to check that a running instance maintains a healthy status. A health check is an HTTP request to the URL /_ah/health.

If you create a custom runtime, your app must be able to handle a large number of health check requests. Otherwise, your app data may not display correctly in New Relic APM.

Recommendation: Configure your app.yaml to disable health checks by adding:

health_check:
  enable_health_check: False

Get New Relic agent troubleshooting logs from GAE

Use these resources to troubleshoot your GAE flex environment app:

For more help

Recommendations for learning more: