Compare commits

...

24 Commits

Author SHA1 Message Date
Mohammed Al Sahaf e50e3ed93a create otel transport in Provision
Signed-off-by: Mohammed Al Sahaf <msaa1990@gmail.com>
2025-09-01 20:03:17 +03:00
Mohammed Al Sahaf 9dfc038d38 fix comment
Signed-off-by: Mohammed Al Sahaf <msaa1990@gmail.com>
2025-08-30 03:23:06 +03:00
Mohammed Al Sahaf d3e97f82e8 fix comment
Signed-off-by: Mohammed Al Sahaf <msaa1990@gmail.com>
2025-08-30 03:21:14 +03:00
Mohammed Al Sahaf 1c7d0e296b re-inject propagator header
Signed-off-by: Mohammed Al Sahaf <msaa1990@gmail.com>
2025-08-30 03:19:41 +03:00
Mohammed Al Sahaf 1aac622b1b lint
Signed-off-by: Mohammed Al Sahaf <msaa1990@gmail.com>
2025-08-29 18:11:50 +03:00
Mohammed Al Sahaf 91778c5f94 Merge branch 'master' into pr-6417
Signed-off-by: Mohammed Al Sahaf <msaa1990@gmail.com>
2025-08-29 18:11:09 +03:00
Cedric Ziel 5ccad835d7 fix: gofumpt 2024-10-02 16:35:29 +02:00
Matt Holt a0b1a8de3d Merge branch 'master' into trace-servicegraph 2024-10-02 08:08:04 -06:00
Cedric Ziel ced6ba4e13 fix: set global propagator 2024-06-22 19:05:25 +02:00
Cedric Ziel ae1d4ef05c fix: dont inject twice 2024-06-22 19:00:23 +02:00
Cedric Ziel ed087ecdfd fix: lint 2024-06-22 16:16:10 +02:00
Cedric Ziel 558e28d02b fix: lint 2024-06-22 16:01:01 +02:00
Cedric Ziel 72ab14fb58 fix: lint 2024-06-22 15:53:23 +02:00
Cedric Ziel f58b6fbca2 fix: shorten config 2024-06-22 15:47:15 +02:00
Cedric Ziel 3d93ce464c fix: gofumpt 2024-06-22 15:39:16 +02:00
Cedric Ziel f704d0b3c8 fix: clean fixture 2024-06-22 15:36:39 +02:00
Cedric Ziel 023999e073 Update modules/caddyhttp/tracing/module.go
Co-authored-by: Mohammed Al Sahaf <mohammed@caffeinatedwonders.com>
2024-06-22 15:36:13 +02:00
Cedric Ziel b6966f4797 fix: fix config 2024-06-22 15:35:37 +02:00
Cedric Ziel 9f9d9c56cf fix: amend test to capture new default 2024-06-22 15:29:40 +02:00
Cedric Ziel 8f4075491b fix: switch to use roundtripper from otel 2024-06-22 15:07:04 +02:00
Cedric Ziel 5f9398cede feat: record client span for reverseproxy scenarios 2024-06-22 14:49:35 +02:00
Cedric Ziel 6c05741154 fix: inject server-timing when configured 2024-06-22 14:29:26 +02:00
Cedric Ziel bb450ed304 fix: correct to span_id 2024-06-22 14:10:57 +02:00
Cedric Ziel e35ce3d005 feat: inject span_id as var and log context 2024-06-22 13:21:12 +02:00
5 changed files with 34 additions and 18 deletions
@@ -33,4 +33,4 @@
}
}
}
}
}
@@ -34,6 +34,7 @@ import (
"sync"
"time"
"go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp"
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
"golang.org/x/net/http/httpguts"
@@ -256,6 +257,7 @@ func (h *Handler) Provision(ctx caddy.Context) error {
if module, ok := h.Transport.(caddy.Module); ok && module.CaddyModule().ID.Name() == "fastcgi" && h.RequestBuffers == 0 {
h.RequestBuffers = 4096
}
h.Transport = otelhttp.NewTransport(h.Transport)
}
if h.LoadBalancing != nil && h.LoadBalancing.SelectionPolicyRaw != nil {
mod, err := ctx.LoadModule(h.LoadBalancing, "SelectionPolicyRaw")
+16 -7
View File
@@ -25,7 +25,8 @@ func init() {
type Tracing struct {
// SpanName is a span name. It should follow the naming guidelines here:
// https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/trace/api.md#span
SpanName string `json:"span"`
SpanName string `json:"span"`
InjectServerTimingHeader bool `json:"server_timing,omitempty"`
// otel implements opentelemetry related logic.
otel openTelemetryWrapper
@@ -46,7 +47,7 @@ func (ot *Tracing) Provision(ctx caddy.Context) error {
ot.logger = ctx.Logger()
var err error
ot.otel, err = newOpenTelemetryWrapper(ctx, ot.SpanName)
ot.otel, err = newOpenTelemetryWrapper(ctx, ot.SpanName, ot.InjectServerTimingHeader)
return err
}
@@ -68,6 +69,7 @@ func (ot *Tracing) ServeHTTP(w http.ResponseWriter, r *http.Request, next caddyh
// UnmarshalCaddyfile sets up the module from Caddyfile tokens. Syntax:
//
// tracing {
// [server_timing]
// [span <span_name>]
// }
func (ot *Tracing) UnmarshalCaddyfile(d *caddyfile.Dispenser) error {
@@ -94,12 +96,19 @@ func (ot *Tracing) UnmarshalCaddyfile(d *caddyfile.Dispenser) error {
}
for d.NextBlock(0) {
if dst, ok := paramsMap[d.Val()]; ok {
if err := setParameter(d, dst); err != nil {
return err
switch d.Val() {
case "server_timing":
if d.NextArg() {
ot.InjectServerTimingHeader = true
}
default:
if dst, ok := paramsMap[d.Val()]; ok {
if err := setParameter(d, dst); err != nil {
return err
}
} else {
return d.ArgErr()
}
} else {
return d.ArgErr()
}
}
return nil
+14 -7
View File
@@ -7,6 +7,7 @@ import (
"go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp"
"go.opentelemetry.io/contrib/propagators/autoprop"
"go.opentelemetry.io/otel"
"go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc"
"go.opentelemetry.io/otel/propagation"
"go.opentelemetry.io/otel/sdk/resource"
@@ -37,20 +38,19 @@ type openTelemetryWrapper struct {
handler http.Handler
spanName string
spanName string
injectServerTimingHeader bool
}
// newOpenTelemetryWrapper is responsible for the openTelemetryWrapper initialization using provided configuration.
func newOpenTelemetryWrapper(
ctx context.Context,
spanName string,
) (openTelemetryWrapper, error) {
func newOpenTelemetryWrapper(ctx context.Context, spanName string, injectServerTimingHeader bool) (openTelemetryWrapper, error) {
if spanName == "" {
spanName = defaultSpanName
}
ot := openTelemetryWrapper{
spanName: spanName,
injectServerTimingHeader: injectServerTimingHeader,
spanName: spanName,
}
version, _ := caddy.Version()
@@ -64,7 +64,9 @@ func newOpenTelemetryWrapper(
return ot, fmt.Errorf("creating trace exporter error: %w", err)
}
ot.propagators = autoprop.NewTextMapPropagator()
prop := autoprop.NewTextMapPropagator()
otel.SetTextMapPropagator(prop)
ot.propagators = prop
tracerProvider := globalTracerProvider.getTracerProvider(
sdktrace.WithBatcher(traceExporter),
@@ -98,6 +100,11 @@ func (ot *openTelemetryWrapper) serveHTTP(w http.ResponseWriter, r *http.Request
extra.Add(zap.String("traceID", traceID))
extra.Add(zap.String("spanID", spanID))
}
// Add the server-timing header so clients can make the connection
if ot.injectServerTimingHeader {
w.Header().Set("server-timing", fmt.Sprintf("traceparent;desc=\"00-%s-%s-%s\"", traceID, spanID, spanCtx.TraceFlags().String()))
}
}
next := ctx.Value(nextCallCtxKey).(*nextCall)
next.err = next.next.ServeHTTP(w, r)
+1 -3
View File
@@ -14,9 +14,7 @@ func TestOpenTelemetryWrapper_newOpenTelemetryWrapper(t *testing.T) {
var otw openTelemetryWrapper
var err error
if otw, err = newOpenTelemetryWrapper(ctx,
"",
); err != nil {
if otw, err = newOpenTelemetryWrapper(ctx, "", false); err != nil {
t.Errorf("newOpenTelemetryWrapper() error = %v", err)
t.FailNow()
}