Feat: add telemetry
This commit is contained in:
		
							
								
								
									
										59
									
								
								telemetry/telemetry.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										59
									
								
								telemetry/telemetry.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,59 @@ | ||||
| package telemetry | ||||
|  | ||||
| import ( | ||||
| 	"context" | ||||
| 	"log" | ||||
| 	"net/http" | ||||
|  | ||||
| 	"go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp" | ||||
| 	"go.opentelemetry.io/otel" | ||||
| 	"go.opentelemetry.io/otel/exporters/jaeger" | ||||
| 	"go.opentelemetry.io/otel/sdk/resource" | ||||
| 	sdktrace "go.opentelemetry.io/otel/sdk/trace" | ||||
| 	semconv "go.opentelemetry.io/otel/semconv/v1.21.0" | ||||
| ) | ||||
|  | ||||
| // newJaegerExporter creates a new Jaeger exporter. | ||||
| func newJaegerExporter() (sdktrace.SpanExporter, error) { | ||||
| 	return jaeger.New(jaeger.WithCollectorEndpoint(jaeger.WithEndpoint("http://localhost:14268/api/traces"))) | ||||
| } | ||||
|  | ||||
| // NewTracerProvider creates a new tracer provider. | ||||
| func NewTracerProvider(exp sdktrace.SpanExporter) *sdktrace.TracerProvider { | ||||
| 	res := resource.NewWithAttributes( | ||||
| 		semconv.SchemaURL, | ||||
| 		semconv.ServiceName("gralias"), | ||||
| 		semconv.ServiceVersion("v0.1.0"), | ||||
| 	) | ||||
|  | ||||
| 	tracerProvider := sdktrace.NewTracerProvider( | ||||
| 		sdktrace.WithSampler(sdktrace.AlwaysSample()), | ||||
| 		sdktrace.WithResource(res), | ||||
| 		sdktrace.WithBatcher(exp), | ||||
| 	) | ||||
| 	return tracerProvider | ||||
| } | ||||
|  | ||||
| // OtelMiddleware wraps the provided http.Handler with OpenTelemetry tracing. | ||||
| func OtelMiddleware(handler http.Handler) http.Handler { | ||||
| 	return otelhttp.NewHandler(handler, "http.server") | ||||
| } | ||||
|  | ||||
| func InitTracer() func() { | ||||
| 	exp, err := newJaegerExporter() | ||||
| 	if err != nil { | ||||
| 		log.Fatalf("failed to create exporter: %v", err) | ||||
| 	} | ||||
|  | ||||
| 	tp := NewTracerProvider(exp) | ||||
| 	otel.SetTracerProvider(tp) | ||||
|  | ||||
| 	return func() { | ||||
| 		if err := tp.Shutdown(context.Background()); err != nil { | ||||
| 			log.Printf("Error shutting down tracer provider: %v", err) | ||||
| 		} | ||||
| 		if err := exp.Shutdown(context.Background()); err != nil { | ||||
| 			log.Printf("Error shutting down exporter: %v", err) | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
		Reference in New Issue
	
	Block a user
	 Grail Finder
					Grail Finder