Поговорим о том, как мы расширяли distributed tracing под нужды ВКонтакте. Сама по себе технология понятна — это сбор информации о взаимодействии между элементами системы при обработке запроса. Есть и популярные инструменты для хранения и визуализации трейсов: например, Jaeger и Sentry. А также способы их сбора из прикладного кода (tracing SDK для различных языков).
Как и другие стандартные инструменты, встречаясь с реальным хайлоадом, они дают трещины. Что, если мы хотим хранить данных больше, чем позволяет стандарт? Что, если мы хотим трекать память в условиях асинхронных корутин? Что, если данных очень много, а мы хотим трейсить каждый-каждый запрос с минимальным оверхедом и существующие SDK для нашего продакшна не подойдут?
Я расскажу, как мы в целом переосмысливали процесс трейсинга, упёршись в подход Open Telemetry. В итоге у нас получилась более богатая модель данных, при этом сбор трейса на реальном проде получился практически zero overhead.