Parte de la culpa de que no escriba más post en el blog se debe a que en los últimos meses hemos producido bastantes productos basados en Django, y la administración y gestión de éstos nos está ocupando bastante tiempo.

Acostumbrado a entornos LAMP, el paso a mantener sistemas basados en python + nginx + postgreSQL + otros, está siendo cuanto menos interesante.

Uno de los elementos más comunes es saber qué está pasando en el entorno, adelantarse a posibles problemas, o poder depurar rápidamente los errores. Ahí es dónde entra Newrelic (http://newrelic.com/).

Las posibilidades son muchas, tiene tanto monitores para base de dato o servidores, pero en nuestro caso nos hemos centrado en monitorizar el entorno Django.

Te permite crear y configurar alertas ante fallos del sistema, te monitoriza todos los procesos, te permite ver en tiempo real los errores y trazas, te visualiza montones de variables del sistema. En definitiva por lo que hemos estado viendo está genial.

Aunque la documentación es bastante amplia, al principio se resistió un poco en la instalación por ello os dejo los pasos que he seguido en múltiples sistemas que comparte el mismo stack y configuración: Django (1.6 o 1.7), Supervisor, UWSG, Nginx, postgresSQL y Ubuntu.

Instalación newrelic Django + uwsgi

  • Lo primero registarte en (http://newrelic.com/) y crear una nueva aplicación APN, nos darán varios pasos a seguir.

  • Instalar el módulo para pythong. pip install newrelic

  • Crear el fichero de configuración de newrelic, yo lo creo en el directorio raíz del usuario que uso para lanzar el entorno de Django.
    newrelic-admin generate-config <Aquí_tu_license_key> newrelic.ini

  • Editamos el fichero de configuración de supervisor y modificamos la línea por esta otra.

command=uwsgi -b 32000 --ini /home/app/uwsgi.ini ## Eliminamos esta línea

command=newrelic-admin run-program /usr/local/bin/uwsgi -b 32000 --ini /home/app/uwsgi.ini
  • Modificamos el fichero, uwsgi.ini. Esto puede que no sea necesario pero en varias pruebas tuve que añadir estos valores para que funcionara.
threads=6
enable-threads = true
single-interpreter = true
lazy-apps = true

  • Por último hay que modificar en nuestra app de django el fichero wsgi.py, dejandolo como indico a continuación:
import newrelic.agent
import os

newrelic.agent.initialize('/home/app/newrelic.ini')

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "app.settings")

from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
application = newrelic.agent.wsgi_application()(application)
  • Finalmente se debe reiniciar supervisor, y en un par de minutos debemos empezar a ver datos en nuestro monitor de newrelic.

Agradecimientos: @jelukas89 que me ayudó bastante y stackoverflow.com (como siempre)