django

Мониторинг выполнения management команд в Django

  • воскресенье, 18 мая 2014 г. в 03:10:31
http://habrahabr.ru/post/223151/

Часто и во многих проектах, используются фоновые задачи. Но в подавляющем большинстве, по какой-то причине не используется никакого мониторинга. Речь идет о таких сервисах как Sentry, NewRelic или же нативный ErrorReporting. Нет никаких отчетов о том, как долго выполняется команда, с какой ошибкой и каким образом был завершен процесс. В итоге никто не знает на сколько корректно работает проект и недоумевают, когда в репортах или в crm не хватает каких-либо данных, или же статистика неполная/неверная. Заметно это не всегда и отнюдь не сразу. То есть обнаруживается на много позже, после сдачи проекта.

Джуниоры, не всегда знают о сервисах и их существовании. Но не смотря на это, надобность в инструменте для логирования подобных вещей не отпадает. Как и правильная настройка crontab. Можно мониторить ошибки с помощь cron-a, но ведь это лишь оповещения, а вот происходящее не всегда проясняет. Так же и не указывает на момент, когда впервые была ошибка(если оповещение настроены позже кем-то другим). Помимо этого, важно знать прогресс того, как работал скрипт в определенные промежутки времени. Например вы работаете со статистикой, проводите калькуляцию и ежедневные вставки в БД. С каждым днем данных становится больше. Тут же начинаются тормоза из-за раздутости таблицы. Понятно что нужно рефакторить код, возможно создавать партиции, индексы, проводить какие-то оптимизации. И опять же следить за выполнением и поведением скриптов, на протяжении какого-то времени. В прошлых постах я упоминал PinbaEngine. Но ведь не в каждом проекте есть возможность настроить подобную связку. Даже поставив, придется модифицировать код и изгаляться над интерфейсом для сия творенья. Что не всегда хочется. В данном посте хочу рассказать о маленькой батарейке, под названием django-mmc и о том, как правильно настроить это добро.

Создание проекта


$ pip install virtualenvwrapper
$ mkvirtualenv habr
$ pip install Django
$ django-admin.py startproject habr

Заметил и то, что многие, даже бывалые не используют такую вкусную вещь, как virtualenvwrapper. Полезная штука. Можно почитать о ней тут.

Установка батарейки


$ cd habr/
$ pip install django-mmc


Добавим батарейку mmc в INSTALLED_APPS и синхронизируем БД:
$ ./manage.py syncdb --noinput

Теперь же инициализируем необходмые компоненты библиотеки где-нибудь в инит файле, до момента инициализации аппов.
Добавим импорт и вызов в файл habr/__init__.py:
from mmc.mixins import inject_management

inject_management()

На этом процесс настройки завершен. Как видно нет ничего сложно и с легкостью можно подключить батарейку к любому действующему проекту.

Проверка


Для проверки необходимо выполнить несколько команд и запустить веб-север:
$ ./manage.py createsuperuser 
$ ./manage.py syncdb
$ ./manage.py runserver

Теперь осталось лишь проверить результат в административной части проекта.
Сделать можно перейдя по адресу http://127.0.0.1:8000/admin/mmc/mmclog/

Результат


И наконец таки результат, к которому мы шли:


Настройка cron-а


Если Вы хотите получать уведомления от cron-а, до добавьте следующие строчки в начале вашего crontab:
SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
MAILTO=habr@local.host

Первые две строчки указывают на шел и путь, где нужно искать исполняемые файлы. В MAILTO указывается адрес, куда должны приходить результаты вывода фоновых задач.

Данная батарейка помогла мне своевременно выявить проблемные места в проекте, узнать какие команды отрабатывают некорректно или падают с каким-то временным промежутком и устранить данные проблему. Надеюсь она послужит как начинающим, так уже и бывалым пользователям.