feat(http): propagate traceparent for httpclient

Co-authored-by: tronghn <trong.huu.nguyen@nav.no>
This commit is contained in:
Sindre Rødseth Hansen
2025-01-28 14:17:57 +01:00
committed by Trong Huu Nguyen
parent bf83a58795
commit ca77435d6a
6 changed files with 34 additions and 24 deletions

1
go.mod
View File

@@ -23,6 +23,7 @@ require (
github.com/spf13/viper v1.19.0
github.com/stretchr/testify v1.10.0
github.com/uptrace/opentelemetry-go-extra/otellogrus v0.3.2
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0
go.opentelemetry.io/otel v1.34.0
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.34.0
go.opentelemetry.io/otel/sdk v1.34.0

2
go.sum
View File

@@ -158,6 +158,8 @@ github.com/yuin/gopher-lua v1.1.1 h1:kYKnWBjvbNP4XLT3+bPEwAXJx262OhaHDWDVOPjL46M
github.com/yuin/gopher-lua v1.1.1/go.mod h1:GBR0iDaNXjAgGg9zfCvksxSRnQx76gclCIb7kdAd1Pw=
go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA=
go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A=
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 h1:jq9TW8u3so/bN+JPT166wjOI6/vQPF6Xe7nMNIltagk=
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0/go.mod h1:p8pYQP+m5XfbZm9fxtSKAbM6oIllS7s2AfxrChvc7iw=
go.opentelemetry.io/otel v1.34.0 h1:zRLXxLCgL1WyKsPVrgbSdMN4c0FMkDAskSTQP+0hdUY=
go.opentelemetry.io/otel v1.34.0/go.mod h1:OWFPOQ+h4G8xpyjgqo4SxJYdDQ/qmRH+wivy7zzx9oI=
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.34.0 h1:OeNbIYk/2C15ckl7glBlOBp5+WlYsOElzTNmiPW/x60=

View File

@@ -0,0 +1,27 @@
package http
import (
"net/http"
"sync"
"time"
"go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp"
)
var (
defaultTransport *http.Transport
once sync.Once
)
func Transport() http.RoundTripper {
once.Do(func() {
t := http.DefaultTransport.(*http.Transport).Clone()
t.MaxIdleConns = 200
t.MaxIdleConnsPerHost = 100
t.IdleConnTimeout = 5 * time.Second
defaultTransport = t
})
return otelhttp.NewTransport(defaultTransport)
}

View File

@@ -14,7 +14,6 @@ import (
"github.com/nais/wonderwall/pkg/handler/acr"
"github.com/nais/wonderwall/pkg/handler/autologin"
mw "github.com/nais/wonderwall/pkg/middleware"
"github.com/nais/wonderwall/pkg/server"
"github.com/nais/wonderwall/pkg/session"
"github.com/nais/wonderwall/pkg/url"
)
@@ -76,7 +75,7 @@ func NewReverseProxy(upstream *urllib.URL, preserveInboundHostHeader bool) *Reve
r.Out.Header.Set("X-Wonderwall-Id-Token", idToken)
}
},
Transport: server.DefaultTransport(),
Transport: httpinternal.Transport(),
}
return &ReverseProxy{
ReverseProxy: rp,

View File

@@ -10,6 +10,8 @@ import (
"strings"
"time"
httpinternal "github.com/nais/wonderwall/internal/http"
"github.com/google/uuid"
"github.com/lestrrat-go/jwx/v2/jwk"
"github.com/lestrrat-go/jwx/v2/jwt"
@@ -17,7 +19,6 @@ import (
"github.com/nais/wonderwall/pkg/openid"
openidconfig "github.com/nais/wonderwall/pkg/openid/config"
"github.com/nais/wonderwall/pkg/server"
urlpkg "github.com/nais/wonderwall/pkg/url"
)
@@ -55,7 +56,7 @@ func NewClient(cfg openidconfig.Config, jwksProvider JwksProvider) *Client {
httpClient := &http.Client{
Timeout: time.Second * 10,
Transport: server.DefaultTransport(),
Transport: httpinternal.Transport(),
}
return &Client{

View File

@@ -6,7 +6,6 @@ import (
"net/http"
"os"
"os/signal"
"sync"
"syscall"
"time"
@@ -16,25 +15,6 @@ import (
"github.com/nais/wonderwall/pkg/config"
)
var (
defaultTransport *http.Transport
once sync.Once
)
// TODO: use otel to propagate trace_id
func DefaultTransport() *http.Transport {
once.Do(func() {
t := http.DefaultTransport.(*http.Transport).Clone()
t.MaxIdleConns = 200
t.MaxIdleConnsPerHost = 100
t.IdleConnTimeout = 5 * time.Second
defaultTransport = t
})
return defaultTransport
}
func Start(cfg *config.Config, r chi.Router) error {
server := http.Server{
Addr: cfg.BindAddress,