fix(trace): grpc exporter should use nonblock option (#2744)

* fix(trace): grpc exporter should use nonblock option

* chore: sort imports
master
cong 2 years ago committed by GitHub
parent 036328f1ea
commit deefc1a8eb
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -5,8 +5,6 @@ import (
"fmt"
"sync"
"github.com/zeromicro/go-zero/core/lang"
"github.com/zeromicro/go-zero/core/logx"
"go.opentelemetry.io/otel"
"go.opentelemetry.io/otel/exporters/jaeger"
"go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc"
@ -14,7 +12,9 @@ import (
"go.opentelemetry.io/otel/sdk/resource"
sdktrace "go.opentelemetry.io/otel/sdk/trace"
semconv "go.opentelemetry.io/otel/semconv/v1.4.0"
"google.golang.org/grpc"
"github.com/zeromicro/go-zero/core/lang"
"github.com/zeromicro/go-zero/core/logx"
)
const (
@ -60,11 +60,15 @@ func createExporter(c Config) (sdktrace.SpanExporter, error) {
case kindZipkin:
return zipkin.New(c.Endpoint)
case kindGrpc:
// Always treat trace exporter as optional component, so we use nonblock here,
// otherwise this would slow down app start up even set a dial timeout here when
// endpoint can not reach.
// If the connection not dial success, the global otel ErrorHandler will catch error
// when reporting data like other exporters.
return otlptracegrpc.New(
context.Background(),
otlptracegrpc.WithInsecure(),
otlptracegrpc.WithEndpoint(c.Endpoint),
otlptracegrpc.WithDialOption(grpc.WithBlock()),
)
default:
return nil, fmt.Errorf("unknown exporter: %s", c.Batcher)

@ -4,6 +4,7 @@ import (
"testing"
"github.com/stretchr/testify/assert"
"github.com/zeromicro/go-zero/core/logx"
)
@ -13,6 +14,7 @@ func TestStartAgent(t *testing.T) {
const (
endpoint1 = "localhost:1234"
endpoint2 = "remotehost:1234"
endpoint3 = "localhost:1235"
)
c1 := Config{
Name: "foo",
@ -29,12 +31,12 @@ func TestStartAgent(t *testing.T) {
}
c4 := Config{
Name: "bla",
Endpoint: endpoint1,
Endpoint: endpoint3,
Batcher: "otlp",
}
c5 := Config{
Name: "grpc",
Endpoint: endpoint1,
Endpoint: endpoint3,
Batcher: "grpc",
}
@ -49,7 +51,7 @@ func TestStartAgent(t *testing.T) {
defer lock.Unlock()
// because remotehost cannot be resolved
assert.Equal(t, 2, len(agents))
assert.Equal(t, 3, len(agents))
_, ok := agents[""]
assert.True(t, ok)
_, ok = agents[endpoint1]

Loading…
Cancel
Save