feat(telemetry): bridge configurable gateway trace headers
This commit is contained in:
@@ -21,10 +21,11 @@ import (
|
||||
)
|
||||
|
||||
type Config struct {
|
||||
Service string `json:"service"`
|
||||
SampleRatio float64 `json:"sampleRatio"`
|
||||
Exporter sdktrace.SpanExporter `json:"-"`
|
||||
Reader sdkmetric.Reader `json:"-"`
|
||||
Service string `json:"service"`
|
||||
SampleRatio float64 `json:"sampleRatio"`
|
||||
Exporter sdktrace.SpanExporter `json:"-"`
|
||||
Reader sdkmetric.Reader `json:"-"`
|
||||
Propagator propagation.TextMapPropagator `json:"-"`
|
||||
}
|
||||
type Runtime struct {
|
||||
traces *sdktrace.TracerProvider
|
||||
@@ -48,7 +49,11 @@ func New(cfg Config) (*Runtime, error) {
|
||||
if cfg.Reader != nil {
|
||||
metricOptions = append(metricOptions, sdkmetric.WithReader(cfg.Reader))
|
||||
}
|
||||
r := &Runtime{traces: sdktrace.NewTracerProvider(traceOptions...), meters: sdkmetric.NewMeterProvider(metricOptions...), propagator: propagation.TraceContext{}}
|
||||
propagator := cfg.Propagator
|
||||
if propagator == nil {
|
||||
propagator = propagation.TraceContext{}
|
||||
}
|
||||
r := &Runtime{traces: sdktrace.NewTracerProvider(traceOptions...), meters: sdkmetric.NewMeterProvider(metricOptions...), propagator: propagator}
|
||||
r.tracer = r.traces.Tracer("git.yuntuo.hk/k2safe/go-omni")
|
||||
meter := r.meters.Meter("git.yuntuo.hk/k2safe/go-omni")
|
||||
r.duration, _ = meter.Float64Histogram("http.server.request.duration", metric.WithUnit("s"), metric.WithExplicitBucketBoundaries(.005, .01, .025, .05, .1, .25, .5, 1, 2.5, 5, 10))
|
||||
@@ -121,8 +126,14 @@ func (r *Runtime) Middleware() httpx.Middleware {
|
||||
r.duration.Record(ctx, time.Since(started).Seconds(), metric.WithAttributes(attrs...))
|
||||
span.End()
|
||||
// Preserve correlation for outer access-log middleware without
|
||||
// exposing an ended span as its active span.
|
||||
c.WithContext(logx.WithTraceID(parent, span.SpanContext().TraceID().String()))
|
||||
// exposing an ended span as its active span. A custom propagator may
|
||||
// have supplied a request ID that the built-in RequestID middleware
|
||||
// did not know about, so carry that value back as well.
|
||||
outer := logx.WithTraceID(parent, span.SpanContext().TraceID().String())
|
||||
if requestID := logx.RequestID(ctx); requestID != "" {
|
||||
outer = logx.WithRequestID(outer, requestID)
|
||||
}
|
||||
c.WithContext(outer)
|
||||
if p != nil {
|
||||
panic(p)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user