Ответ
Трассировка запроса (Distributed Tracing) — это метод мониторинга и диагностики, который позволяет отследить путь единого запроса через распределённую систему (микросервисы, базы данных, внешние API). Каждый шаг (операция) записывается как Span, а вся цепочка — как Trace.
Ключевые концепции:
- Trace ID: Глобально уникальный идентификатор для всего запроса.
- Span ID: Идентификатор отдельной операции в рамках Trace.
- Context: Контекст (Trace ID, Span ID, флаги), который передаётся между сервисами (обычно через HTTP-заголовки, например,
traceparent).
Практическая реализация в .NET (OpenTelemetry):
-
Установка и настройка:
// Установка пакетов: OpenTelemetry, OpenTelemetry.Extensions.Hosting, // OpenTelemetry.Instrumentation.AspNetCore, OpenTelemetry.Exporter.Console builder.Services.AddOpenTelemetry() .WithTracing(tracing => { tracing.AddAspNetCoreInstrumentation() // Инструментирует входящие HTTP-запросы .AddHttpClientInstrumentation() // Инструментирует исходящие HTTP-вызовы .AddEntityFrameworkCoreInstrumentation() // Инструментирует запросы к БД .AddConsoleExporter(); // Вывод трассировок в консоль (для отладки) }); -
Ручное создание Span:
using System.Diagnostics; // Создание Activity (реализация Span в .NET) using var activity = ActivitySource.StartActivity("ProcessPayment", ActivityKind.Internal); activity?.SetTag("payment.amount", amount); activity?.SetTag("payment.currency", "USD"); // ... выполнение логики activity?.SetStatus(ActivityStatusCode.Ok);
Зачем это нужно?
- Диагностика проблем: Быстро найти, в каком сервисе или запросе к БД произошла ошибка или задержка.
- Анализ производительности: Визуализировать и измерить время выполнения каждого этапа запроса.
- Понимание зависимостей: Автоматически строить карту взаимодействий между сервисами.