Categorygithub.com/erajayatech/go-opentelemetry/v2

# Packages

No description provided by the author
No description provided by the author

# README

go-opentelemetry v2

Go OpenTelemetry Helper.

Why we need v2?

  1. Span trace front to back (context propagation).
  2. Upgrade go version to v1.21.0 and otel version from v1.10.0 to v1.28.0, see why_need_upgrade_version.
  3. Better library API. See better_api.md

Feature

  • Opentelemetry Trace
  • Opentelemetry Context Propagation

context_propagation

Installation v2

go get github.com/erajayatech/go-opentelemetry/v2
import gootel "github.com/erajayatech/go-opentelemetry/v2"

Checklist implement v2

Here is checklist for you to check wheter you already implement this v2 fully.

  1. Your import is using v2 and ranme.
import gootel "github.com/erajayatech/go-opentelemetry/v2"
  1. You create new trace provider and shutdown it properly. See example.
tp, err := gootel.NewTraceProvider(context.Background())
fatalIfErr(err)
defer func() {
    err := tp.Shutdown(context.Background())
    warnIfErr(err)
}()
  1. Your server ready to receive context propagation. See example gin and See example grpc.
ginEngine := gin.Default()
ginEngine.Use(otelgin.Middleware(""))
grpcServer := grpc.NewServer(grpc.StatsHandler(otelgrpc.NewServerHandler()))
  1. You record the span.
ctx, span := gootel.RecordSpan(ctx)
defer span.End()
  1. Your client sent context propagation. See example http and example grpc.
client := &http.Client{Transport: otelhttp.NewTransport(http.DefaultTransport)}
req, err := http.NewRequestWithContext(ctx, http.MethodGet, "http://localhost:4000/foo", nil)
conn, err := grpc.NewClient("localhost:4001", grpc.WithStatsHandler(otelgrpc.NewClientHandler()), grpc.WithTransportCredentials(insecure.NewCredentials()))

Usage

See example server and example client.

In New Relic you will get.

grpc-client-span

http-client-span

Migrate from v1

See Migrate from v1

Things should be highlighted in v2

See highlighted_in_v2.md