Ответ
Да, работал с 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)
Опыт включал дебаг медленных запросов и анализ распределенных транзакций.