Внедрение промежуточных узлов td-agent
на пути доставки события ошибки от приложения до Sentry гарантирует:
- быструю отправку события (
unix-сокет
vshttp
) - доставку до сервера Sentry когда он будет доступен
Инфраструктура состоит из двух контейнеров:
- приложение на
php
, которое создает ошибку, в этом же контейнере работаетtd-agent
прослушиваяunix-сокет
куда приложение отправляет событие ошибки. Локальныйtd-agent
перенаправляет событие в следующийtd-agent
td-agent
который отправляет событие в Sentry
Использование нескольких
td-agent'ов
сделано для демонстрации возможности прохождения события ошибки через несколько узловtd-agent
.
Движение события ошибки от приложения по узлам td-agent
до сервера Sentry
изображено на схеме ниже:
Буферизация события ошибки возможна на любом узле td-agent
что гарантирует в случае недоступности сервера Sentry буферизация на диск будет осуществляться на подходящем для этого сервере (при условии его доступности) и событие будет доставлено до Sentry.
На стороне приложения необходимо обеспечить транспортировку события ошибки через td-agent
. Для этого необходимо подменить дефолтный http-транспорт
. Детали реализации в src.
Поднять инфраструктуру:
$ export SENTRY_ADDR="http://sentry.local:9000"
$ export SENTRY_DSN="dsn"
$ docker compose up -d
Теперь можно зайти в контейнер с приложением и сгенерировать событие ошибки:
$ docker compose exec app php -f /var/www/html/src/index.php
В ответ будет распечатка объекта с идентификатором события:
object(Sentry\EventId)#61 (1) {
["value":"Sentry\EventId":private]=>
string(32) "5a2c307521e147859af5b86d165d97cd"
}
Если в ответ NULL значит что-то пошло не так ...
После прохождения через все узлы td-agent
событие будет отправлено в Sentry
.