Django/NewRelic Quickstart (gunicorn.d + Django 1.3 hack)
New Relic has excellent documentation for downloading, installing and configuring their tools. Here are my crib notes:
view plainprint?
pip install newrelic django-newrelic-extensions
# sign up on newrelic.com, get $LICENSE_KEY under "Account Settings"
mkdir /etc/newrelic
newrelic-admin generate-config $LICENSE_KEY /etc/newrelic/newrelic.ini
newrelic-admin validate-config /etc/newrelic/newrelic.ini You should now be able to log in to new relic and see an application called "Python Agent Test". This means that the test worked; new relic can communicate with the hosted servers. You can run gunicorn manually from the command line with new relic as follows:
view plainprint?
cd /opt/my-django-project
export NEW_RELIC_CONFIG_FILE=/etc/newrelic/newrelic.ini
newrelic-admin run-program python manage.py run_gunicorn Notice that new relic replaces the python executable with its own command, "newrelic-admin run-program". I'm using Ubuntu, which uses the Debian gunicorn package, which stores its configuration in /etc/gunicorn.d/django. Here is my current config file:
view plainprint?
#/etc/gunicorn.d/django
CONFIG = {
'mode': 'django',
'working_dir': '/opt/my-django-project',
'user': 'django',
'group': 'django',
# stupid hack to get new relic to load in Django 1.3
# once we move to 1.4 we should use straight WSGI
'python': '/opt/my-django-project/conf/newrelic.sh',
'environment': {
'NEW_RELIC_CONFIG_FILE': '/etc/newrelic/newrelic.ini',
},
'args': (
'--bind=0.0.0.0:80',
'--workers=4',
'--backlog=0',
'--worker-class=sync', # gevent doesn't work smoothly with new relic yet
'--preload',
),
} Notice the hack to inject the new relic runner script. I have over-ridden the python executable path to point to a third script, newrelic.sh.
view plainprint?
#!/usr/bin/env bash
/usr/local/bin/newrelic-admin run-program python $* This script just takes whatever arguments are passed in ($*), and passes them as arguments to newrelic-admin. That's it, a service gunicorn restart should start data flowing into new relic.
(Note: Opinions expressed in this article and its replies are the opinions of their respective authors and not those of DZone, Inc.)





