Categorygithub.com/Lajule/tracing
modulepackage
0.0.0-20240723141843-3fec52bf6f92
Repository: https://github.com/lajule/tracing.git
Documentation: pkg.go.dev

# README

tracing

Use OpenTelemetry with Flamego framework.

Installation

go get github.com/Lajule/tracing

Getting started

package main

import (
	"context"
	"os"
	"os/signal"

	"github.com/Lajule/tracing"
	"github.com/flamego/flamego"
	"go.opentelemetry.io/otel"
	"go.opentelemetry.io/otel/exporters/otlp/otlptrace"
	"go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc"
	"go.opentelemetry.io/otel/propagation"
	"go.opentelemetry.io/otel/sdk/resource"
	tracesdk "go.opentelemetry.io/otel/sdk/trace"
	semconv "go.opentelemetry.io/otel/semconv/v1.4.0"
)

func main() {
	ctx, cancel := signal.NotifyContext(context.Background(), os.Interrupt)
	defer cancel()

	exp, err := otlptrace.New(ctx, otlptracegrpc.NewClient(otlptracegrpc.WithEndpoint("otel-collector:4317"), otlptracegrpc.WithInsecure()))
	if err != nil {
		panic(err)
	}

	tp := tracesdk.NewTracerProvider(
		tracesdk.WithBatcher(exp),
		tracesdk.WithResource(resource.NewWithAttributes(
			semconv.SchemaURL,
			semconv.ServiceNameKey.String("example"),
		)),
	)

	otel.SetTracerProvider(tp)
	otel.SetTextMapPropagator(propagation.TraceContext{})

	defer tp.Shutdown(ctx)

	f := flamego.Classic()
	f.Use(tracing.Tracing())

	f.Get("/", func(parent context.Context) string {
		_, child := otel.Tracer("handler").Start(parent, "Hello")
		defer child.End()
		return "Hello!"
	})

	f.Run()
}

License

This project is under the MIT License. See the LICENSE file for the full license text.

# Functions

No description provided by the author