API Server: Include traceID in HTTP request logs (#88179)

This commit is contained in:
Marcus Efraimsson
2024-05-22 17:56:34 +02:00
committed by GitHub
parent 10f600a6e9
commit 8ea0b336d5
4 changed files with 40 additions and 37 deletions
+3 -1
View File
@@ -91,7 +91,9 @@ func SetupConfig(
panic(fmt.Sprintf("could not build handler chain func: %s", err.Error()))
}
handler := genericapiserver.DefaultBuildHandlerChain(requestHandler, c)
// Needs to run last in request chain to function as expected, hence we register it first.
handler := filters.WithTracingHTTPLoggingAttributes(requestHandler)
handler = genericapiserver.DefaultBuildHandlerChain(handler, c)
handler = filters.WithAcceptHeader(handler)
handler = filters.WithPathRewriters(handler, pathRewriters)
handler = k8stracing.WithTracing(handler, serverConfig.TracerProvider, "KubernetesAPI")
@@ -0,0 +1,26 @@
package filters
import (
"net/http"
"go.opentelemetry.io/otel/trace"
"k8s.io/apiserver/pkg/server/httplog"
)
// WithTracingHTTPLoggingAttributes adds tracing attributes to HTTP request logs.
func WithTracingHTTPLoggingAttributes(handler http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
spanCtx := trace.SpanContextFromContext(r.Context())
if spanCtx.IsValid() {
if spanCtx.HasTraceID() {
httplog.AddKeyValue(r.Context(), "traceID", spanCtx.TraceID().String())
}
if spanCtx.HasSpanID() {
httplog.AddKeyValue(r.Context(), "spanID", spanCtx.SpanID().String())
}
}
handler.ServeHTTP(w, r)
})
}
+1 -1
View File
@@ -9,6 +9,7 @@ require (
github.com/grafana/grafana/pkg/apimachinery v0.0.0-20240409140820-518d3341d58f
github.com/prometheus/client_golang v1.19.0
github.com/stretchr/testify v1.9.0
go.opentelemetry.io/otel/trace v1.26.0
golang.org/x/mod v0.15.0
k8s.io/apimachinery v0.29.2
k8s.io/apiserver v0.29.2
@@ -122,7 +123,6 @@ require (
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.26.0 // indirect
go.opentelemetry.io/otel/metric v1.26.0 // indirect
go.opentelemetry.io/otel/sdk v1.26.0 // indirect
go.opentelemetry.io/otel/trace v1.26.0 // indirect
go.opentelemetry.io/proto/otlp v1.2.0 // indirect
go.uber.org/multierr v1.11.0 // indirect
go.uber.org/zap v1.26.0 // indirect