Интеграция с Sentry
Что такое Sentry
Sentry – это инструмент мониторинга и отладки производительности и стабильности. Sentry представляет доступ к событиям, которые вы отправите туда из вашего приложения.
Чаще всего Sentry используется для мониторинга ошибок (исключений). Ошибки можно "обогатить" контекстом для лучшего понимания вызванной проблемы:
- Аргументы, с которыми вызывалось приложение
- Теги, для группировки исключений
- Состояние среды окружения: переменные окружения, состояние приложения и прочие "глобальные" аттрибуты
Полный список всех возможностей можно найти на официальном сайте: https://sentry.io/welcome/
Установка
Установка пакета
Для установки нужного пакета установите пакет yiisoft/yii-sentry следующей командой:
composer require yiisoft/yii-sentry --prefer-distУстановка HTTP-драйвера
Библиотека getsentry/sentry-php требует установки php-http/httplug пакета и любого HTTP-драйвера. Для примеры используется адаптер Guzzle.
Список всех адаптеров можно найти на этой странице.
Для установки пакетов выполните в консоли следующую команду:
composer require php-http/httplug php-http/guzzle7-adapter --prefer-distНастройка
Получение и сохранение токена
Далее сконфигурируем приложение.
Для начала зарегистрируйтесь в Sentry и создайте проект.
Далее в настройках проекта, на вкладке General Settings, найдите поле Security Token и скопируйте оттуда значение.
Теперь положите этот токен в настройки пакета. По умолчанию конфиг лежит в config/packages/yiisoft/yii-sentry/config/params.php. Скопированный токен запишите в значение элемента массива по ключу yiisoft/yii-sentry => options => dsn. Пример:
'yiisoft/yii-sentry' => [
'enabled' => true,
'options' => [
- 'dsn' => '',
+ 'dsn' => 'ТОКЕН',
],
],Настройка HTTP-клиента
После установки HTTP-клиента, сконфигурируйте его.
Создайте файл config/common/sentry.php и положите в него следующий код:
<?php
declare(strict_types=1);
return [
\Http\Client\HttpClient::class => \GuzzleHttp\Client::class,
\Http\Client\HttpAsyncClient::class => [
'class' => \Http\Adapter\Guzzle7\Client::class,
'__construct()' => [
\Yiisoft\Factory\Definition\Reference::to(\Http\Client\HttpClient::class),
],
],
];Интеграция
Веб
Поддержка Sentry для web реализована как middleware.
А это значит, что достаточно будет добавить SentryMiddleware в глобальный список middleware в config/web/application.php:
return [
Yiisoft\Yii\Web\Application::class => [
'__construct()' => [
'dispatcher' => DynamicReference::to(static function (Injector $injector) {
return ($injector->make(MiddlewareDispatcher::class))
->withMiddlewares(
[
Router::class,
SubFolder::class,
+ SentryMiddleware::class,
ErrorCatcher::class,
]
);
}),
'fallbackHandler' => Reference::to(NotFoundHandler::class),
],
],
];Консоль
Sentry поддерживает console в виде обработчика события ConsoleEvents::ERROR.
Пакет предоставляет конфигурационный файл, который автоматически подписывает приложение на это событие.