Open
Description
Трейсинг - очень мощный инструмент Observability, позволяет расследовать проблемы с запросами.
По-простому, это распределенный stacktrace, который сохраняет вызовы между сервисами. Подробнее можно почитать про это тут
План работы:
- Поддержать передачу trace_id в gRPC заголовке traceparent: Add traceparent to TRequestSettings #326. Это позволит соединить спаны клиента и сервера YDB в единый трейс.
- Поддержать загрузку спанов уже от самого SDK:
- Мы не можем завязываться на один клиент отгрузки трейсов, так что надо придумать единый интерфейс, который мы будем реализовывать в различных плагинах (паттерн Адаптер). Можно посмотреть на YDB Go SDK, или на другие драйвера БД.
- Реализовать плагин для OpenTelemetry клиента. Он будет реализовывать общий интерфейс, пользователи будут передавать его в
NYdb::TDriver
. Можно выбрать другой OpenTelemetry клиент, если он будет популярнее, тут есть простор для исследования. - Разметить вызовы SDK спанами и отгружать их в плагин, который нам передал пользователь. Со спанами важно соблюдать баланс, их должно быть достаточно, чтобы понимать, что было с запросом в SDK, но и не слишком много, чтобы не перегрузить трейс спанами от SDK