И почему я перешел на собственную версию Sentry

Если вы не знаете, что такое «служба отчетов об ошибках», позвольте мне попытаться объяснить это вкратце:

Скажем, вам нужно уведомление в случае, если ваше приложение выдает какую-либо ошибку, что более важно, когда мы говорим о PHP: Исключения.

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

Многие из этих сервисов работают с более чем одним языком программирования, другие ориентированы на конкретный язык, это действительно зависит от ваших потребностей.

Эти сервисы обычно предлагают вам пакет (composer require….), который регистрирует обработчик исключений, который отправляет ошибку через HTTP в этот сервис.

На панели управления этой службы ошибки/исключения группируются и отображаются
так же, как в системе заявок (например, Zendesk). При этом вы получаете очень хороший обзор того, что происходит не так внутри вашей системы. Работая в команде, вы можете назначать эти ошибки своим товарищам по команде, добавлять комментарии и т. д.
Но самое главное: вы получаете уведомление, если что-то пойдет не так!

Я ненавижу кликбейтинг, поэтому давайте сначала начнем с важных выводов:

Победитель (для меня) — Сентри!

Почему?

  1. Поскольку sentry — это единственная служба, которая показывает содержимое $variables
    , связанное с Error! (пожалуйста, поправьте меня, если я ошибаюсь)
    Я объясню это…
  2. Sentry предлагает гибкие цены, и вы получаете много за свои деньги
  3. Поскольку Sentry является открытым исходным кодом, вы можете запустить его на своем собственном сервере со всеми функциями (пожалуйста, поправьте меня, если я ошибаюсь).
  4. Sentry имеет множество Функций (я никогда не использовал и не поддерживает множество разных языков и предлагает пакеты для большинства из них)

Отказ от ответственности: Публикация здесь крайне субъективна, потому что, с одной стороны, я использую Sentry в течение многих лет, а с другой стороны, я очень поверхностно рассматривал другие сервисы. (из-за нехватки времени)
Так что нельзя исключать, что я пропустил некоторые замечательные функции других сервисов — при этом сказал: Пожалуйста, проверьте все сами, если вы также ищете (новый) сервис!

Итак, какие услуги я изучил?

  • sentry.io (предлагает бесплатный план, но без сторонних интеграций)
  • bugsnag.com (предлагает бесплатный план с полным оповещением)
  • raygun.com (без бесплатного тарифа)
  • flareapp.io (без бесплатного плана)

Что заставляет меня проверять другие сервисы, кроме Sentry, после стольких лет?

Sentry недавно сделал объявление:

И это облом! ;-(

Позволь мне объяснить. В Sentry структура такая:

  • у вас есть аккаунт (как обычно)
  • внутри вашей учетной записи у вас есть «организации»
  • внутри каждой «организации» у вас есть проекты

Так что, конечно, чтобы все было чисто, люди, которые работают на разных клиентов/компаний, создают для каждого клиента «организацию» внутри Sentry, а здесь все проекты этого клиента — имеет смысл, верно?

В течение очень долгого времени Sentry предлагал Slack Notifications со своей «устаревшей интеграцией» — даже в бесплатном плане — это фантастика!

Как вы можете прочитать в этом объявлении, эту «устаревшую интеграцию Slack» больше нельзя использовать, и если вы хотите продолжить использовать уведомления Slack, теперь вы вынуждены перейти на платный план. Для ясности: это на 100% честно и нормально, но вот большая проблема с их концепцией:

Вы не платите внутри своей «Учетной записи» — вы платите «за каждую организацию» в своей Учетной записи.

Итак, давайте предположим, что у нас есть 5 клиентов:

Чтобы поддерживать Slack Notifications, вам придется платить 312 долларов в год * 5,
что составляет 1560 долларов в год только за то, чтобы иметь Slack Notifications !!!

….да, и некоторые дополнительные вещи, которые вы получаете с вашим обновлением, но это не главное.

Разве это не сумасшествие?!? 1560 долларов США в год только потому, что вы платите за организацию, а не за глобальную учетную запись?

Я пытался объяснить часовому так:

Если вы живете в доме или квартире: Есть ли у вас «договор на поставку воды» для каждого отдельного водопроводного крана в вашем доме/квартире или у вас есть договор на весь дом/квартиру? Если бы ваша местная компания по водоснабжению сказала вам, что вам нужен контракт на каждый водопроводный кран в вашем доме, вы бы начали думать, что они разыгрывают вас.

Вот что я почувствовал после прочтения этого объявления. И именно поэтому я проверил другие сервисы, потому что уведомления Slack в наши дни не представляют собой ничего особенного, и я, должно быть, глупо плачу все эти деньги только из-за этого.

Служба поддержки Sentry сказала мне:

Кроме того, при желании вы можете рассмотреть возможность переноса своих проектов в одну организацию и отмены неиспользованных на тот момент подписок. Таким образом, все ваши проекты будут принадлежать одной организации, и вам будет выставлен счет только один раз. Просто имейте в виду, что вам нужно будет пригласить всех участников из каждой организации в основную и создать новые команды.

Для меня: неприемлемо!

Опять же: именно поэтому я быстро проверил некоторые другие сервисы. Я разослал одно и то же «Исключение» всем службам и проверил внешний вид панели инструментов и объем информации, которую они предоставляют.

Во-первых: вот код, который выдает ошибку:

Это очень просто, но важная часть:

Ваше приложение может постоянно вызывать функцию с неправильными типами. Допустим, $this->aConfig[‘error_reporting’][‘service’] — это «строка».

В этом случае мы получим ошибку:

Fatal error: Uncaught TypeError: Argument 1 passed to Mode_test_exception::throwerror() must be of the type array, string given

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

Рэйган

Это полезно для вас? Трассировка стека даже не кликабельна, это почти та же информация, что и в bash. Вы не можете видеть код, который задействован здесь. Честно говоря, это выглядит чертовски «старомодно» и здесь так много всего не хватает, но я не буду здесь вдаваться в подробности.

Ошибки

Штопать! Это выглядит намного чище, вы получаете полную трассировку стека и видите код, в котором произошла ошибка. Намного лучше. Он имеет много общего с Sentry. В Bugsnag нет «организаций», есть только Projects, Teams и Team-Members.

Чтобы отслеживать, какой проект принадлежит какому из ваших клиентов, имеет смысл использовать здесь префикс в именах ваших проектов, то есть CustomerA-webinterface, CustomerA-backend, CustomerB-webinterface, вы поняли.

Вот как выглядит слабое уведомление:

Кстати: в уведомлениях Sentry нет кнопки «Отложить», но, эй, у вас не может быть всего ;-)

Flarapp

Я не знаю, что сказать. Flare пытается обратиться к разработчикам Laravel, и если кто-то платит за это $319/год, мне очень жаль, я не могу выразить это более дружелюбно. Для меня абсолютное нахальство брать те же деньги, что и Sentry, но предлагать только 10% функционала. Да, Flare предлагает «глубокую аналитику приложений Laravel», чего я никогда не видел, но я могу заверить вас, что вы ничего не пропустите, если будете использовать Sentry с Laravel.

Часовой

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

Это пример уведомления Slack:

Так почему Sentry впереди всех остальных?

Я был очень близок к тому, чтобы перейти на Bugsnag, но при тестировании своего самого первого Exception я заметил, что самая ценная информация в Error-Report отсутствует:

"Содержимое $variables"

Давайте вспомним код:

private function throwerror(array $params): void

поэтому, когда $parms не является массивом, мы получим следующую ошибку:

Argument 1 passed to Mode_test_exception::throwerror() must be of the type array

ладно, получать уведомления об ошибках — это здорово, знать, какой код задействован, тоже здорово… но знаете ли вы, что еще лучше?

«Знание значения $params в момент возникновения ошибки»

Как, черт возьми, мне отлаживать эту ошибку, если я понятия не имею, какие данные вызвали ошибку? Догадаюсь? Должен ли я добавить ведение журнала только для того, чтобы узнать, какие $params могли быть в тот момент?

Я вам кое-что скажу: Службы отчетов об ошибках — на мой взгляд — бесполезны, если вы не видите данные, связанные с ошибкой.

Допустим, вы получили сообщение об ошибке, что DB-INSERT не удалось, чего стоит эта информация, если вы не видите данные, которые пытались вставить? Ничего !

Ни одна из этих служб отчетов об ошибках не показывает эту суперинформацию, только Sentry! (опять же, поправьте меня, если я ошибаюсь)

Чтобы было ясно: легко добавить данные в исключение, например:

throw new RuntimeException(print_r($somedata,true));

Но видеть содержимое $paramters, которое используется внутри моей трассировки стека
с самого начала и до момента возникновения ошибки, это потрясающе!

Опять же, давайте посмотрим на наш пример:

Пожалуйста, не путайте: TypeError произошло потому, что переменная ($params) в тот момент была «строкой» со значением «sentry».

И точное знание этого делает отладку и исправление невероятно быстрыми!

Я понятия не имею, почему кто-то должен использовать какой-либо сервис/инструмент для отчетов об ошибках, не имея этих фрагментов информации. Это не имеет смысла (для меня).

Хорошо, теперь вы, надеюсь, понимаете, почему Sentry здесь побеждает,
но вы можете спросить, как я решил «денежную проблему», не платя за каждую из своих «организаций».

Все просто: я перешел на версию Sentry с собственным хостингом.

Запуск Sentry на собственном сервере дает вам полный контроль над всем.
С помощью Docker это невероятно просто.

Так что вместо того, чтобы платить 1500 долларов в год, я теперь буду платить 0 долларов!

У меня в любом случае работают разные серверы, поэтому стоимость сервера здесь не играет для меня роли.

Благодаря этому простому решению я могу оставаться в своих организациях и продолжать пользоваться любимыми уведомлениями Slack.

Прежде чем вы начнете рассматривать самостоятельное решение, подумайте об этом:

На данный момент вы получаете платный план «всего» за 26 долларов в месяц — учитывая, сколько стоит сервер с 8 ГБ ОЗУ, это фантастическая сделка!

Спасибо за прочтение.