Go
Instrument your Go app using openTelemetry and export traces to Aspecto's collector.
go get go.opentelemetry.io/[email protected] \
go.opentelemetry.io/otel/[email protected] \
go.opentelemetry.io/otel/[email protected] \
go.opentelemetry.io/otel/sdk/resource \
go.opentelemetry.io/otel/propagation \
go.opentelemetry.io/otel/semconv/v1.4.0 \
go.opentelemetry.io/otel/exporters/otlp/otlptrace/[email protected]
add to your
main.go
file the following importsimport (
"go.opentelemetry.io/otel"
"go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp"
"go.opentelemetry.io/otel/propagation"
"go.opentelemetry.io/otel/sdk/resource"
sdktrace "go.opentelemetry.io/otel/sdk/trace"
semconv "go.opentelemetry.io/otel/semconv/v1.4.0"
)
and then in your main function add the following code
ctx := context.Background()
traceExporter, err := otlptracehttp.New(ctx,
otlptracehttp.WithEndpoint("otelcol.aspecto.io"),
otlptracehttp.WithHeaders(map[string]string{"Authorization": "<YOUR ASPECTO TOKEN HERE>"}))
if err != nil {
log.Fatal(err)
}
res, err := resource.New(ctx,
resource.WithAttributes(
semconv.ServiceNameKey.String("<YOUR SERVICE NAME>"),
),
)
if err != nil {
log.Fatal(err)
}
tp := sdktrace.NewTracerProvider(
sdktrace.WithSampler(sdktrace.AlwaysSample()),
sdktrace.WithResource(res),
sdktrace.WithBatcher(traceExporter))
otel.SetTracerProvider(tp)
otel.SetTextMapPropagator(propagation.TraceContext{})
Go has support for a few popular libraries including
net/http
go-redis
and mongo-driver
go get go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp
you will need to wrap each http handler with
otelHandler
see an example belowhandler := func(w http.ResponseWriter, req *http.Request) {
//your handler code
}
http.Handle("/hello", otelhttp.NewHandler(http.HandlerFunc(handler), "Handler"))
go get github.com/go-redis/redis/extra/redisotel/v8
then add the following code to your
redis
client initialization code import (
"github.com/go-redis/redis/v8"
"github.com/go-redis/redis/extra/redisotel"
)
rdb := rdb.NewClient(&rdb.Options{...})
rdb.AddHook(redisotel.NewTracingHook())
go get go.opentelemetry.io/contrib/instrumentation/go.mongodb.org/mongo-driver/mongo/otelmongo
then add the following code to your mongo client initialization code
opts := options.Client()
opts.Monitor = otelmongo.NewMonitor()
Last modified 1yr ago