Skip to content

Commit

Permalink
fix test
Browse files Browse the repository at this point in the history
  • Loading branch information
ying-jeanne committed Sep 25, 2023
1 parent 334fdd8 commit 3e456e1
Show file tree
Hide file tree
Showing 18 changed files with 745 additions and 498 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
## Changelog

* [CHANGE] Upgraded Tracer: Transitioned from OpenTracing to OpenTelemetry using a seamless bridge integration. #345
* [CHANGE] Updated the minimum required Go version to 1.19 to ensure compatibility with OpenTelemetry version 1.14.0. #350
* [CHANGE] Change `WaitRingStability` and `WaitInstanceState` methods signature to rely on `ReadRing` instead. #251
* [CHANGE] Added new `-consul.cas-retry-delay` flag. It has a default value of `1s`, while previously there was no delay between retries. #178
Expand Down
38 changes: 23 additions & 15 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -27,9 +27,6 @@ require (
github.com/hashicorp/golang-lru/v2 v2.0.5
github.com/hashicorp/memberlist v0.3.1
github.com/miekg/dns v1.1.50
github.com/opentracing-contrib/go-grpc v0.0.0-20210225150812-73cb765af46e
github.com/opentracing-contrib/go-stdlib v1.0.0
github.com/opentracing/opentracing-go v1.2.0
github.com/pkg/errors v0.9.1
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2
github.com/prometheus/client_golang v1.15.1
Expand All @@ -38,19 +35,26 @@ require (
github.com/prometheus/exporter-toolkit v0.10.1-0.20230714054209-2f4150c63f97
github.com/sercand/kuberesolver/v5 v5.1.1
github.com/soheilhy/cmux v0.1.5
github.com/stretchr/testify v1.8.1
github.com/uber/jaeger-client-go v2.28.0+incompatible
github.com/uber/jaeger-lib v2.2.0+incompatible
github.com/stretchr/testify v1.8.4
go.etcd.io/etcd/api/v3 v3.5.0
go.etcd.io/etcd/client/pkg/v3 v3.5.0
go.etcd.io/etcd/client/v3 v3.5.0
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.44.0
go.opentelemetry.io/contrib/instrumentation/net/http/httptrace/otelhttptrace v0.44.0
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.44.0
go.opentelemetry.io/contrib/propagators/jaeger v1.17.0
go.opentelemetry.io/contrib/samplers/jaegerremote v0.11.0
go.opentelemetry.io/otel v1.18.0
go.opentelemetry.io/otel/exporters/jaeger v1.17.0
go.opentelemetry.io/otel/sdk v1.17.0
go.opentelemetry.io/otel/trace v1.18.0
go.uber.org/atomic v1.10.0
go.uber.org/goleak v1.2.0
golang.org/x/exp v0.0.0-20230321023759-10a507213a29
golang.org/x/net v0.10.0
golang.org/x/net v0.15.0
golang.org/x/sync v0.3.0
golang.org/x/time v0.1.0
google.golang.org/grpc v1.55.0
google.golang.org/grpc v1.58.0
gopkg.in/yaml.v2 v2.4.0
gopkg.in/yaml.v3 v3.0.1
)
Expand All @@ -60,13 +64,14 @@ require (
github.com/alicebob/gopher-json v0.0.0-20200520072559-a9ecdc9d1d3a // indirect
github.com/beorn7/perks v1.0.1 // indirect
github.com/cespare/xxhash/v2 v2.2.0 // indirect
github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd // indirect
github.com/coreos/go-semver v0.3.0 // indirect
github.com/coreos/go-systemd/v22 v22.5.0 // indirect
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect
github.com/fatih/color v1.13.0 // indirect
github.com/fsnotify/fsnotify v1.6.0 // indirect
github.com/go-logfmt/logfmt v0.5.1 // indirect
github.com/go-logr/logr v1.2.4 // indirect
github.com/go-logr/stdr v1.2.2 // indirect
github.com/gomodule/redigo v1.8.9 // indirect
github.com/google/btree v1.0.1 // indirect
github.com/hashicorp/errwrap v1.0.0 // indirect
Expand All @@ -90,17 +95,20 @@ require (
github.com/spaolacci/murmur3 v1.1.0 // indirect
github.com/stretchr/objx v0.5.0 // indirect
github.com/yuin/gopher-lua v0.0.0-20210529063254-f4c35e4016d9 // indirect
go.opentelemetry.io/otel/metric v1.18.0 // indirect
go.uber.org/multierr v1.6.0 // indirect
go.uber.org/zap v1.17.0 // indirect
golang.org/x/crypto v0.10.0 // indirect
golang.org/x/crypto v0.13.0 // indirect
golang.org/x/mod v0.8.0 // indirect
golang.org/x/oauth2 v0.8.0 // indirect
golang.org/x/sys v0.9.0 // indirect
golang.org/x/text v0.10.0 // indirect
golang.org/x/oauth2 v0.10.0 // indirect
golang.org/x/sys v0.12.0 // indirect
golang.org/x/text v0.13.0 // indirect
golang.org/x/tools v0.6.0 // indirect
google.golang.org/appengine v1.6.7 // indirect
google.golang.org/genproto v0.0.0-20230306155012-7f2fa6fef1f4 // indirect
google.golang.org/protobuf v1.30.0 // indirect
google.golang.org/genproto v0.0.0-20230711160842-782d3b101e98 // indirect
google.golang.org/genproto/googleapis/api v0.0.0-20230711160842-782d3b101e98 // indirect
google.golang.org/genproto/googleapis/rpc v0.0.0-20230711160842-782d3b101e98 // indirect
google.golang.org/protobuf v1.31.0 // indirect
)

replace k8s.io/client-go v12.0.0+incompatible => k8s.io/client-go v0.21.4
Expand Down
86 changes: 52 additions & 34 deletions go.sum

Large diffs are not rendered by default.

2 changes: 0 additions & 2 deletions grpcclient/instrumentation.go
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
package grpcclient

import (
otgrpc "github.com/opentracing-contrib/go-grpc"
"github.com/opentracing/opentracing-go"
"github.com/prometheus/client_golang/prometheus"
"go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc"
"google.golang.org/grpc"
Expand Down
13 changes: 3 additions & 10 deletions httpgrpc/server/server.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,17 +15,14 @@ import (
"net/url"
"strings"

"github.com/go-kit/log/level"
"github.com/opentracing/opentracing-go"
"github.com/sercand/kuberesolver/v5"
"go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc"
"go.opentelemetry.io/otel"
"go.opentelemetry.io/contrib/instrumentation/net/http/httptrace/otelhttptrace"
"go.opentelemetry.io/otel/trace"
"google.golang.org/grpc"
"google.golang.org/grpc/credentials/insecure"

"github.com/grafana/dskit/httpgrpc"
"github.com/grafana/dskit/log"
"github.com/grafana/dskit/middleware"
)

Expand Down Expand Up @@ -189,12 +186,8 @@ func WriteError(w http.ResponseWriter, err error) {

// ServeHTTP implements http.Handler
func (c *Client) ServeHTTP(w http.ResponseWriter, r *http.Request) {
if tracer := otel.Tracer("github.com/grafana/mimir"); tracer != nil {
span := trace.SpanFromContext(r.Context())
if err := tracer.Inject(span.Context(), opentracing.HTTPHeaders, opentracing.HTTPHeadersCarrier(r.Header)); err != nil {
level.Warn(log.Global()).Log("msg", "failed to inject tracing headers into request", "err", err)
}

if span := trace.SpanFromContext(r.Context()); span.SpanContext().IsValid() {
otelhttptrace.Inject(r.Context(), r)
}

req, err := HTTPRequest(r)
Expand Down
46 changes: 34 additions & 12 deletions httpgrpc/server/server_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,18 +8,23 @@ import (
"bytes"
"context"
"fmt"
"log"
"net"
"net/http"
"net/http/httptest"
"testing"

opentracing "github.com/opentracing/opentracing-go"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
jaegercfg "github.com/uber/jaeger-client-go/config"
"go.opentelemetry.io/otel"
"go.opentelemetry.io/otel/trace"
"go.opentelemetry.io/otel/baggage"
"go.opentelemetry.io/otel/propagation"
"go.opentelemetry.io/otel/sdk/trace/tracetest"
"google.golang.org/grpc"
"google.golang.org/grpc/metadata"

jaegerpropagator "go.opentelemetry.io/contrib/propagators/jaeger"
sdktrace "go.opentelemetry.io/otel/sdk/trace"

"github.com/grafana/dskit/httpgrpc"
"github.com/grafana/dskit/middleware"
Expand Down Expand Up @@ -121,15 +126,26 @@ func TestParseURL(t *testing.T) {
}

func TestTracePropagation(t *testing.T) {
jaeger := jaegercfg.Configuration{}
closer, err := jaeger.InitGlobalTracer("test")
require.NoError(t, err)
defer closer.Close()
tp := sdktrace.NewTracerProvider(
sdktrace.WithSampler(sdktrace.AlwaysSample()),
sdktrace.WithBatcher(tracetest.NewInMemoryExporter()),
)
otel.SetTracerProvider(tp)
otel.SetTextMapPropagator(propagation.NewCompositeTextMapPropagator([]propagation.TextMapPropagator{
propagation.TraceContext{}, propagation.Baggage{},
jaegerpropagator.Jaeger{},
}...))

defer func() {
if err := tp.Shutdown(context.Background()); err != nil {
log.Printf("Error shutting down tracer provider: %v", err)
}
}()

server, err := newTestServer(t, middleware.Tracer{}.Wrap(
http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
span := trace.SpanFromContext(r.Context())
_, err := fmt.Fprint(w, span.BaggageItem("name"))
md, _ := metadata.FromIncomingContext(r.Context())
_, err := fmt.Fprint(w, md.Get("baggage")[0])
require.NoError(t, err)
}),
))
Expand All @@ -143,13 +159,19 @@ func TestTracePropagation(t *testing.T) {
req, err := http.NewRequest("GET", "/hello", &bytes.Buffer{})
require.NoError(t, err)

ctx, sp := otel.Tracer("github.com/grafana/mimir").Start(context.Background(), "Test")
sp.SetBaggageItem("name", "world")
ctx, sp := otel.Tracer("").Start(req.Context(), "Test")
defer sp.End()
meb, err := baggage.NewMember("name", "world")
require.NoError(t, err)
bg, err := baggage.New(meb)
require.NoError(t, err)
ctx = baggage.ContextWithBaggage(ctx, bg)

req = req.WithContext(user.InjectOrgID(ctx, "1"))
recorder := httptest.NewRecorder()

client.ServeHTTP(recorder, req)

assert.Equal(t, "world", recorder.Body.String())
assert.Equal(t, "name=world", recorder.Body.String())
assert.Equal(t, 200, recorder.Code)
}
21 changes: 9 additions & 12 deletions instrument/instrument.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,9 @@ import (
"context"
"time"

"github.com/opentracing/opentracing-go"
"github.com/opentracing/opentracing-go/ext"
"github.com/prometheus/client_golang/prometheus"
"go.opentelemetry.io/otel"
attribute "go.opentelemetry.io/otel/attribute"
"go.opentelemetry.io/otel/attribute"
"go.opentelemetry.io/otel/trace"

"github.com/grafana/dskit/grpcutil"
Expand Down Expand Up @@ -74,7 +72,7 @@ func (c *HistogramCollector) After(ctx context.Context, method, statusCode strin
// 'histogram' parameter must be castable to prometheus.ExemplarObserver or function will panic
// (this will always work for a HistogramVec).
func ObserveWithExemplar(ctx context.Context, histogram prometheus.Observer, seconds float64) {
if traceID, ok := tracing.ExtractSampledTraceID(ctx); ok {
if traceID, ok := tracing.ExtractOtelSampledTraceID(ctx); ok {
histogram.(prometheus.ExemplarObserver).ObserveWithExemplar(
seconds,
prometheus.Labels{"traceID": traceID},
Expand Down Expand Up @@ -154,19 +152,18 @@ func (c *JobCollector) After(_ context.Context, method, statusCode string, start
// CollectedRequest runs a tracked request. It uses the given Collector to monitor requests.
//
// If `f` returns no error we log "200" as status code, otherwise "500". Pass in a function
// for `toStatusCode` to overwrite this behaviour. It will also emit an OpenTracing span if
// for `toStatusCode` to overwrite this behaviour. It will also emit an otel span if
// you have a global tracer configured.
func CollectedRequest(ctx context.Context, method string, col Collector, toStatusCode func(error) string, f func(context.Context) error) error {
if toStatusCode == nil {
toStatusCode = ErrorCode
}
newCtx, sp := otel.Tracer("github.com/grafana/mimir").Start(ctx, method)
ext.SpanKindRPCClient.Set(sp)
newCtx, sp := otel.Tracer("").Start(ctx, method, trace.WithSpanKind(trace.SpanKindClient))
if userID, err := user.ExtractUserID(ctx); err == nil {
sp.SetTag("user", userID)
sp.SetAttributes(attribute.String("user", userID))
}
if orgID, err := user.ExtractOrgID(ctx); err == nil {
sp.SetTag("organization", orgID)
sp.SetAttributes(attribute.String("organization", orgID))
}

start := time.Now()
Expand All @@ -176,11 +173,11 @@ func CollectedRequest(ctx context.Context, method string, col Collector, toStatu

if err != nil {
if !grpcutil.IsCanceled(err) {
ext.Error.Set(sp, true)
sp.RecordError(err, trace.WithStackTrace(true))
}
sp.AddEvent("", trace.WithAttributes(attribute.Error(err)))
sp.AddEvent("error", trace.WithAttributes(attribute.String("msg", err.Error())))
}
sp.Finish()
sp.End()

return err
}
Expand Down
Loading

0 comments on commit 3e456e1

Please sign in to comment.