54 lines
1.2 KiB
Go
54 lines
1.2 KiB
Go
package module
|
|
|
|
import (
|
|
"context"
|
|
"git.hlsq.asia/mmorpg/service-common/config"
|
|
"git.hlsq.asia/mmorpg/service-common/log"
|
|
"go.opentelemetry.io/otel"
|
|
"go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc"
|
|
"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.24.0"
|
|
)
|
|
|
|
// Tracer 链路追踪模块
|
|
type Tracer struct {
|
|
DefaultModule
|
|
Cfg *config.MetricConfig
|
|
ServiceName string
|
|
tp *sdktrace.TracerProvider
|
|
}
|
|
|
|
func (m *Tracer) Init() error {
|
|
exporter, err := otlptracegrpc.New(
|
|
context.Background(),
|
|
otlptracegrpc.WithInsecure(),
|
|
otlptracegrpc.WithEndpoint(m.Cfg.Jaeger.Endpoint),
|
|
)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
m.tp = sdktrace.NewTracerProvider(
|
|
sdktrace.WithBatcher(exporter),
|
|
sdktrace.WithResource(resource.NewWithAttributes(
|
|
semconv.SchemaURL,
|
|
semconv.ServiceNameKey.String(m.ServiceName),
|
|
)),
|
|
)
|
|
otel.SetTracerProvider(m.tp)
|
|
otel.SetTextMapPropagator(propagation.TraceContext{})
|
|
|
|
return nil
|
|
}
|
|
|
|
func (m *Tracer) Stop() error {
|
|
if m.tp != nil {
|
|
if err := m.tp.Shutdown(context.Background()); err != nil {
|
|
log.Errorf("stop tracer provider failed: %v", err)
|
|
}
|
|
}
|
|
return nil
|
|
}
|