Skip to content

Commit

Permalink
[WIP] Add OpenTelemetry support to proxy code
Browse files Browse the repository at this point in the history
Signed-off-by: Lucas Thiesen <[email protected]>
  • Loading branch information
lucastt committed Nov 16, 2023
1 parent 7b78485 commit d3c7c92
Show file tree
Hide file tree
Showing 12 changed files with 299 additions and 120 deletions.
6 changes: 5 additions & 1 deletion filters/filters.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import (
log "github.com/sirupsen/logrus"

"github.com/opentracing/opentracing-go"
otelTrace "go.opentelemetry.io/otel/trace"
)

const (
Expand Down Expand Up @@ -110,9 +111,12 @@ type FilterContext interface {
// Allow filters to add Tags, Baggage to the trace or set the ComponentName.
Tracer() opentracing.Tracer

// Allow filters to create their own spans
// Allow filters to create their own open tracing spans
ParentSpan() opentracing.Span

// Allow filters to create their own open tracing spans
ParentOtelSpan() otelTrace.Span

// Returns a clone of the FilterContext including a brand new request object.
// The stream body of the new request is shared with the original.
// Whenever the request body of the original request is read, the body of the
Expand Down
4 changes: 2 additions & 2 deletions filters/scheduler/fifo_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -278,7 +278,7 @@ func TestFifo(t *testing.T) {
tracer := &testTracer{MockTracer: mocktracer.New()}
pr := proxy.WithParams(proxy.Params{
Routing: rt,
OpenTracing: &proxy.OpenTracingParams{Tracer: tracer},
OpenTracing: &proxy.TracingParams{OtTracer: tracer},
})
defer pr.Close()

Expand Down Expand Up @@ -431,7 +431,7 @@ func TestConstantRouteUpdatesFifo(t *testing.T) {
tracer := &testTracer{MockTracer: mocktracer.New()}
pr := proxy.WithParams(proxy.Params{
Routing: rt,
OpenTracing: &proxy.OpenTracingParams{Tracer: tracer},
OpenTracing: &proxy.TracingParams{OtTracer: tracer},
})
defer pr.Close()

Expand Down
2 changes: 1 addition & 1 deletion filters/scheduler/lifo_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -511,7 +511,7 @@ func TestLifoErrors(t *testing.T) {
tracer := &testTracer{MockTracer: mocktracer.New()}
pr := proxy.WithParams(proxy.Params{
Routing: rt,
OpenTracing: &proxy.OpenTracingParams{Tracer: tracer},
OpenTracing: &proxy.TracingParams{OtTracer: tracer},
})
defer pr.Close()

Expand Down
22 changes: 14 additions & 8 deletions proxy/context.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ import (
"github.com/zalando/skipper/metrics"
"github.com/zalando/skipper/routing"
"github.com/zalando/skipper/tracing"
otelTrace "go.opentelemetry.io/otel/trace"

log "github.com/sirupsen/logrus"
)
Expand All @@ -34,6 +35,7 @@ type context struct {
deprecatedServed bool
servedWithResponse bool // to support the deprecated way independently
successfulUpgrade bool
useOtel bool
pathParams map[string]string
stateBag map[string]interface{}
originalRequest *http.Request
Expand All @@ -43,10 +45,11 @@ type context struct {
executionCounter int
startServe time.Time
metrics *filterMetrics
tracer opentracing.Tracer
initialSpan opentracing.Span
proxySpan opentracing.Span
parentSpan opentracing.Span
otTracer opentracing.Tracer
otelTracer otelTrace.Tracer
initialSpan *tracing.SpanWrapper
proxySpan *tracing.SpanWrapper
parentSpan *tracing.SpanWrapper
proxy *Proxy
routeLookup *routing.RouteLookup
cancelBackendContext stdlibcontext.CancelFunc
Expand Down Expand Up @@ -212,12 +215,15 @@ func (c *context) OriginalResponse() *http.Response { return c.originalRespon
func (c *context) OutgoingHost() string { return c.outgoingHost }
func (c *context) SetOutgoingHost(h string) { c.outgoingHost = h }
func (c *context) Metrics() filters.Metrics { return c.metrics }
func (c *context) Tracer() opentracing.Tracer { return c.tracer }
func (c *context) ParentSpan() opentracing.Span { return c.parentSpan }
func (c *context) Tracer() opentracing.Tracer { return c.otTracer }
func (c *context) ParentSpan() opentracing.Span { return c.parentSpan.Ot }
func (c *context) ParentOtelSpan() otelTrace.Span { return c.parentSpan.Otel }

func (c *context) ParentSpanWrapper() *tracing.SpanWrapper { return c.parentSpan }

func (c *context) Logger() filters.FilterContextLogger {
if c.logger == nil {
traceId := tracing.GetTraceID(c.initialSpan)
traceId := tracing.GetTraceID(c.initialSpan.Ot)
if traceId != "" {
c.logger = log.WithFields(log.Fields{"trace_id": traceId})
} else {
Expand Down Expand Up @@ -308,7 +314,7 @@ func (c *context) Loopback() {
}
if c.proxySpan != nil {
c.proxy.tracing.setTag(c.proxySpan, "shadow", "true")
c.proxySpan.Finish()
c.proxySpan.Ot.Finish()
}

perr, ok := err.(*proxyError)
Expand Down
Loading

0 comments on commit d3c7c92

Please sign in to comment.