Skip to content

Commit aadd88c

Browse files
Support OpenTelemetry SDK
When OpenTelemetry is enabled Skipper registers global OpenTelemetry TracerProvider and creates a bridge OpenTracing tracer. This follows recommended migration strategy https://opentelemetry.io/docs/migration/opentracing/#migration-overview OpenTelemetry Init reads configuration options from standard environment variables and allows additional options as a command line flag in yaml format to simplify parsing. FilterContext logger uses last 16 hexadecimal characters of bridge span trace id which could be used to lookup traces e.g. by trace_id attribute. Updates #2104 Signed-off-by: Alexander Yastrebov <alexander.yastrebov@zalando.de>
1 parent 0ad4457 commit aadd88c

6 files changed

Lines changed: 307 additions & 53 deletions

File tree

config/config.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import (
2121
"github.com/zalando/skipper/eskip"
2222
"github.com/zalando/skipper/filters/openpolicyagent"
2323
"github.com/zalando/skipper/net"
24+
"github.com/zalando/skipper/otel"
2425
"github.com/zalando/skipper/proxy"
2526
"github.com/zalando/skipper/swarm"
2627
)
@@ -117,6 +118,8 @@ type Config struct {
117118
AccessLogStripQuery bool `yaml:"access-log-strip-query"`
118119
SuppressRouteUpdateLogs bool `yaml:"suppress-route-update-logs"`
119120

121+
OpenTelemetry *otel.Options `yaml:"open-telemetry"`
122+
120123
// route sources:
121124
EtcdUrls string `yaml:"etcd-urls"`
122125
EtcdPrefix string `yaml:"etcd-prefix"`
@@ -434,6 +437,8 @@ func NewConfig() *Config {
434437
flag.BoolVar(&cfg.AccessLogStripQuery, "access-log-strip-query", false, "when this flag is set, the access log strips the query strings from the access log")
435438
flag.BoolVar(&cfg.SuppressRouteUpdateLogs, "suppress-route-update-logs", false, "print only summaries on route updates/deletes")
436439

440+
flag.Var(newYamlFlag(&cfg.OpenTelemetry), "open-telemetry", "OpenTelemetry configuration in YAML format, use flow-style for convenience")
441+
437442
// route sources:
438443
flag.StringVar(&cfg.EtcdUrls, "etcd-urls", "", "urls of nodes in an etcd cluster, storing route definitions")
439444
flag.StringVar(&cfg.EtcdPrefix, "etcd-prefix", "/skipper", "path prefix for skipper related data in etcd")
@@ -850,6 +855,8 @@ func (c *Config) ToOptions() skipper.Options {
850855
AccessLogStripQuery: c.AccessLogStripQuery,
851856
SuppressRouteUpdateLogs: c.SuppressRouteUpdateLogs,
852857

858+
OpenTelemetry: c.OpenTelemetry,
859+
853860
// route sources:
854861
EtcdUrls: eus,
855862
EtcdPrefix: c.EtcdPrefix,

go.mod

Lines changed: 37 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,13 @@ require (
4747
github.com/uber/jaeger-lib v2.4.1+incompatible
4848
github.com/yookoala/gofast v0.8.0
4949
github.com/yuin/gopher-lua v1.1.1
50+
go.opentelemetry.io/contrib/exporters/autoexport v0.62.0
51+
go.opentelemetry.io/contrib/propagators/autoprop v0.62.0
52+
go.opentelemetry.io/otel v1.37.0
53+
go.opentelemetry.io/otel/bridge/opentracing v1.26.0
54+
go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.37.0
55+
go.opentelemetry.io/otel/sdk v1.37.0
56+
go.opentelemetry.io/otel/trace v1.37.0
5057
go4.org/netipx v0.0.0-20220925034521-797b0c90d8ab
5158
golang.org/x/crypto v0.39.0
5259
golang.org/x/exp v0.0.0-20241217172543-b2144cdd0a67
@@ -74,7 +81,8 @@ require (
7481
github.com/bmizerany/perks v0.0.0-20141205001514-d9a9656a3a4b // indirect
7582
github.com/bytecodealliance/wasmtime-go/v3 v3.0.2 // indirect
7683
github.com/cenkalti/backoff/v4 v4.3.0 // indirect
77-
github.com/cncf/xds/go v0.0.0-20241223141626-cff3c89139a3 // indirect
84+
github.com/cenkalti/backoff/v5 v5.0.2 // indirect
85+
github.com/cncf/xds/go v0.0.0-20250326154945-ae57f3c0d45f // indirect
7886
github.com/containerd/containerd v1.7.27 // indirect
7987
github.com/containerd/errdefs v1.0.0 // indirect
8088
github.com/containerd/log v0.1.0 // indirect
@@ -94,7 +102,7 @@ require (
94102
github.com/fsnotify/fsnotify v1.8.0 // indirect
95103
github.com/go-ini/ini v1.67.0 // indirect
96104
github.com/go-jose/go-jose/v4 v4.0.5 // indirect
97-
github.com/go-logr/logr v1.4.2 // indirect
105+
github.com/go-logr/logr v1.4.3 // indirect
98106
github.com/go-logr/stdr v1.2.2 // indirect
99107
github.com/go-ole/go-ole v1.2.6 // indirect
100108
github.com/gobwas/glob v0.2.3 // indirect
@@ -103,7 +111,7 @@ require (
103111
github.com/google/btree v1.0.0 // indirect
104112
github.com/google/flatbuffers v25.2.10+incompatible // indirect
105113
github.com/gorilla/mux v1.8.1 // indirect
106-
github.com/grpc-ecosystem/grpc-gateway/v2 v2.26.1 // indirect
114+
github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.1 // indirect
107115
github.com/hashicorp/errwrap v1.1.0 // indirect
108116
github.com/hashicorp/go-immutable-radix v1.3.1 // indirect
109117
github.com/hashicorp/go-metrics v0.5.4 // indirect
@@ -139,8 +147,8 @@ require (
139147
github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 // indirect
140148
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
141149
github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c // indirect
142-
github.com/prometheus/common v0.62.0 // indirect
143-
github.com/prometheus/procfs v0.15.1 // indirect
150+
github.com/prometheus/common v0.65.0 // indirect
151+
github.com/prometheus/procfs v0.16.1 // indirect
144152
github.com/rivo/uniseg v0.4.7 // indirect
145153
github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529 // indirect
146154
github.com/shirou/gopsutil/v4 v4.25.1 // indirect
@@ -155,25 +163,38 @@ require (
155163
github.com/yashtewari/glob-intersection v0.2.0 // indirect
156164
github.com/yusufpapurcu/wmi v1.2.4 // indirect
157165
go.opentelemetry.io/auto/sdk v1.1.0 // indirect
166+
go.opentelemetry.io/contrib/bridges/prometheus v0.62.0 // indirect
158167
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.60.0 // indirect
159-
go.opentelemetry.io/otel v1.35.0 // indirect
160-
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.35.0 // indirect
161-
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.35.0 // indirect
162-
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.35.0 // indirect
163-
go.opentelemetry.io/otel/metric v1.35.0 // indirect
164-
go.opentelemetry.io/otel/sdk v1.35.0 // indirect
165-
go.opentelemetry.io/otel/trace v1.35.0 // indirect
166-
go.opentelemetry.io/proto/otlp v1.5.0 // indirect
168+
go.opentelemetry.io/contrib/propagators/aws v1.37.0 // indirect
169+
go.opentelemetry.io/contrib/propagators/b3 v1.37.0 // indirect
170+
go.opentelemetry.io/contrib/propagators/jaeger v1.37.0 // indirect
171+
go.opentelemetry.io/contrib/propagators/ot v1.37.0 // indirect
172+
go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.13.0 // indirect
173+
go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.13.0 // indirect
174+
go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.37.0 // indirect
175+
go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.37.0 // indirect
176+
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.37.0 // indirect
177+
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.37.0 // indirect
178+
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.37.0 // indirect
179+
go.opentelemetry.io/otel/exporters/prometheus v0.59.0 // indirect
180+
go.opentelemetry.io/otel/exporters/stdout/stdoutlog v0.13.0 // indirect
181+
go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.37.0 // indirect
182+
go.opentelemetry.io/otel/log v0.13.0 // indirect
183+
go.opentelemetry.io/otel/metric v1.37.0 // indirect
184+
go.opentelemetry.io/otel/sdk/log v0.13.0 // indirect
185+
go.opentelemetry.io/otel/sdk/metric v1.37.0 // indirect
186+
go.opentelemetry.io/proto/otlp v1.7.0 // indirect
167187
go.uber.org/atomic v1.9.0 // indirect
168188
go.uber.org/automaxprocs v1.6.0 // indirect
189+
go.uber.org/multierr v1.11.0 // indirect
169190
golang.org/x/mod v0.25.0 // indirect
170191
golang.org/x/sys v0.33.0 // indirect
171192
golang.org/x/text v0.26.0 // indirect
172193
golang.org/x/tools v0.33.0 // indirect
173194
gonum.org/v1/gonum v0.8.2 // indirect
174-
google.golang.org/genproto/googleapis/api v0.0.0-20250218202821-56aae31c358a // indirect
175-
google.golang.org/genproto/googleapis/rpc v0.0.0-20250218202821-56aae31c358a // indirect
176-
google.golang.org/grpc v1.71.1 // indirect
195+
google.golang.org/genproto/googleapis/api v0.0.0-20250603155806-513f23925822 // indirect
196+
google.golang.org/genproto/googleapis/rpc v0.0.0-20250603155806-513f23925822 // indirect
197+
google.golang.org/grpc v1.73.0 // indirect
177198
gopkg.in/yaml.v3 v3.0.1 // indirect
178199
oras.land/oras-go/v2 v2.5.0 // indirect
179200
sigs.k8s.io/yaml v1.4.0 // indirect

0 commit comments

Comments
 (0)