Статьи

Знайте, что ваши пользователи знают с Raygun

springtimesoft_raygun_1_raygun_1

Эта статья была рецензирована Томом Паркином . Спасибо всем рецензентам SitePoint за то, что сделали контент SitePoint как можно лучше!

Не уверен насчет тебя, но я не люблю ошибки. На самом деле, когда я вижу один, я обычно делаю что-то вроде этого .

Однако, если вы знаете об ошибке, вы можете исправить ее. Гораздо хуже, когда вы не знаете о проблемах, с которыми сталкиваются пользователи при просмотре с помощью вашего приложения. Некоторые исследования показывают, что в большинстве случаев пользователи не желают снова выполнять какое-либо действие, если оно привело к ошибке. Поэтому знание ошибок и реагирование на них как можно скорее имеет решающее значение. В этом смысле сегодняшний гость — Raygun — удобный и простой в настройке сервис отслеживания ошибок.

В этой статье я собираюсь показать вам, как интегрировать Raygun в ваше Rails-приложение и начать отслеживать ошибки всего за десять минут. Мы также настроим специальную услугу «Пульс», которая позволяет нам видеть, сколько пользователей в настоящее время просматривают веб-сайт, откуда они, насколько они довольны и многое другое!

Исходный код доступен на GitHub .

Raygun и его услуги

Raygun был запущен в начале 2013 года. Изначально компания называлась Mindscape — она ​​создавала инструменты для разработчиков .NET (например, LightSpeed ​​ORM и Web Workbench). В течение нескольких лет идея создания нового сервиса возникала в команде, поскольку они искали лучший способ устранения ошибок в работе. Поэтому было принято решение исправить эту проблему путем разработки собственного решения. В настоящее время команда Raygun насчитывает около двадцати человек, но она постепенно растет, поскольку компания расширяется в США.

Raygun предоставляет две основные услуги: Crash Reporting и Pulse.

Crash Reporting обеспечивает интеграцию для различных платформ, от Rails и .NET до Android и Windows Phone (команда работает над добавлением поддержки еще большего количества платформ). Он поставляется с удобной и простой в использовании панелью мониторинга, где вы можете просматривать зафиксированные ошибки, просматривать подробную информацию, устанавливать статусы ошибок и т. Д. Более того, отчеты о сбоях могут быть интегрированы с платформами командного чата (Hipchat или Slack), управление проектами инструменты (JIRA и друзья) и средства отслеживания проблем (GitHub, Bitbucket и другие).

Другой сервис, Pulse для мониторинга пользователей, был запущен около недели назад после года разработки. Он предоставляет подробную информацию о производительности (с хорошим графиком, который действительно помогает найти узкие места), используемом программном обеспечении, местонахождении пользователя и устройстве.

Обратите внимание, что обе услуги платные, однако вы можете попробовать их бесплатно в течение одного месяца. Цены на Crash Reporting доступны здесь . Ценообразование на Pulse можно найти здесь . Компания рассматривает возможность добавления дополнительных тарифных планов (например, для отдельных разработчиков).

Препараты

Наши приготовления будут очень быстрыми. Создайте новое приложение Rails без набора тестов по умолчанию:

$ rails new Raygunner -T 

Я собираюсь использовать Rails 4 для этой демонстрации, но вы можете придерживаться Rails 3. Адаптер Raygun не поддерживает Rails 2.

Теперь просто создайте контроллер и простой вид:

pages_controller.rb

 class PagesController < ApplicationController end 

просмотров / страниц / index.html.erb

 Hi! 

Теперь мы хотим настроить корневой маршрут для приложения:

конфиг / routes.rb

 [...] root to: 'pages#index' [...] 

Это оно! Мы готовы начать интеграцию Raygun!

Интеграция Raygun

Начните с добавления следующего драгоценного камня в ваш Gemfile:

Gemfile

 [...] gem 'raygun4ruby' [...] 

Бегать

 $ bundle install 

raygun4ruby — это простой в использовании адаптер, который поддерживает Rails, Sinatra и обычный Ruby.

Вам понадобится аккаунт на Raygun. Получите бесплатную 30-дневную пробную версию, указав имя, адрес электронной почты и пароль. Затем перейдите к app.raygun.io/s/createapp, чтобы создать новое приложение. Когда вы закончите, откройте страницу настроек приложения и найдите поле ключа API. Этот ключ будет использоваться для передачи данных в Raygun.

Используйте следующую команду, чтобы сгенерировать файл инициализатора Raygun:

 $ rails g raygun:install YOUR_APP_KEY_HERE 

Будет создан новый файл raygun.rb в каталоге инициализаторов . Он содержит некоторые базовые настройки, которые мы собираемся изменить в соответствии с нашими потребностями. По умолчанию никакие данные не отправляются на серверы Raygun в режиме разработки, однако мы хотим, чтобы это произошло в целях этой демонстрации. Поэтому установите для config.enable_reporting значение true .

конфиг / Инициализаторы / raygun.rb

 [...] config.enable_reporting = true [...] 

Теперь беги

 $ rake raygun:test 

создать исключение для целей тестирования. Подождите пару секунд и откройте панель управления вашего приложения для отчетов о сбоях — вы должны увидеть что-то вроде «Woohoo! Ваше соединение Raygun <-> Ruby установлено правильно »в списке ошибок.

Кстати, любая ошибка в Dashboard имеет один из следующих статусов:

  • активный
  • Постановили
  • Решено в версии
  • Игнорируется
  • Постоянно игнорируется

Например, если вы получили уведомление об ошибке, вы уволили ответственное лицо , попросили разработчиков исправить его, а затем присвоили ему статус «Разрешено». Для этого откройте эту ошибку и щелкните раскрывающийся список в верхнем правом углу.

Отлично, теперь Raygun неустанно следит за нашим приложением!

Повышение ошибок

Хорошо, у меня действительно деструктивное настроение и я хочу вызвать несуществующий метод из действия моего контроллера:

pages_controller.rb

 [...] def index destroy_everything end [...] 

Перезагрузите главную страницу веб-сайта, и действительно страница с ошибкой будет отображена. Но более того, в консоли вы увидите:

 [Raygun] Tracking Exception... 

Это в основном означает, что ошибка была обнаружена и отправлена ​​в Raygun. В настоящее время продукт не имеет отдельной версии. Компания планирует выпустить один, который позволит вам хранить данные на ваших собственных серверах.

Хорошо, перейдите к панели инструментов и дождитесь появления ошибки (это может занять некоторое время). Обратите внимание, что каждая ошибка имеет довольно полный набор информации: трассировка стека, имя сервера и данные HTTP.

Вы можете беспокоиться о конфиденциальных данных. Например, что если вы не хотите отправлять подобные пароли на серверы Raygun? По умолчанию адаптер Raygun не отправляет параметры, перечисленные в Rails.application.config.filter_parameters , но вы также можете изменить это в файле инициализатора:

конфиг / Инициализаторы / raygun.rb

 config.filter_parameters = [ :password, :cvv ] 

Пользовательские данные и теги

Если вы хотите предоставить некоторые пользовательские данные при отслеживании ошибки, это вполне возможно. Предположим, что нам нравится выполнять деление на ноль:

pages_controller.rb

 [...] def index begin 1 / 0 rescue Exception => e Raygun.track_exception(e, custom_data: {my: 'I tried to do some zero division. How cool is that?'}) end end [...] 

Как видите, у Raygun есть метод track_exception который принимает исключение и хэш с пользовательскими данными. Вы можете предоставить версию своего приложения при отслеживании ошибок. Это делается путем установки config.version в файле инициализатора:

конфиг / Инициализаторы / raygun.rb

 config.version = "1.0.0.4" 

Установка тегов также очень проста. Просто используйте config.tags в вашем инициализаторе:

конфиг / Инициализаторы / raygun.rb

 config.tags = ['heroku'] 

Например, если вы отправляете отчеты об ошибках в режиме development тег development будет установлен автоматически.

Игнорирование ошибок

Невежество — это блаженство. Иногда. Если вы не хотите получать уведомления о конкретных исключениях, измените файл инициализатора следующим образом:

конфиг / Инициализаторы / raygun.rb

 [...] config.ignore << ['ZeroDivisionError'] [...] 

Теперь, если вы перезагрузите сервер и снова перейдете на корневую страницу, вы не увидите

 [Raygun] Tracking Exception... 

в консоли, поэтому ошибка не будет отслеживаться.

Имейте в виду, что по умолчанию Raygun игнорирует следующие исключения:

  • ActiveRecord::RecordNotFound
  • ActionController::RoutingError
  • ActionController::InvalidAuthenticityToken
  • ActionDispatch::ParamsParser::ParseError
  • CGI::Session::CookieStore::TamperedWithCookie
  • ActionController::UnknownAction
  • AbstractController::ActionNotFound
  • Mongoid::Errors::DocumentNotFound

Если по какой-то причине вы хотите отследить их, просто удалите соответствующий элемент из хеша:

конфиг / Инициализаторы / raygun.rb

 config.ignore.delete('ActionController::InvalidAuthenticityToken') 

Затронутые пользователи

Сколько пользователей было затронуто ошибкой? Raygun также может сообщить вам об этом! Все, что вам нужно сделать, это предоставить метод current_user в вашем контроллере (и, как вы знаете, такие решения, как Devise или Sorcery, предоставляют такие по умолчанию), который возвращает объект, отвечающий на метод id , email или username .

Если у вашего метода есть другое имя, просто переопределите config.affected_user_method соответственно:

конфиг / Инициализаторы / raygun.rb

 config.affected_user_method = :my_current_user 

Кроме того, если возвращенный объект не отвечает на методы, упомянутые выше, вы можете легко добавить имя вашего метода:

конфиг / Инициализаторы / raygun.rb

 config.affected_user_identifier_methods << :login 

Хотите, чтобы ваши пользователи оставались анонимными? Создайте такой метод:

 def raygun_user cookies.permanent[:raygun_user_identifier] ||= SecureRandom.uuid end 

в ApplicationController и config.affected_user_method .

После этого вы сможете наблюдать за затронутыми пользователями в разделе «Пользователи» панели мониторинга (может потребоваться некоторое время, прежде чем данные будут отображены). Вы также сможете увидеть устройство пользователя, изображение Gravatar и профиль Facebook (если, конечно, предоставленная электронная почта связана с какой-либо из них).

Raygun Pulse

Давайте настроим Raygun Pulse очень быстро, чтобы следить за нашими пользователями. В настоящее время он поддерживает только JavaScript, поэтому поместите следующий код в файл макета приложения:

просмотров / макеты / application.html.erb

 <script> !function(n,e,a,t,r,s,c){n.RaygunObject=r,n[r]=n[r]||function(){(n[r].o=n[r].o ||[]).push(arguments)},s=e.createElement(a),c=e.getElementsByTagName(a)[0], s.async=1,s.src=t,c.parentNode.insertBefore(s,c)}(window,document,"script", "//cdn.raygun.io/raygun4js/raygun.min.js","rg4js"); rg4js('apiKey', 'YOU_KEY_HERE'); rg4js('enablePulse', true); rg4js('enableCrashReporting', false); </script> 

Кроме того, убедитесь, что на ваших страницах указан следующий код:

 <script> rg4js('setUser', { identifier: 'USERS_ID_OR_EMAIL', isAnonymous: false, email: 'USERS_EMAIL', firstName: 'Name', fullName: 'Name Surname' }); </script> 

В разделе «Импульс» на панели инструментов вы сможете наблюдать прекрасные данные о пользователях (включая мониторинг в режиме реального времени, показывающий, сколько пользователей просматривают ваш сайт и откуда они).

Это было быстро, не так ли?

Интеграция с GitHub

В качестве небольшого бонуса я собираюсь рассказать вам, как интегрировать приложение Raygun с репозиторием GitHub.

Прежде всего, откройте настройки вашего приложения на сайте Raygun. Перейдите к Интеграциям — вы увидите список всех интеграций, которые в настоящее время поддерживает Raygun. Нажмите на GitHub и перейдите на страницу настройки. Теперь вам нужно будет войти в GitHub и предоставить Raygun некоторые разрешения для продолжения.

Как только вы закончите, выберите один из ваших репозиториев из выпадающего списка. Для этого репо будут созданы новые выпуски (или вы сможете ссылаться на уже существующие). Поставьте галочку рядом с «Включено» и нажмите «Сохранить». Вы также можете отметить «Пометить связанные ошибки как исправленные при закрытии в GitHub», если хотите — это тоже замечательная функция.

Теперь перейдите к панели мониторинга отчетов о сбоях и выберите любую активную ошибку. Здесь нажмите на выпадающий список Integrations и выберите GitHub из списка. Вы можете создать новую проблему или ссылку на существующую. Теперь просмотрите проблемы GitHub для выбранного репо, чтобы увидеть изменения. Действительно удобно!

Вывод

В этой статье мы кратко рассмотрели Raygun — отличный сервис мониторинга для широкого спектра платформ. Конечно, это намного больше, поэтому я действительно рекомендую просмотреть его документацию и поиграть с Dashboard. Я нашел этот сервис мощным, но в то же время простым в использовании, поэтому его обязательно стоит попробовать.

Какое решение для мониторинга вы предпочитаете? Рассматриваете ли вы использование Raygun в будущем? Поделитесь своим опытом в комментариях и не стесняйтесь присылать мне свои вопросы. Увидимся!

Эта статья написана в соавторстве с Сергеем Гусниным, доцентом, к.т.н. в инженерных науках.