tracing: setup log provider
This commit is contained in:
parent
ddb56b3566
commit
ab94adb925
@ -9,6 +9,7 @@ import (
|
||||
"crypto/x509"
|
||||
"errors"
|
||||
"os"
|
||||
"slices"
|
||||
"time"
|
||||
|
||||
"go.ntppool.org/common/logger"
|
||||
@ -21,9 +22,11 @@ import (
|
||||
"go.opentelemetry.io/otel/exporters/otlp/otlptrace"
|
||||
"go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc"
|
||||
"go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp"
|
||||
logglobal "go.opentelemetry.io/otel/log/global"
|
||||
"go.opentelemetry.io/otel/propagation"
|
||||
sdklog "go.opentelemetry.io/otel/sdk/log"
|
||||
"go.opentelemetry.io/otel/sdk/resource"
|
||||
otelsdktrace "go.opentelemetry.io/otel/sdk/trace"
|
||||
sdktrace "go.opentelemetry.io/otel/sdk/trace"
|
||||
semconv "go.opentelemetry.io/otel/semconv/v1.26.0"
|
||||
"go.opentelemetry.io/otel/trace"
|
||||
)
|
||||
@ -64,15 +67,17 @@ type TracerConfig struct {
|
||||
}
|
||||
|
||||
func InitTracer(ctx context.Context, cfg *TracerConfig) (TpShutdownFunc, error) {
|
||||
// todo: setup environment from cfg
|
||||
return SetupSDK(ctx, cfg)
|
||||
}
|
||||
|
||||
func SetupSDK(ctx context.Context, cfg *TracerConfig) (shutdown TpShutdownFunc, err error) {
|
||||
if cfg == nil {
|
||||
cfg = &TracerConfig{}
|
||||
}
|
||||
|
||||
log := logger.Setup()
|
||||
|
||||
log.Warn("SetupSDK")
|
||||
|
||||
if serviceName := os.Getenv(svcNameKey); len(serviceName) == 0 {
|
||||
if len(cfg.ServiceName) > 0 {
|
||||
os.Setenv(svcNameKey, cfg.ServiceName)
|
||||
@ -113,10 +118,18 @@ func SetupSDK(ctx context.Context, cfg *TracerConfig) (shutdown TpShutdownFunc,
|
||||
var shutdownFuncs []func(context.Context) error
|
||||
shutdown = func(ctx context.Context) error {
|
||||
var err error
|
||||
// need to shutdown the providers first,
|
||||
// exporters after which is the opposite
|
||||
// order they are setup.
|
||||
slices.Reverse(shutdownFuncs)
|
||||
for _, fn := range shutdownFuncs {
|
||||
// log.Warn("shutting down", "fn", fn)
|
||||
err = errors.Join(err, fn(ctx))
|
||||
}
|
||||
shutdownFuncs = nil
|
||||
if err != nil {
|
||||
log.Warn("shutdown returned errors", "err", err)
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
||||
@ -128,29 +141,32 @@ func SetupSDK(ctx context.Context, cfg *TracerConfig) (shutdown TpShutdownFunc,
|
||||
prop := newPropagator()
|
||||
otel.SetTextMapPropagator(prop)
|
||||
|
||||
var exporter otelsdktrace.SpanExporter
|
||||
var spanExporter sdktrace.SpanExporter
|
||||
|
||||
switch os.Getenv("OTEL_TRACES_EXPORTER") {
|
||||
case "":
|
||||
exporter, err = newOLTPExporter(ctx, cfg)
|
||||
spanExporter, err = newOLTPExporter(ctx, cfg)
|
||||
case "otlp":
|
||||
exporter, err = newOLTPExporter(ctx, cfg)
|
||||
spanExporter, err = newOLTPExporter(ctx, cfg)
|
||||
default:
|
||||
exporter, err = autoexport.NewSpanExporter(ctx)
|
||||
// log.Debug("OTEL_TRACES_EXPORTER", "fallback", os.Getenv("OTEL_TRACES_EXPORTER"))
|
||||
spanExporter, err = autoexport.NewSpanExporter(ctx)
|
||||
}
|
||||
if err != nil {
|
||||
handleErr(err)
|
||||
return
|
||||
}
|
||||
shutdownFuncs = append(shutdownFuncs, exporter.Shutdown)
|
||||
shutdownFuncs = append(shutdownFuncs, spanExporter.Shutdown)
|
||||
|
||||
if exporter == nil {
|
||||
log.Warn("tracing not configured")
|
||||
logExporter, err := autoexport.NewLogExporter(ctx)
|
||||
if err != nil {
|
||||
handleErr(err)
|
||||
return
|
||||
}
|
||||
shutdownFuncs = append(shutdownFuncs, logExporter.Shutdown)
|
||||
|
||||
// Set up trace provider.
|
||||
tracerProvider, err := newTraceProvider(exporter, res)
|
||||
tracerProvider, err := newTraceProvider(spanExporter, res)
|
||||
if err != nil {
|
||||
handleErr(err)
|
||||
return
|
||||
@ -158,6 +174,19 @@ func SetupSDK(ctx context.Context, cfg *TracerConfig) (shutdown TpShutdownFunc,
|
||||
shutdownFuncs = append(shutdownFuncs, tracerProvider.Shutdown)
|
||||
otel.SetTracerProvider(tracerProvider)
|
||||
|
||||
logProvider := sdklog.NewLoggerProvider(sdklog.WithResource(res),
|
||||
sdklog.WithProcessor(
|
||||
sdklog.NewBatchProcessor(logExporter, sdklog.WithExportBufferSize(10)),
|
||||
),
|
||||
)
|
||||
|
||||
logglobal.SetLoggerProvider(logProvider)
|
||||
shutdownFuncs = append(shutdownFuncs, func(ctx context.Context) error {
|
||||
logProvider.ForceFlush(ctx)
|
||||
return logProvider.Shutdown(ctx)
|
||||
},
|
||||
)
|
||||
|
||||
if err != nil {
|
||||
handleErr(err)
|
||||
return
|
||||
@ -166,7 +195,7 @@ func SetupSDK(ctx context.Context, cfg *TracerConfig) (shutdown TpShutdownFunc,
|
||||
return
|
||||
}
|
||||
|
||||
func newOLTPExporter(ctx context.Context, cfg *TracerConfig) (otelsdktrace.SpanExporter, error) {
|
||||
func newOLTPExporter(ctx context.Context, cfg *TracerConfig) (sdktrace.SpanExporter, error) {
|
||||
|
||||
log := logger.Setup()
|
||||
|
||||
@ -235,11 +264,11 @@ func newOLTPExporter(ctx context.Context, cfg *TracerConfig) (otelsdktrace.SpanE
|
||||
return exporter, err
|
||||
}
|
||||
|
||||
func newTraceProvider(traceExporter otelsdktrace.SpanExporter, res *resource.Resource) (*otelsdktrace.TracerProvider, error) {
|
||||
traceProvider := otelsdktrace.NewTracerProvider(
|
||||
otelsdktrace.WithResource(res),
|
||||
otelsdktrace.WithBatcher(traceExporter,
|
||||
otelsdktrace.WithBatchTimeout(time.Second*3),
|
||||
func newTraceProvider(traceExporter sdktrace.SpanExporter, res *resource.Resource) (*sdktrace.TracerProvider, error) {
|
||||
traceProvider := sdktrace.NewTracerProvider(
|
||||
sdktrace.WithResource(res),
|
||||
sdktrace.WithBatcher(traceExporter,
|
||||
sdktrace.WithBatchTimeout(time.Second*3),
|
||||
),
|
||||
)
|
||||
return traceProvider, nil
|
||||
|
Loading…
Reference in New Issue
Block a user