mirror of
https://github.com/foomo/keel.git
synced 2025-10-16 12:35:34 +00:00
100 lines
2.8 KiB
Go
100 lines
2.8 KiB
Go
package telemetry
|
|
|
|
import (
|
|
"context"
|
|
|
|
"go.opentelemetry.io/otel"
|
|
"go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc"
|
|
"go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp"
|
|
"go.opentelemetry.io/otel/exporters/stdout/stdouttrace"
|
|
otelresource "go.opentelemetry.io/otel/sdk/resource"
|
|
sdktrace "go.opentelemetry.io/otel/sdk/trace"
|
|
semconv "go.opentelemetry.io/otel/semconv/v1.10.0"
|
|
"go.opentelemetry.io/otel/trace"
|
|
"go.opentelemetry.io/otel/trace/noop"
|
|
|
|
"github.com/foomo/keel/env"
|
|
)
|
|
|
|
func Tracer() trace.Tracer {
|
|
return TraceProvider().Tracer(TracerName)
|
|
}
|
|
|
|
func TraceProvider() trace.TracerProvider {
|
|
return otel.GetTracerProvider()
|
|
}
|
|
|
|
func NewNoopTraceProvider() (trace.TracerProvider, error) {
|
|
tracerProvider := noop.NewTracerProvider()
|
|
otel.SetTracerProvider(tracerProvider)
|
|
return tracerProvider, nil
|
|
}
|
|
|
|
func NewStdOutTraceProvider(ctx context.Context) (trace.TracerProvider, error) {
|
|
var exportOpts []stdouttrace.Option
|
|
if env.GetBool("OTEL_EXPORTER_STDOUT_PRETTY_PRINT", true) {
|
|
exportOpts = append(exportOpts, stdouttrace.WithPrettyPrint())
|
|
}
|
|
if !env.GetBool("OTEL_EXPORTER_STDOUT_TIMESTAMPS", true) {
|
|
exportOpts = append(exportOpts, stdouttrace.WithoutTimestamps())
|
|
}
|
|
|
|
exporter, err := stdouttrace.New(exportOpts...)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return newTracerProvider(exporter)
|
|
}
|
|
|
|
func NewOTLPHTTPTraceProvider(ctx context.Context, opts ...otlptracehttp.Option) (trace.TracerProvider, error) {
|
|
if env.GetBool("OTEL_EXPORTER_OTLP_INSECURE", false) {
|
|
opts = append(opts, otlptracehttp.WithInsecure())
|
|
}
|
|
if value := env.Get("OTEL_EXPORTER_OTLP_ENDPOINT", ""); value != "" {
|
|
opts = append(opts, otlptracehttp.WithEndpoint(value))
|
|
}
|
|
|
|
exporter, err := otlptracehttp.New(ctx, opts...)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return newTracerProvider(exporter)
|
|
}
|
|
|
|
func NewOTLPGRPCTraceProvider(ctx context.Context, opts ...otlptracegrpc.Option) (trace.TracerProvider, error) {
|
|
if env.GetBool("OTEL_EXPORTER_OTLP_INSECURE", false) {
|
|
opts = append(opts, otlptracegrpc.WithInsecure())
|
|
}
|
|
if value := env.Get("OTEL_EXPORTER_OTLP_ENDPOINT", ""); value != "" {
|
|
opts = append(opts, otlptracegrpc.WithEndpoint(value))
|
|
}
|
|
|
|
exporter, err := otlptracegrpc.New(ctx, opts...)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return newTracerProvider(exporter)
|
|
}
|
|
|
|
func newTracerProvider(e sdktrace.SpanExporter) (trace.TracerProvider, error) {
|
|
resource := otelresource.NewSchemaless(
|
|
semconv.ServiceNameKey.String(env.Get("OTEL_SERVICE_NAME", ServiceName)),
|
|
)
|
|
|
|
tracerProvider := sdktrace.NewTracerProvider(
|
|
sdktrace.WithBatcher(e),
|
|
sdktrace.WithResource(resource),
|
|
sdktrace.WithSampler(
|
|
sdktrace.ParentBased(
|
|
sdktrace.TraceIDRatioBased(env.GetFloat64("OTEL_TRACE_RATIO", 1)),
|
|
),
|
|
),
|
|
)
|
|
|
|
otel.SetTracerProvider(tracerProvider)
|
|
return tracerProvider, nil
|
|
}
|