Skip to content

Commit 3cfa267

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. Updates #2104 Signed-off-by: Alexander Yastrebov <alexander.yastrebov@zalando.de>
1 parent 1b0f0bc commit 3cfa267

6 files changed

Lines changed: 316 additions & 54 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.63.0
51+
go.opentelemetry.io/contrib/propagators/autoprop v0.63.0
52+
go.opentelemetry.io/otel v1.38.0
53+
go.opentelemetry.io/otel/bridge/opentracing v1.38.0
54+
go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.38.0
55+
go.opentelemetry.io/otel/sdk v1.38.0
56+
go.opentelemetry.io/otel/trace v1.38.0
5057
go4.org/netipx v0.0.0-20220925034521-797b0c90d8ab
5158
golang.org/x/crypto v0.41.0
5259
golang.org/x/exp v0.0.0-20241217172543-b2144cdd0a67
@@ -73,7 +80,7 @@ require (
7380
github.com/bmizerany/perks v0.0.0-20141205001514-d9a9656a3a4b // indirect
7481
github.com/bytecodealliance/wasmtime-go/v3 v3.0.2 // indirect
7582
github.com/cenkalti/backoff/v4 v4.3.0 // indirect
76-
github.com/cenkalti/backoff/v5 v5.0.2 // indirect
83+
github.com/cenkalti/backoff/v5 v5.0.3 // indirect
7784
github.com/cncf/xds/go v0.0.0-20250501225837-2ac532fd4443 // indirect
7885
github.com/containerd/containerd/v2 v2.1.3 // indirect
7986
github.com/containerd/errdefs v1.0.0 // indirect
@@ -95,7 +102,7 @@ require (
95102
github.com/felixge/httpsnoop v1.0.4 // indirect
96103
github.com/fsnotify/fsnotify v1.9.0 // indirect
97104
github.com/go-ini/ini v1.67.0 // indirect
98-
github.com/go-jose/go-jose/v4 v4.0.5 // indirect
105+
github.com/go-jose/go-jose/v4 v4.1.1 // indirect
99106
github.com/go-logr/logr v1.4.3 // indirect
100107
github.com/go-logr/stdr v1.2.2 // indirect
101108
github.com/go-ole/go-ole v1.2.6 // indirect
@@ -105,7 +112,8 @@ require (
105112
github.com/google/btree v1.0.0 // indirect
106113
github.com/google/flatbuffers v25.2.10+incompatible // indirect
107114
github.com/google/pprof v0.0.0-20250630185457-6e76a2b096b5 // indirect
108-
github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.1 // indirect
115+
github.com/grafana/regexp v0.0.0-20240518133315-a468a5bfb3bc // indirect
116+
github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.2 // indirect
109117
github.com/hashicorp/errwrap v1.1.0 // indirect
110118
github.com/hashicorp/go-immutable-radix v1.3.1 // indirect
111119
github.com/hashicorp/go-metrics v0.5.4 // indirect
@@ -143,7 +151,8 @@ require (
143151
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
144152
github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c // indirect
145153
github.com/prometheus/common v0.66.1 // indirect
146-
github.com/prometheus/procfs v0.16.1 // indirect
154+
github.com/prometheus/otlptranslator v0.0.2 // indirect
155+
github.com/prometheus/procfs v0.17.0 // indirect
147156
github.com/rivo/uniseg v0.4.7 // indirect
148157
github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529 // indirect
149158
github.com/shirou/gopsutil/v4 v4.25.5 // indirect
@@ -159,26 +168,38 @@ require (
159168
github.com/yashtewari/glob-intersection v0.2.0 // indirect
160169
github.com/yusufpapurcu/wmi v1.2.4 // indirect
161170
go.opentelemetry.io/auto/sdk v1.1.0 // indirect
171+
go.opentelemetry.io/contrib/bridges/prometheus v0.63.0 // indirect
162172
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.62.0 // indirect
163-
go.opentelemetry.io/otel v1.37.0 // indirect
164-
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.37.0 // indirect
165-
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.37.0 // indirect
166-
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.37.0 // indirect
167-
go.opentelemetry.io/otel/metric v1.37.0 // indirect
168-
go.opentelemetry.io/otel/sdk v1.37.0 // indirect
169-
go.opentelemetry.io/otel/trace v1.37.0 // indirect
170-
go.opentelemetry.io/proto/otlp v1.7.0 // indirect
173+
go.opentelemetry.io/contrib/propagators/aws v1.38.0 // indirect
174+
go.opentelemetry.io/contrib/propagators/b3 v1.38.0 // indirect
175+
go.opentelemetry.io/contrib/propagators/jaeger v1.38.0 // indirect
176+
go.opentelemetry.io/contrib/propagators/ot v1.38.0 // indirect
177+
go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.14.0 // indirect
178+
go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.14.0 // indirect
179+
go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.38.0 // indirect
180+
go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.38.0 // indirect
181+
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.38.0 // indirect
182+
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.38.0 // indirect
183+
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.38.0 // indirect
184+
go.opentelemetry.io/otel/exporters/prometheus v0.60.0 // indirect
185+
go.opentelemetry.io/otel/exporters/stdout/stdoutlog v0.14.0 // indirect
186+
go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.38.0 // indirect
187+
go.opentelemetry.io/otel/log v0.14.0 // indirect
188+
go.opentelemetry.io/otel/metric v1.38.0 // indirect
189+
go.opentelemetry.io/otel/sdk/log v0.14.0 // indirect
190+
go.opentelemetry.io/otel/sdk/metric v1.38.0 // indirect
191+
go.opentelemetry.io/proto/otlp v1.7.1 // indirect
171192
go.uber.org/atomic v1.9.0 // indirect
172193
go.uber.org/automaxprocs v1.6.0 // indirect
194+
go.uber.org/multierr v1.11.0 // indirect
173195
go.yaml.in/yaml/v2 v2.4.2 // indirect
174196
golang.org/x/mod v0.26.0 // indirect
175197
golang.org/x/sys v0.35.0 // indirect
176198
golang.org/x/text v0.28.0 // indirect
177199
golang.org/x/tools v0.35.0 // indirect
178-
gonum.org/v1/gonum v0.8.2 // indirect
179-
google.golang.org/genproto/googleapis/api v0.0.0-20250603155806-513f23925822 // indirect
180-
google.golang.org/genproto/googleapis/rpc v0.0.0-20250603155806-513f23925822 // indirect
181-
google.golang.org/grpc v1.74.2 // indirect
200+
google.golang.org/genproto/googleapis/api v0.0.0-20250825161204-c5933d9347a5 // indirect
201+
google.golang.org/genproto/googleapis/rpc v0.0.0-20250825161204-c5933d9347a5 // indirect
202+
google.golang.org/grpc v1.75.0 // indirect
182203
gopkg.in/yaml.v3 v3.0.1 // indirect
183204
oras.land/oras-go/v2 v2.6.0 // indirect
184205
sigs.k8s.io/yaml v1.6.0 // indirect

0 commit comments

Comments
 (0)