Comments 2
Немного оффтопный комментарий, по использованию OpenTelemetry+PHP+Laravel:
Для версии PHP 8.4 в пеклах лежит хорошая версия OpenTelemetry (pecl install opentelemetry
или если alpine: apk add php84-opentelemetry
)
Далее мы просто добавляем в проект зависимостью: (composer.json)
"open-telemetry/exporter-otlp": "^1.2",
"open-telemetry/opentelemetry-auto-guzzle": "^1.0",
"open-telemetry/opentelemetry-auto-laravel": "^1.0",
"open-telemetry/opentelemetry-logger-monolog": "^1.0",
"open-telemetry/sdk": "^1.2",
"open-telemetry/sem-conv": "^1.30",
И можно использовать магию аннотаций в проекте:
#[WithSpan] // <- Магия происходит тут из-за хуков
public function index(Request $request)
{
return UserResource::collection(
User::with(['media'])
->paginate($request->input('per_page', 15))
->withQueryString()
);
}
Ну и обязательно установить env (Как пример, отправляем данные в локальный прокси коллектор по-средством http/json)
OTEL_PHP_AUTOLOAD_ENABLED="true"
OTEL_SERVICE_NAME=Laravel
OTEL_EXPORTER_OTLP_PROTOCOL=http/json
OTEL_EXPORTER_OTLP_ENDPOINT=http://collector.collector
OTEL_PROPAGATORS=baggage,tracecontext
OTEL_TRACES_EXPORTER=otlp
OTEL_METRICS_EXPORTER=otlp
OTEL_LOGS_EXPORTER=otlp
OTEL_RESOURCE_ATTRIBUTES="service.name=Laravel,service.namespace=demo,service.version=1.0,deployment.environment=development"
Там так же будет автоматический трейсинг запросов во-вне и к базам данных. И, что самое главное, можно оставлять всю такую же чистоту кода, за счет того, что не нужно контролировать спаны самостоятельно. Их теперь контролирует автохук в рамках пекл-расширения для пхп. Больше информации про хук тут: PHP
Дополнительно, за счет того что это OpenTelemetry, мы получаем более продвинутую схему для получения метрик из приложений, из-за push-policy: нам не нужно бояться, что данные потеряются при сетапах своих "prometheus-adapters", которые или в кеше хранить или где-нибудь еще.
Ну а еще данные из логов добавляется к спанам в качестве аттрибутов
Мы используем сетап вместе с SigNoz + Tail-Based Sample.
Из очевидных минусов: нужно добавлять памяти самому приложению (пока данные собираются, они хранятся в приложении и чего-то весят) и нужно много памяти в коллекторе, но это вопрос именно хвостового семплирования.
Ну а главным плюсом здесь я считаю то, что нет необходимости раздувать код приложения созданием спанов, что выглядит весьма ненативно для PHP.
После того, как отправил, уже не смог отредактировать. С аттрибутами есть небольшой нюанс: нужно в рамках настроек PHP указывать opentelemetry.attr_hooks_enabled = On
в php.ini
Собираем трейс в Laravel и отправляем в Zipkin