Skip to main content

Python Flask uWSGI

Installation

Following are the steps to install the New Relic agent and connect it with CubeAPM. If New Relic agent is already installed, you can jump to step 5.

  1. Install dependencies:

    pip install newrelic
  2. (Optional) From lib/pythonx.xx/site-packages/newrelic, copy newrelic.ini into the root directory of your application.

  3. Configure the agent.

    [newrelic]
    app_name = <app_name>
    license_key = ABC4567890ABC4567890ABC4567890ABC4567890
  4. Add the highlighted lines below to your project's app.py file:

    app.py
    from flask import Flask
    import newrelic.agent
    app = Flask(__name__)
    newrelic.agent.initialize("newrelic.ini")
  5. Set up a proxy for New Relic agent.

    New Relic agent has a limitation: it only send data over HTTPS on port 443. However, CubeAPM receives data on port 3130 over HTTP. To bridge this gap, you need to set up a proxy (load balancer or HTTP reverse proxy) that:

    • Accepts HTTPS traffic on port 443 from the New Relic agent
    • Forwards this traffic to your CubeAPM server on port 3130 over HTTP

    For example, you can set up an AWS Application Load Balancer (ALB) with the following configuration:

    • Listener Configuration:

      • Protocol: HTTPS
      • Port: 443
      • Domain name: cubeapm-newrelic.yourdomain.com (example domain for your load balancer)
      • SSL/TLS Certificate: Certificate for cubeapm-newrelic.yourdomain.com or \*.yourdomain.com (from ACM or imported)
    • Target Group Configuration:

      • Protocol: HTTP
      • Port: 3130
      • Target: Your CubeAPM server IP or DNS name (e.g., cubeapm-server.yourdomain.com)
      • Health check path: /health
    • Security Groups:

      • Load Balancer Security Group:

        • Inbound rule: Allow HTTPS (port 443) from your application servers' IPs or security groups
        • Outbound rule: Allow HTTP (port 3130) to the CubeAPM server's IP or security group
      • CubeAPM Server Security Group:

        • Inbound rule: Allow HTTP (port 3130) from the load balancer's security group
        • Outbound rule: Allow all traffic (or as per your security requirements)

    The New Relic agent will connect to the load balancer's domain name (cubeapm-newrelic.yourdomain.com in this example), which will then forward the traffic to your CubeAPM server on port 3130.

    info

    For more details on proxy setup options, refer to the New Relic integration documentation.

  6. Tell the agent to connect with CubeAPM instead of New Relic:

    [newrelic]
    app_name = <app_name>
    license_key = ABC4567890ABC4567890ABC4567890ABC4567890
    # Use your load balancer\'s domain name here
    host = <cubeapm-newrelic.yourdomain.com>

Sample App

A working example is available at https://github.com/cubeapm/sample_app_python_flask_uwsgi/tree/newrelic

Troubleshooting

The following can be used for troubleshooting:

[newrelic]
# Print New Relic agent logs on screen
log_file = stdout
# Set New Relic agent log level to debug if needed to see detailed logs
log_level = debug