...

суббота, 17 мая 2014 г.

Мониторинг выполнения 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://ift.tt/1gbZUAB

Результат




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


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

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


This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at http://ift.tt/jcXqJW.


Комментариев нет:

Отправить комментарий