Проблема мониторинга состояния приложения актуально для всех маломальски работающих систем. Каждый ее решает сам в меру своих сил. Чаще всего это какой — то самодел на основе Nagios, Zabbix или Cacti. Но основная сложность использования данных систем заключается в том, что если брать данные системы «из коробки» то они будут отслеживать состояние сервера и его сервисов, а не самого приложения. Придется писать плагины для системы которые будут экспортировать данные о состоянии приложения. Многие этого не делают, по причине отсутствия времени или навыков.
Решение есть. Оно не бесплатное но достаточно надежное и универсальное. И это решение собственно и есть NewRelic. Кстати, сразу о финансовой составляющей вопроса. Тут дело не такое простое. Дело в том, что релик позволяет мониторить как ваше приложение так и сам сервер. Все что относится к серверу — мониторится бесплатно. Единственно ограничение это время хранения данных на серверах newrelic. В бесплатном варианте — это только 24 часа. Это означает что вы не сможете посмотреть исторические данные которые превышают данный предел. Есть триал «напопробовать» — он равнозначен PRO версии и кажется он составляет 30 дней.
Так что умеет эта чудо система за свои почти 150 баксов в месяц. Умеет многое:
- параметры производительности системы — как серверной части так и клиентской. Тоесть вы можете видеть на что у вас тратяться миллисекунды на сервере и на клиенте.
- Детализировать и трейсить любые views котороые у вас вызывают сомнения
- Вести учет всех ошибок и инциндентов которые происходили в приложении
- Просматривать данные о запросах к БД и видеть к какой таблице какая вьюшка относится.
- Делать X-Ray любой вьюшки. Это по сути профилирование отдельной views, которое производится с реальными клиентами (нагрузкой) в реальном времени. Тоесть вы видите что и как тормозит при эксплуатации вашего кода. Очень мощный инструмент для отладки произодительности.
- Есть система RUM для конечными клиентами
- Гора всяких отчетов и прочее прочее прочее…
И это только по приложению. Есть еще серверный монитор который показывает состояние серверов с отчетами по использованию памяти, дисков, процессов и прочими прелестями. Но надо отметить — в этом случае newrelic несколько проигрывает тому — же zabbix, но ядреные бородатые и свитерастые сисадмины пусть юзают что им хочется. Newrelic инструмент для разработчика.
Программист: «работа сервера мешает работе моего приложения»
Системный администратор: «работа приложения мешает работе моего сервера»
:)
Ко всему прочему весь этот мониториг можно расширить узкоспециализированными плагинами, например слежение за PostgreSQL или Nginx. Плагинов не то что прям много — но хватает для работы. Никто опять таки не мешает писать свои.
Теперь про установку. Она неимеоверно простая (для питонячего приложения, руби, ява дотнет и прочие — не знаю, но думаю не сложнее).
- Регистрируем аккаунт и получаем ключик лицензии. Он как раз и является привязкой ваших серверов и приложений к аккаунту на релике.
- На сервере выполняем: pip install newrelic
- После установки появляется команда newrelic-admin. Запускаем ее с ключем newrelic-admin generate-config _ВАШ_LICENCE_KEY_ _путь куда положить файл_
- Система создаст вас конфиг по указанному пути. Можете его «потыкать палочкой» но обычно ничего там править не надо.
- Далее, (в случае если использется UWSGI) надо запустить UWSGI приложениче через newrelic-admin. Я это делаю так:
NEW_RELIC_CONFIG_FILE=/path/to/newrelic.ini
export NEW_RELIC_CONFIG_FILE
newrelic-admin run-program /usr/bin/uwsgi —ini /code/app.iniестественно пути менять под себя.
- Собственно все. Приложение подключено и через 5-10 минут появятся данные в вашем аккаунте.
Для работы плагинов newrelic используется newrelic_plugin_agent. Тут еще все проще. Так-же ставится через pip install newrelic_plugin_agent. У меня после установки конфиг лежал в /opt/newrelic_plugin_agent/newrelic_plugin_agent.cfg — тут настраиваются все параметры относящиеся к работе плагинов. Обязательно надо в этом файле прописать ваш ключик в соответствующее место. Подключение стандартный плагинов — это просто расскомментирование их настроек в этом файле. Для запуска просто вызываем newrelic_plugin_agent -с /path/to/newrelic/plugin/agent/config
В качестве резюме — мы используем эту систему уже более полугда, и свои 150$/mo она отрабатывает легко. Однако надо заметить, что эта чудо система не всесильна. И сидение с отладчиком и кучей терминалов никто не отменит. Однако для повседневного использования — однозначнй мастхев.