Сервіс каталогу продуктів
Цей сервіс відповідає за повернення інформації про продукти. Сервіс може бути використаний для отримання всіх продуктів, пошуку конкретних продуктів або повернення деталей про будь-який окремий продукт.
Сирці сервісу каталогу продуктів
Трейси
Ініціалізація Трейсингу
OpenTelemetry SDK ініціалізується з main
за допомогою функції initTracerProvider
.
func initTracerProvider() *sdktrace.TracerProvider {
ctx := context.Background()
exporter, err := otlptracegrpc.New(ctx)
if err != nil {
log.Fatalf("OTLP Trace gRPC Creation: %v", err)
}
tp := sdktrace.NewTracerProvider(
sdktrace.WithBatcher(exporter),
sdktrace.WithResource(initResource()),
)
otel.SetTracerProvider(tp)
otel.SetTextMapPropagator(propagation.NewCompositeTextMapPropagator(propagation.TraceContext{}, propagation.Baggage{}))
return tp
}
Ви повинні викликати TracerProvider.Shutdown()
при завершенні роботи вашого сервісу, щоб забезпечити експорт всіх відрізків. Цей сервіс викликає цю функцію як частину відкладеної функції в main.
tp := InitTracerProvider()
defer func() {
if err := tp.Shutdown(context.Background()); err != nil {
log.Fatalf("Tracer Provider Shutdown: %v", err)
}
}()
Додавання gRPC автоінструментування
Цей сервіс отримує gRPC запити, які інструментуються в функції main як частина створення gRPC сервера.
srv := grpc.NewServer(
grpc.StatsHandler(otelgrpc.NewServerHandler()),
)
Цей сервіс буде здійснювати вихідні gRPC виклики, які всі інструментуються обгортанням gRPC клієнта інструментуванням.
func createClient(ctx context.Context, svcAddr string) (*grpc.ClientConn, error) {
return grpc.DialContext(ctx, svcAddr,
grpc.WithTransportCredentials(insecure.NewCredentials()),
grpc.WithStatsHandler(otelgrpc.NewClientHandler()),
)
}
Додавання атрибутів до автоінструментованих відрізків
В межах виконання автоінструментованого коду ви можете отримати поточний відрізок з контексту.
span := trace.SpanFromContext(ctx)
Додавання атрибутів до відрізка здійснюється за допомогою SetAttributes
на обʼєкті відрізка. У функції GetProduct
атрибут для ID продукту додається до відрізка.
span.SetAttributes(
attribute.String("app.product.id", req.Id),
)
Встановлення статусу відрізка
Цей сервіс може захоплювати та обробляти помилки на основі прапорця функції. У випадку помилки статус відрізка встановлюється відповідно за допомогою SetStatus
на обʼєкті відрізка. Ви можете побачити це у функції GetProduct
.
msg := fmt.Sprintf("Error: ProductCatalogService Fail Feature Flag Enabled")
span.SetStatus(otelcodes.Error, msg)
Додавання подій до відрізка
Додавання подій до відрізка здійснюється за допомогою AddEvent
на обʼєкті відрізка. У функції GetProduct
подія відрізка додається, коли обробляється помилка, або коли продукт успішно знайдений.
span.AddEvent(msg)
Метрики
Ініціалізація Метрик
OpenTelemetry SDK ініціалізується з main
за допомогою функції initMeterProvider
.
func initMeterProvider() *sdkmetric.MeterProvider {
ctx := context.Background()
exporter, err := otlpmetricgrpc.New(ctx)
if err != nil {
log.Fatalf("new otlp metric grpc exporter failed: %v", err)
}
mp := sdkmetric.NewMeterProvider(sdkmetric.WithReader(sdkmetric.NewPeriodicReader(exporter)))
global.SetMeterProvider(mp)
return mp
}
Ви повинні викликати initMeterProvider.Shutdown()
при завершенні роботи вашого сервісу, щоб забезпечити експорт всіх записів. Цей сервіс викликає цю функцію як частину відкладеної функції в main.
mp := initMeterProvider()
defer func() {
if err := mp.Shutdown(context.Background()); err != nil {
log.Fatalf("Error shutting down meter provider: %v", err)
}
}()
Додавання автоінструментування Golang runtime
Golang runtime інструментується у функції main.
err := runtime.Start(runtime.WithMinimumReadMemStatsInterval(time.Second))
if err != nil {
log.Fatal(err)
}
Логи
TBD
Відгук
Чи це було корисним?
Дякуємо. Ми цінуємо ваші відгуки!
Будь ласка, дайте нам знати як ми можемо покращити цю сторінку. Ми цінуємо ваші відгуки!