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

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

© Habrahabr.ru