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 указывается адрес, куда должны приходить результаты вывода фоновых задач.
Данная батарейка помогла мне своевременно выявить проблемные места в проекте, узнать какие команды отрабатывают некорректно или падают с каким-то временным промежутком и устранить данные проблему. Надеюсь она послужит как начинающим, так уже и бывалым пользователям.