Python agent and Stackato

Stackato is a private PaaS solution developed by ActiveState. The Python agent can be used in conjunction with Stackato by following the steps outlined below.

The instructions here require you to use at least version 0.6 of the Stackato VM image. If you use an older version of the Stackato VM image you will need to upgrade.

Package installation

ActiveState hosts a copy of the New Relic Python agent package in their PyPM package repository. To install the Python package for the New Relic agent, add newrelic into the requirements.txt file on a line by itself:

newrelic

You would then perform the update command using the Stackato client.

The PyPM package repository updates daily. If you need to use a newer version of the New Relic Python agent than is available from the PyPM package repository, you will instead need to fallback to using pip and source packages from PyPI.

In this case you will need to create in addition to the requirements.txt file used by PyPM, a requirements.pip file as input for pip. In the requirements.pip file you should list the newrelic package.

Agent configuration file

You will need to generate the Python agent configuration on your local system as described in Python agent installation and add that to the directory you push to your Stackato instance.

The option in the agent configuration file for specifying where the agent log file output should go, should be set to:

log_file = stderr

Python agent initialization

Although you can manually include code for initializing the New Relic Python agent into the Python module containing your WSGI application entry point, as per instructions for integration with your Python application, a simplified startup method is also available by using the newrelic-admin script.

In the case where you do it manually, such changes would typically be made to the wsgi.py file which includes your Python web application. Since the agent configuration file would be in the same directory, the change to the wsgi.py file would be to add:

import newrelic.agent
config_file = os.path.join(os.path.dirname(__file__), 'newrelic.ini')
newrelic.agent.initialize(config_file)

Because the directory in the filesystem where the application is installed can change, the location of the agent configuration is calculated relative to the location of the wsgi.py file automatically.

The alternative to adding code to perform initialization of the agent manually is to use the newrelic-admin script.

If you are explicitly defining in the stackato.yml file how to startup your web application by setting the web entry in the processes section:

processes:
    web: python app.py

You would replace web so it reads:

processes:
    web: newrelic-admin run-program python app.py

In other words, you are prefixing the existing command with newrelic-admin run-program.

At the same time, you should also add an env section to the stackato.yml file with:

env:
    NEW_RELIC_CONFIG_FILE: newrelic.ini

If you aren't overriding the web entry already and instead are relying on the default of the Stackato stack running uWSGI for you the process is a bit different. In this case you will need to add a web entry to stackato.yml as:

processes:
    web: newrelic-admin run-program $PROCESSES_WEB

The env section is also again required.

If PROCESSES_WEB is not defined and this does not work it indicates you are using an older VM image and should upgrade.

Whether the manual or more automated method is used, if necessary for the Python web framework being used, the WSGI application entry point object will also need to be wrapped appropriately.

For more help

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.