Перейти к содержимому
10 / 15

Трассировка запросов в Go через OpenTelemetry

Трассировка отвечает на вопрос, который не берут ни логи, ни метрики: куда ушло время конкретного запроса. Запрос представляется деревом спанов, каждый спан — этап с началом, концом и атрибутами; связываются они контекстом, который передаётся между сервисами заголовками. В Go это ложится естественно, потому что context.Context уже прокидывается через весь стек вызовов — именно в нём и живёт текущий спан. Практическая схема простая: настроить провайдер один раз при старте, подключить готовые обёртки для HTTP-сервера, HTTP-клиента и драйвера базы — они дадут большую часть картины без единой строки в бизнес-логике, — и добавлять свои спаны точечно там, где нужна детализация. Два обязательных момента. Сэмплирование: трассировать сто процентов запросов дорого, обычно берут долю плюс все ошибочные. И связь с логами: идентификатор трассировки кладут в записи лога, тогда из графика можно перейти в конкретные строки.