Какой стек технологий вы используете для распределенной трассировки (трейсинга)?

Ответ

Для построения полноценной системы observability, включая трейсинг, я использую комбинацию следующих инструментов, где каждый выполняет свою роль:

  1. Инструментация кода: OpenTelemetry (OTel)

    • Это стандарт де-факто для сбора телеметрии (трейсов, метрик, логов). Его главное преимущество — независимость от вендора. Вы инструментируете код один раз и можете отправлять данные в любой бэкенд (Jaeger, Prometheus, Datadog и т.д.).
    // Пример инициализации трассировщика с экспортом в Jaeger
    import (
        "go.opentelemetry.io/otel"
        "go.opentelemetry.io/otel/exporters/jaeger"
        "go.opentelemetry.io/otel/sdk/trace"
        sdktrace "go.opentelemetry.io/otel/sdk/trace"
    )
    
    func initTracer() (*sdktrace.TracerProvider, error) {
        // Создаем экспортер, который будет отправлять данные в Jaeger
        exporter, err := jaeger.New(jaeger.WithCollectorEndpoint())
        if err != nil {
            return nil, err
        }
    
        // Создаем провайдер трассировки с батчером для эффективности
        tp := sdktrace.NewTracerProvider(
            sdktrace.WithBatcher(exporter),
        )
        otel.SetTracerProvider(tp)
        return tp, nil
    }
  2. Бэкенд для хранения и визуализации трейсов: Jaeger

    • Популярное open-source решение для анализа распределенных трейсов. Отлично интегрируется с OpenTelemetry и Kubernetes. Позволяет визуализировать цепочки вызовов между микросервисами, находить узкие места и ошибки.
    • Как более легковесную альтернативу можно рассмотреть Zipkin.
  3. Метрики и алертинг: Prometheus + Grafana

    • Prometheus используется для сбора и хранения метрик (например, http_requests_total, request_latency_seconds). Grafana — для их визуализации на дашбордах. Трейсы помогают понять, почему что-то произошло, а метрики показывают, что произошло в системе.
  4. Логирование: ELK Stack / Loki / ClickHouse

    • Для агрегации и анализа логов. Современные системы позволяют коррелировать логи с трейсами по TraceID, что дает полную картину запроса: от логов конкретного сервиса до его пути по всей системе.