feat 链路追踪
This commit is contained in:
69
module/tracer.go
Normal file
69
module/tracer.go
Normal file
@@ -0,0 +1,69 @@
|
||||
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 {
|
||||
tp *sdktrace.TracerProvider
|
||||
metricCfg *config.MetricConfig
|
||||
serviceName string
|
||||
}
|
||||
|
||||
func (m *Tracer) Init() error {
|
||||
exporter, err := otlptracegrpc.New(
|
||||
context.Background(),
|
||||
otlptracegrpc.WithInsecure(),
|
||||
otlptracegrpc.WithEndpoint(m.metricCfg.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) Start() error {
|
||||
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
|
||||
}
|
||||
|
||||
func (m *Tracer) Bind(data ...any) Module {
|
||||
if data == nil || len(data) == 0 {
|
||||
return m
|
||||
}
|
||||
if mc, ok := data[0].(*config.MetricConfig); ok {
|
||||
m.metricCfg = mc
|
||||
}
|
||||
if name, ok := data[1].(string); ok {
|
||||
m.serviceName = name
|
||||
}
|
||||
return m
|
||||
}
|
||||
Reference in New Issue
Block a user