feat: improve code for shutdown of otel (#3136)

This commit is contained in:
houseme
2023-11-08 21:16:23 +08:00
committed by GitHub
parent dc71c0d28f
commit f3e3a5af5a
11 changed files with 46 additions and 24 deletions

View File

@ -9,8 +9,8 @@ package otlpgrpc
import (
"context"
"time"
"github.com/gogf/gf/v2/net/gipv4"
"go.opentelemetry.io/otel"
"go.opentelemetry.io/otel/attribute"
"go.opentelemetry.io/otel/exporters/otlp/otlptrace"
@ -20,6 +20,9 @@ import (
sdktrace "go.opentelemetry.io/otel/sdk/trace"
semconv "go.opentelemetry.io/otel/semconv/v1.20.0"
"google.golang.org/grpc"
"github.com/gogf/gf/v2/frame/g"
"github.com/gogf/gf/v2/net/gipv4"
)
const (
@ -30,7 +33,7 @@ const (
//
// The output parameter `Shutdown` is used for waiting exported trace spans to be uploaded,
// which is useful if your program is ending, and you do not want to lose recent spans.
func Init(serviceName, endpoint, traceToken string) (*sdktrace.TracerProvider, error) {
func Init(serviceName, endpoint, traceToken string) (func(), error) {
// Try retrieving host ip for tracing info.
var (
intranetIPArray, err = gipv4.GetIntranetIpArray()
@ -87,5 +90,13 @@ func Init(serviceName, endpoint, traceToken string) (*sdktrace.TracerProvider, e
otel.SetTextMapPropagator(propagation.TraceContext{})
otel.SetTracerProvider(tracerProvider)
return tracerProvider, nil
return func() {
ctx, cancel := context.WithTimeout(ctx, time.Second)
defer cancel()
if err = traceExp.Shutdown(ctx); err != nil {
g.Log().Errorf(ctx, "Shutdown traceExp failed err:%+v", err)
otel.Handle(err)
}
g.Log().Debug(ctx, "Shutdown traceExp success")
}, nil
}

View File

@ -9,8 +9,8 @@ package otlphttp
import (
"context"
"time"
"github.com/gogf/gf/v2/net/gipv4"
"go.opentelemetry.io/otel"
"go.opentelemetry.io/otel/attribute"
"go.opentelemetry.io/otel/exporters/otlp/otlptrace"
@ -19,6 +19,9 @@ import (
"go.opentelemetry.io/otel/sdk/resource"
sdktrace "go.opentelemetry.io/otel/sdk/trace"
semconv "go.opentelemetry.io/otel/semconv/v1.20.0"
"github.com/gogf/gf/v2/frame/g"
"github.com/gogf/gf/v2/net/gipv4"
)
const (
@ -29,7 +32,7 @@ const (
//
// The output parameter `Shutdown` is used for waiting exported trace spans to be uploaded,
// which is useful if your program is ending, and you do not want to lose recent spans.
func Init(serviceName, endpoint, path string) (*sdktrace.TracerProvider, error) {
func Init(serviceName, endpoint, path string) (func(), error) {
// Try retrieving host ip for tracing info.
var (
intranetIPArray, err = gipv4.GetIntranetIpArray()
@ -85,5 +88,13 @@ func Init(serviceName, endpoint, path string) (*sdktrace.TracerProvider, error)
otel.SetTextMapPropagator(propagation.TraceContext{})
otel.SetTracerProvider(tracerProvider)
return tracerProvider, nil
return func() {
ctx, cancel := context.WithTimeout(ctx, time.Second)
defer cancel()
if err = traceExp.Shutdown(ctx); err != nil {
g.Log().Errorf(ctx, "Shutdown traceExp failed err:%+v", err)
otel.Handle(err)
}
g.Log().Debug(ctx, "Shutdown traceExp success")
}, nil
}

View File

@ -20,11 +20,11 @@ func main() {
grpcx.Resolver.Register(etcd.New("127.0.0.1:2379"))
var ctx = gctx.New()
tp, err := otlpgrpc.Init(serviceName, endpoint, traceToken)
shutdown, err := otlpgrpc.Init(serviceName, endpoint, traceToken)
if err != nil {
g.Log().Fatal(ctx, err)
}
defer tp.Shutdown(ctx)
defer shutdown()
StartRequests()
}

View File

@ -33,11 +33,11 @@ func main() {
grpcx.Resolver.Register(etcd.New("127.0.0.1:2379"))
var ctx = gctx.New()
tp, err := otlpgrpc.Init(serviceName, endpoint, traceToken)
shutdown, err := otlpgrpc.Init(serviceName, endpoint, traceToken)
if err != nil {
g.Log().Fatal(ctx, err)
}
defer tp.Shutdown(ctx)
defer shutdown()
// Set ORM cache adapter with redis.
g.DB().GetCache().SetAdapter(gcache.NewAdapterRedis(g.Redis()))

View File

@ -15,11 +15,11 @@ const (
func main() {
var ctx = gctx.New()
tp, err := otlphttp.Init(serviceName, endpoint, path)
shutdown, err := otlphttp.Init(serviceName, endpoint, path)
if err != nil {
g.Log().Fatal(ctx, err)
}
defer tp.Shutdown(ctx)
defer shutdown()
StartRequests()
}

View File

@ -16,11 +16,11 @@ const (
func main() {
var ctx = gctx.New()
tp, err := otlphttp.Init(serviceName, endpoint, path)
shutdown, err := otlphttp.Init(serviceName, endpoint, path)
if err != nil {
g.Log().Fatal(ctx, err)
}
defer tp.Shutdown(ctx)
defer shutdown()
s := g.Server()
s.Group("/", func(group *ghttp.RouterGroup) {

View File

@ -17,11 +17,11 @@ const (
func main() {
var ctx = gctx.New()
tp, err := otlphttp.Init(serviceName, endpoint, path)
shutdown, err := otlphttp.Init(serviceName, endpoint, path)
if err != nil {
g.Log().Fatal(ctx, err)
}
defer tp.Shutdown(ctx)
defer shutdown()
StartRequests()
}

View File

@ -24,11 +24,11 @@ const (
func main() {
var ctx = gctx.New()
tp, err := otlphttp.Init(serviceName, endpoint, path)
shutdown, err := otlphttp.Init(serviceName, endpoint, path)
if err != nil {
g.Log().Fatal(ctx, err)
}
defer tp.Shutdown(ctx)
defer shutdown()
// Set ORM cache adapter with redis.
g.DB().GetCache().SetAdapter(gcache.NewAdapterRedis(g.Redis()))

View File

@ -18,11 +18,11 @@ const (
func main() {
var ctx = gctx.New()
tp, err := otlphttp.Init(serviceName, endpoint, path)
shutdown, err := otlphttp.Init(serviceName, endpoint, path)
if err != nil {
g.Log().Fatal(ctx, err)
}
defer tp.Shutdown(ctx)
defer shutdown()
ctx, span := gtrace.NewSpan(ctx, "main")
defer span.End()

View File

@ -22,11 +22,11 @@ const (
func main() {
var ctx = gctx.New()
tp, err := otlpgrpc.Init(serviceName, endpoint, traceToken)
shutdown, err := otlpgrpc.Init(serviceName, endpoint, traceToken)
if err != nil {
g.Log().Fatal(ctx, err)
}
defer tp.Shutdown(ctx)
defer shutdown()
StartRequests()
}

View File

@ -21,11 +21,11 @@ const (
func main() {
var ctx = gctx.New()
tp, err := otlphttp.Init(serviceName, endpoint, path)
shutdown, err := otlphttp.Init(serviceName, endpoint, path)
if err != nil {
g.Log().Fatal(ctx, err)
}
defer tp.Shutdown(ctx)
defer shutdown()
StartRequests()
}