Работал ли с Jaeger

«Работал ли с Jaeger» — вопрос из категории DevOps, который задают на 23% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Да, работал с Jaeger для распределенного трейсинга в микросервисных архитектурах. Использовал клиентские библиотеки OpenTelemetry (ранее OpenTracing) для интеграции с Go-сервисами.

Пример инициализации трейсера:

import (
    "go.opentelemetry.io/otel"
    "go.opentelemetry.io/otel/exporters/jaeger"
    "go.opentelemetry.io/otel/sdk/trace"
)

func initTracer(jaegerURL string) (*trace.TracerProvider, error) {
    exporter, err := jaeger.New(jaeger.WithCollectorEndpoint(jaeger.WithEndpoint(jaegerURL)))
    if err != nil {
        return nil, err
    }
    tp := trace.NewTracerProvider(trace.WithBatcher(exporter))
    otel.SetTracerProvider(tp)
    return tp, nil
}

Основные задачи:

  • Настройка сэмплинга (например, ParentBased или AlwaysSample)
  • Интеграция с HTTP/gRPC middleware для автоматического трейсинга
  • Анализ latency и ошибок через Jaeger UI
  • Контекстная передача трейсов между сервисами (context.Context)

Опыт включал дебаг медленных запросов и анализ распределенных транзакций.