Skip to content

Commit 2ecbc0b

Browse files
committed
feat(OpenTelemetry): Integrate OpenTelemetry into agent
- integrate OpenTelemetry logging with zap logger for better observability - add OpenTelemetry gRPC middleware for enhanced tracing capabilities - document new OTLP exporter endpoint for better configuration guidance
1 parent ced33b0 commit 2ecbc0b

File tree

15 files changed

+191
-83
lines changed

15 files changed

+191
-83
lines changed

cmd/agent/main.go

Lines changed: 74 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ import (
1717
"github.com/compute-blade-community/compute-blade-agent/internal/api"
1818
"github.com/compute-blade-community/compute-blade-agent/pkg/log"
1919
"github.com/prometheus/client_golang/prometheus/promhttp"
20+
"github.com/spechtlabs/go-otel-utils/otelprovider"
21+
"github.com/spechtlabs/go-otel-utils/otelzap"
2022
"github.com/spf13/pflag"
2123
"github.com/spf13/viper"
2224
"go.uber.org/zap"
@@ -25,7 +27,6 @@ import (
2527
var (
2628
Version string
2729
Commit string
28-
Date string
2930
)
3031

3132
var debug = pflag.BoolP("debug", "v", false, "enable verbose logging")
@@ -55,21 +56,76 @@ func main() {
5556
baseLogger = zap.Must(zap.NewProduction())
5657
}
5758

58-
zapLogger := baseLogger.With(zap.String("app", "compute-blade-agent"))
59+
zapLogger := baseLogger.With(
60+
zap.String("app", "compute-blade-agent"),
61+
zap.String("version", Version),
62+
zap.String("commit", Commit),
63+
)
5964
defer func() {
6065
_ = zapLogger.Sync()
6166
}()
62-
_ = zap.ReplaceGlobals(zapLogger.With(zap.String("scope", "global")))
63-
baseCtx := log.IntoContext(context.Background(), zapLogger)
6467

68+
// Replace zap global
69+
undoZapGlobals := zap.ReplaceGlobals(zapLogger)
70+
71+
// Redirect stdlib log to zap
72+
undoStdLogRedirect := zap.RedirectStdLog(zapLogger)
73+
74+
// Create OpenTelemetry Log and Trace provider
75+
logProvider := otelprovider.NewLogger(
76+
otelprovider.WithLogAutomaticEnv(),
77+
)
78+
79+
traceProvider := otelprovider.NewTracer(
80+
otelprovider.WithTraceAutomaticEnv(),
81+
)
82+
83+
// Create otelLogger
84+
otelZapLogger := otelzap.New(zapLogger,
85+
otelzap.WithCaller(true),
86+
otelzap.WithMinLevel(zap.InfoLevel),
87+
otelzap.WithAnnotateLevel(zap.WarnLevel),
88+
otelzap.WithErrorStatusLevel(zap.ErrorLevel),
89+
otelzap.WithStackTrace(false),
90+
otelzap.WithLoggerProvider(logProvider),
91+
)
92+
93+
// Replace global otelZap logger
94+
undoOtelZapGlobals := otelzap.ReplaceGlobals(otelZapLogger)
95+
defer undoOtelZapGlobals()
96+
97+
// Cleanup Logging and Tracing
98+
defer func() {
99+
if err := traceProvider.ForceFlush(context.Background()); err != nil {
100+
otelzap.L().Warn("failed to flush traces")
101+
}
102+
103+
if err := logProvider.ForceFlush(context.Background()); err != nil {
104+
otelzap.L().Warn("failed to flush logs")
105+
}
106+
107+
if err := traceProvider.Shutdown(context.Background()); err != nil {
108+
panic(err)
109+
}
110+
111+
if err := logProvider.Shutdown(context.Background()); err != nil {
112+
panic(err)
113+
}
114+
115+
undoStdLogRedirect()
116+
undoZapGlobals()
117+
}()
118+
119+
// Setup context
120+
baseCtx := log.IntoContext(context.Background(), otelZapLogger)
65121
ctx, cancelCtx := context.WithCancelCause(baseCtx)
66122
defer cancelCtx(context.Canceled)
67123

68124
// load configuration
69125
var cbAgentConfig agent.ComputeBladeAgentConfig
70126
if err := viper.Unmarshal(&cbAgentConfig); err != nil {
71127
cancelCtx(err)
72-
log.FromContext(ctx).Fatal("Failed to load configuration", zap.Error(err))
128+
log.FromContext(ctx).WithError(err).Fatal("Failed to load configuration")
73129
}
74130

75131
// setup stop signal handlers
@@ -97,11 +153,11 @@ func main() {
97153
}
98154
}()
99155

100-
log.FromContext(ctx).Info("Bootstrapping compute-blade-agent", zap.String("version", Version), zap.String("commit", Commit), zap.String("date", Date))
156+
log.FromContext(ctx).Info("Bootstrapping compute-blade-agent")
101157
computebladeAgent, err := agent.NewComputeBladeAgent(ctx, cbAgentConfig)
102158
if err != nil {
103159
cancelCtx(err)
104-
log.FromContext(ctx).Fatal("Failed to create agent", zap.Error(err))
160+
log.FromContext(ctx).WithError(err).Fatal("Failed to create agent")
105161
}
106162

107163
// Run agent
@@ -124,13 +180,17 @@ func main() {
124180
// Wait for done
125181
<-ctx.Done()
126182

183+
// Since ctx is now done, we can no longer use it to get `log.FromContext(ctx)`
184+
// but we must use otelzap.L() to get a logger
185+
186+
// Shut down gRPC and Prom Servers async
127187
var wg sync.WaitGroup
128188

129189
// Shut-Down GRPC Server
130190
wg.Add(1)
131191
go func() {
132192
defer wg.Done()
133-
log.FromContext(ctx).Info("Shutting down grpc server")
193+
otelzap.L().Info("Shutting down grpc server")
134194
grpcServer.GracefulStop()
135195
}()
136196

@@ -142,18 +202,19 @@ func main() {
142202
shutdownCtx, shutdownCtxCancel := context.WithTimeout(context.Background(), 5*time.Second)
143203
defer shutdownCtxCancel()
144204

205+
otelzap.L().Info("Shutting down prometheus/pprof server")
145206
if err := promServer.Shutdown(shutdownCtx); err != nil {
146-
log.FromContext(ctx).Error("Failed to shutdown prometheus/pprof server", zap.Error(err))
207+
otelzap.L().WithError(err).Error("Failed to shutdown prometheus/pprof server")
147208
}
148209
}()
149210

150211
wg.Wait()
151212

152-
// Wait for context cancel
213+
// Terminate accordingly
153214
if err := ctx.Err(); !errors.Is(err, context.Canceled) {
154-
log.FromContext(ctx).Fatal("Exiting", zap.Error(err))
215+
otelzap.L().WithError(err).Fatal("Exiting")
155216
} else {
156-
log.FromContext(ctx).Info("Exiting")
217+
otelzap.L().Info("Exiting")
157218
}
158219
}
159220

@@ -172,7 +233,7 @@ func runPrometheusEndpoint(ctx context.Context, cancel context.CancelCauseFunc,
172233
go func() {
173234
err := server.ListenAndServe()
174235
if err != nil && !errors.Is(err, http.ErrServerClosed) {
175-
log.FromContext(ctx).Error("Failed to start prometheus/pprof server", zap.Error(err))
236+
log.FromContext(ctx).WithError(err).Error("Failed to start prometheus/pprof server")
176237
cancel(err)
177238
}
178239
}()

cmd/bladectl/cmd_identify.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package main
22

33
import (
44
"errors"
5+
56
bladeapiv1alpha1 "github.com/compute-blade-community/compute-blade-agent/api/bladeapi/v1alpha1"
67
"github.com/sierrasoftworks/humane-errors-go"
78
"github.com/spf13/cobra"

cmd/bladectl/config/config.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import (
66
"path/filepath"
77

88
"github.com/sierrasoftworks/humane-errors-go"
9-
"go.uber.org/zap"
9+
"github.com/spechtlabs/go-otel-utils/otelzap"
1010
)
1111

1212
type BladectlConfig struct {
@@ -58,7 +58,7 @@ func NewAuthenticatedBladectlConfig(server string, caPEM []byte, clientCertDER [
5858
func NewBladectlConfig(server string) *BladectlConfig {
5959
hostname, err := os.Hostname()
6060
if err != nil {
61-
zap.L().Fatal("Failed to extract hostname", zap.Error(err))
61+
otelzap.L().WithError(err).Fatal("Failed to extract hostname")
6262
}
6363

6464
return &BladectlConfig{

go.mod

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,15 @@ require (
66
github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.3.2
77
github.com/prometheus/client_golang v1.22.0
88
github.com/sierrasoftworks/humane-errors-go v0.0.0-20250507223502-4bb667dc1e16
9+
github.com/spechtlabs/go-otel-utils/otelprovider v0.0.10
10+
github.com/spechtlabs/go-otel-utils/otelzap v0.0.10
911
github.com/spf13/cobra v1.9.1
1012
github.com/spf13/pflag v1.0.6
1113
github.com/spf13/viper v1.20.1
1214
github.com/stretchr/testify v1.10.0
1315
github.com/warthog618/gpiod v0.8.1
1416
go.bug.st/serial v1.6.4
17+
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.61.0
1518
go.uber.org/zap v1.27.0
1619
golang.org/x/sync v0.15.0
1720
google.golang.org/grpc v1.73.0
@@ -21,13 +24,19 @@ require (
2124
)
2225

2326
require (
27+
github.com/aws/smithy-go v1.22.3 // indirect
2428
github.com/beorn7/perks v1.0.1 // indirect
29+
github.com/cenkalti/backoff/v4 v4.3.0 // indirect
2530
github.com/cespare/xxhash/v2 v2.3.0 // indirect
2631
github.com/creack/goselect v0.1.3 // indirect
2732
github.com/davecgh/go-spew v1.1.1 // indirect
2833
github.com/fsnotify/fsnotify v1.9.0 // indirect
34+
github.com/go-logr/logr v1.4.2 // indirect
35+
github.com/go-logr/stdr v1.2.2 // indirect
2936
github.com/go-viper/mapstructure/v2 v2.2.1 // indirect
3037
github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 // indirect
38+
github.com/google/uuid v1.6.0 // indirect
39+
github.com/grpc-ecosystem/grpc-gateway/v2 v2.26.1 // indirect
3140
github.com/inconshreveable/mousetrap v1.1.0 // indirect
3241
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
3342
github.com/pelletier/go-toml/v2 v2.2.4 // indirect
@@ -41,9 +50,23 @@ require (
4150
github.com/spf13/cast v1.8.0 // indirect
4251
github.com/stretchr/objx v0.5.2 // indirect
4352
github.com/subosito/gotenv v1.6.0 // indirect
53+
go.opentelemetry.io/auto/sdk v1.1.0 // indirect
54+
go.opentelemetry.io/otel v1.36.0 // indirect
55+
go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.11.0 // indirect
56+
go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.11.0 // indirect
57+
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.35.0 // indirect
58+
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.35.0 // indirect
59+
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.35.0 // indirect
60+
go.opentelemetry.io/otel/log v0.11.0 // indirect
61+
go.opentelemetry.io/otel/metric v1.36.0 // indirect
62+
go.opentelemetry.io/otel/sdk v1.36.0 // indirect
63+
go.opentelemetry.io/otel/sdk/log v0.11.0 // indirect
64+
go.opentelemetry.io/otel/trace v1.36.0 // indirect
65+
go.opentelemetry.io/proto/otlp v1.5.0 // indirect
4466
go.uber.org/multierr v1.11.0 // indirect
4567
golang.org/x/net v0.40.0 // indirect
4668
golang.org/x/sys v0.33.0 // indirect
4769
golang.org/x/text v0.25.0 // indirect
48-
google.golang.org/genproto/googleapis/rpc v0.0.0-20250512202823-5a2f75b736a9 // indirect
70+
google.golang.org/genproto/googleapis/api v0.0.0-20250324211829-b45e905df463 // indirect
71+
google.golang.org/genproto/googleapis/rpc v0.0.0-20250519155744-55703ea1f237 // indirect
4972
)

go.sum

Lines changed: 45 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
1+
github.com/aws/smithy-go v1.22.3 h1:Z//5NuZCSW6R4PhQ93hShNbyBbn8BWCmCVCt+Q8Io5k=
2+
github.com/aws/smithy-go v1.22.3/go.mod h1:t1ufH5HMublsJYulve2RKmHDC15xu1f26kHCp/HgceI=
13
github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
24
github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
5+
github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8=
6+
github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
37
github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
48
github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
59
github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g=
@@ -11,6 +15,7 @@ github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHk
1115
github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0=
1216
github.com/fsnotify/fsnotify v1.9.0 h1:2Ml+OJNzbYCTzsxtv8vKSFD9PbJjmhYF14k/jKC7S9k=
1317
github.com/fsnotify/fsnotify v1.9.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0=
18+
github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
1419
github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY=
1520
github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
1621
github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
@@ -27,6 +32,8 @@ github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
2732
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
2833
github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.3.2 h1:sGm2vDRFUrQJO/Veii4h4zG2vvqG6uWNkBHSTqXOZk0=
2934
github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.3.2/go.mod h1:wd1YpapPLivG6nQgbf7ZkG1hhSOXDhhn4MLTknx2aAc=
35+
github.com/grpc-ecosystem/grpc-gateway/v2 v2.26.1 h1:e9Rjr40Z98/clHv5Yg79Is0NtosR5LXRvdr7o/6NwbA=
36+
github.com/grpc-ecosystem/grpc-gateway/v2 v2.26.1/go.mod h1:tIxuGz/9mpox++sgp9fJjHO0+q1X9/UOWd798aAm22M=
3037
github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8=
3138
github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
3239
github.com/klauspost/compress v1.18.0 h1:c/Cqfb0r+Yi+JtIEq73FWXVkRonBlf0CRNYc8Zttxdo=
@@ -53,15 +60,19 @@ github.com/prometheus/common v0.63.0 h1:YR/EIY1o3mEFP/kZCD7iDMnLPlGyuU2Gb3HIcXnA
5360
github.com/prometheus/common v0.63.0/go.mod h1:VVFF/fBIoToEnWRVkYoXEkq3R3paCoxG9PXP74SnV18=
5461
github.com/prometheus/procfs v0.16.1 h1:hZ15bTNuirocR6u0JZ6BAHHmwS1p8B4P6MRqxtzMyRg=
5562
github.com/prometheus/procfs v0.16.1/go.mod h1:teAbpZRB1iIAJYREa1LsoWUXykVXA1KlTmWl8x/U+Is=
56-
github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ=
57-
github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog=
63+
github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII=
64+
github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o=
5865
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
5966
github.com/sagikazarmark/locafero v0.9.0 h1:GbgQGNtTrEmddYDSAH9QLRyfAHY12md+8YFTqyMTC9k=
6067
github.com/sagikazarmark/locafero v0.9.0/go.mod h1:UBUyz37V+EdMS3hDF3QWIiVr/2dPrx49OMO0Bn0hJqk=
6168
github.com/sierrasoftworks/humane-errors-go v0.0.0-20250507223502-4bb667dc1e16 h1:9vtY3febGroV+aPR5OlI3fekkesi+lMVsVWyxBp/rfk=
6269
github.com/sierrasoftworks/humane-errors-go v0.0.0-20250507223502-4bb667dc1e16/go.mod h1:CbJLj9L1qHdzLg4YRh2Lzr0noe9pR6QrVEqfLbITRKw=
6370
github.com/sourcegraph/conc v0.3.0 h1:OQTbbt6P72L20UqAkXXuLOj79LfEanQ+YQFNpLA9ySo=
6471
github.com/sourcegraph/conc v0.3.0/go.mod h1:Sdozi7LEKbFPqYX2/J+iBAM6HpqSLTASQIKqDmF7Mt0=
72+
github.com/spechtlabs/go-otel-utils/otelprovider v0.0.10 h1:Q5p+5KGA587GfzR6FdXGje4XBfxhi1u4NSu6lSnWCGA=
73+
github.com/spechtlabs/go-otel-utils/otelprovider v0.0.10/go.mod h1:sFuJXEBbNq/pQx9pP5OnVtx9yGJnH4fXi7x3qihW0ak=
74+
github.com/spechtlabs/go-otel-utils/otelzap v0.0.10 h1:RR/WS4b+ABxNL7xzlK4FTvnuXRbGk3yyggvvLnQ+FeM=
75+
github.com/spechtlabs/go-otel-utils/otelzap v0.0.10/go.mod h1:IhsBuW+sZwLxX1Ww5LmTlIonBP8GiyhsiZkIRq+ySE0=
6576
github.com/spf13/afero v1.14.0 h1:9tH6MapGnn/j0eb0yIXiLjERO8RB6xIVZRDCX7PtqWA=
6677
github.com/spf13/afero v1.14.0/go.mod h1:acJQ8t0ohCGuMN3O+Pv0V0hgMxNYDlvdk+VTfyZmbYo=
6778
github.com/spf13/cast v1.8.0 h1:gEN9K4b8Xws4EX0+a0reLmhq8moKn7ntRlQYgjPeCDk=
@@ -84,16 +95,34 @@ go.bug.st/serial v1.6.4 h1:7FmqNPgVp3pu2Jz5PoPtbZ9jJO5gnEnZIvnI1lzve8A=
8495
go.bug.st/serial v1.6.4/go.mod h1:nofMJxTeNVny/m6+KaafC6vJGj3miwQZ6vW4BZUGJPI=
8596
go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA=
8697
go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A=
87-
go.opentelemetry.io/otel v1.34.0 h1:zRLXxLCgL1WyKsPVrgbSdMN4c0FMkDAskSTQP+0hdUY=
88-
go.opentelemetry.io/otel v1.34.0/go.mod h1:OWFPOQ+h4G8xpyjgqo4SxJYdDQ/qmRH+wivy7zzx9oI=
89-
go.opentelemetry.io/otel/metric v1.34.0 h1:+eTR3U0MyfWjRDhmFMxe2SsW64QrZ84AOhvqS7Y+PoQ=
90-
go.opentelemetry.io/otel/metric v1.34.0/go.mod h1:CEDrp0fy2D0MvkXE+dPV7cMi8tWZwX3dmaIhwPOaqHE=
91-
go.opentelemetry.io/otel/sdk v1.34.0 h1:95zS4k/2GOy069d321O8jWgYsW3MzVV+KuSPKp7Wr1A=
92-
go.opentelemetry.io/otel/sdk v1.34.0/go.mod h1:0e/pNiaMAqaykJGKbi+tSjWfNNHMTxoC9qANsCzbyxU=
93-
go.opentelemetry.io/otel/sdk/metric v1.34.0 h1:5CeK9ujjbFVL5c1PhLuStg1wxA7vQv7ce1EK0Gyvahk=
94-
go.opentelemetry.io/otel/sdk/metric v1.34.0/go.mod h1:jQ/r8Ze28zRKoNRdkjCZxfs6YvBTG1+YIqyFVFYec5w=
95-
go.opentelemetry.io/otel/trace v1.34.0 h1:+ouXS2V8Rd4hp4580a8q23bg0azF2nI8cqLYnC8mh/k=
96-
go.opentelemetry.io/otel/trace v1.34.0/go.mod h1:Svm7lSjQD7kG7KJ/MUHPVXSDGz2OX4h0M2jHBhmSfRE=
98+
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.61.0 h1:q4XOmH/0opmeuJtPsbFNivyl7bCt7yRBbeEm2sC/XtQ=
99+
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.61.0/go.mod h1:snMWehoOh2wsEwnvvwtDyFCxVeDAODenXHtn5vzrKjo=
100+
go.opentelemetry.io/otel v1.36.0 h1:UumtzIklRBY6cI/lllNZlALOF5nNIzJVb16APdvgTXg=
101+
go.opentelemetry.io/otel v1.36.0/go.mod h1:/TcFMXYjyRNh8khOAO9ybYkqaDBb/70aVwkNML4pP8E=
102+
go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.11.0 h1:HMUytBT3uGhPKYY/u/G5MR9itrlSO2SMOsSD3Tk3k7A=
103+
go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.11.0/go.mod h1:hdDXsiNLmdW/9BF2jQpnHHlhFajpWCEYfM6e5m2OAZg=
104+
go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.11.0 h1:C/Wi2F8wEmbxJ9Kuzw/nhP+Z9XaHYMkyDmXy6yR2cjw=
105+
go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.11.0/go.mod h1:0Lr9vmGKzadCTgsiBydxr6GEZ8SsZ7Ks53LzjWG5Ar4=
106+
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.35.0 h1:1fTNlAIJZGWLP5FVu0fikVry1IsiUnXjf7QFvoNN3Xw=
107+
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.35.0/go.mod h1:zjPK58DtkqQFn+YUMbx0M2XV3QgKU0gS9LeGohREyK4=
108+
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.35.0 h1:m639+BofXTvcY1q8CGs4ItwQarYtJPOWmVobfM1HpVI=
109+
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.35.0/go.mod h1:LjReUci/F4BUyv+y4dwnq3h/26iNOeC3wAIqgvTIZVo=
110+
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.35.0 h1:xJ2qHD0C1BeYVTLLR9sX12+Qb95kfeD/byKj6Ky1pXg=
111+
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.35.0/go.mod h1:u5BF1xyjstDowA1R5QAO9JHzqK+ublenEW/dyqTjBVk=
112+
go.opentelemetry.io/otel/log v0.11.0 h1:c24Hrlk5WJ8JWcwbQxdBqxZdOK7PcP/LFtOtwpDTe3Y=
113+
go.opentelemetry.io/otel/log v0.11.0/go.mod h1:U/sxQ83FPmT29trrifhQg+Zj2lo1/IPN1PF6RTFqdwc=
114+
go.opentelemetry.io/otel/metric v1.36.0 h1:MoWPKVhQvJ+eeXWHFBOPoBOi20jh6Iq2CcCREuTYufE=
115+
go.opentelemetry.io/otel/metric v1.36.0/go.mod h1:zC7Ks+yeyJt4xig9DEw9kuUFe5C3zLbVjV2PzT6qzbs=
116+
go.opentelemetry.io/otel/sdk v1.36.0 h1:b6SYIuLRs88ztox4EyrvRti80uXIFy+Sqzoh9kFULbs=
117+
go.opentelemetry.io/otel/sdk v1.36.0/go.mod h1:+lC+mTgD+MUWfjJubi2vvXWcVxyr9rmlshZni72pXeY=
118+
go.opentelemetry.io/otel/sdk/log v0.11.0 h1:7bAOpjpGglWhdEzP8z0VXc4jObOiDEwr3IYbhBnjk2c=
119+
go.opentelemetry.io/otel/sdk/log v0.11.0/go.mod h1:dndLTxZbwBstZoqsJB3kGsRPkpAgaJrWfQg3lhlHFFY=
120+
go.opentelemetry.io/otel/sdk/metric v1.35.0 h1:1RriWBmCKgkeHEhM7a2uMjMUfP7MsOF5JpUCaEqEI9o=
121+
go.opentelemetry.io/otel/sdk/metric v1.35.0/go.mod h1:is6XYCUMpcKi+ZsOvfluY5YstFnhW0BidkR+gL+qN+w=
122+
go.opentelemetry.io/otel/trace v1.36.0 h1:ahxWNuqZjpdiFAyrIoQ4GIiAIhxAunQR6MUoKrsNd4w=
123+
go.opentelemetry.io/otel/trace v1.36.0/go.mod h1:gQ+OnDZzrybY4k4seLzPAWNwVBBVlF2szhehOBB/tGA=
124+
go.opentelemetry.io/proto/otlp v1.5.0 h1:xJvq7gMzB31/d406fB8U5CBdyQGw4P399D1aQWU/3i4=
125+
go.opentelemetry.io/proto/otlp v1.5.0/go.mod h1:keN8WnHxOy8PG0rQZjJJ5A2ebUoafqWp0eVQ4yIXvJ4=
97126
go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
98127
go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
99128
go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
@@ -102,18 +131,16 @@ go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
102131
go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
103132
golang.org/x/net v0.40.0 h1:79Xs7wF06Gbdcg4kdCCIQArK11Z1hr5POQ6+fIYHNuY=
104133
golang.org/x/net v0.40.0/go.mod h1:y0hY0exeL2Pku80/zKK7tpntoX23cqL3Oa6njdgRtds=
105-
golang.org/x/sync v0.14.0 h1:woo0S4Yywslg6hp4eUFjTVOyKt0RookbpAHG4c1HmhQ=
106-
golang.org/x/sync v0.14.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA=
107134
golang.org/x/sync v0.15.0 h1:KWH3jNZsfyT6xfAfKiz6MRNmd46ByHDYaZ7KSkCtdW8=
108135
golang.org/x/sync v0.15.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA=
109136
golang.org/x/sys v0.33.0 h1:q3i8TbbEz+JRD9ywIRlyRAQbM0qF7hu24q3teo2hbuw=
110137
golang.org/x/sys v0.33.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
111138
golang.org/x/text v0.25.0 h1:qVyWApTSYLk/drJRO5mDlNYskwQznZmkpV2c8q9zls4=
112139
golang.org/x/text v0.25.0/go.mod h1:WEdwpYrmk1qmdHvhkSTNPm3app7v4rsT8F2UD6+VHIA=
113-
google.golang.org/genproto/googleapis/rpc v0.0.0-20250512202823-5a2f75b736a9 h1:IkAfh6J/yllPtpYFU0zZN1hUPYdT0ogkBT/9hMxHjvg=
114-
google.golang.org/genproto/googleapis/rpc v0.0.0-20250512202823-5a2f75b736a9/go.mod h1:qQ0YXyHHx3XkvlzUtpXDkS29lDSafHMZBAZDc03LQ3A=
115-
google.golang.org/grpc v1.72.0 h1:S7UkcVa60b5AAQTaO6ZKamFp1zMZSU0fGDK2WZLbBnM=
116-
google.golang.org/grpc v1.72.0/go.mod h1:wH5Aktxcg25y1I3w7H69nHfXdOG3UiadoBtjh3izSDM=
140+
google.golang.org/genproto/googleapis/api v0.0.0-20250324211829-b45e905df463 h1:hE3bRWtU6uceqlh4fhrSnUyjKHMKB9KrTLLG+bc0ddM=
141+
google.golang.org/genproto/googleapis/api v0.0.0-20250324211829-b45e905df463/go.mod h1:U90ffi8eUL9MwPcrJylN5+Mk2v3vuPDptd5yyNUiRR8=
142+
google.golang.org/genproto/googleapis/rpc v0.0.0-20250519155744-55703ea1f237 h1:cJfm9zPbe1e873mHJzmQ1nwVEeRDU/T1wXDK2kUSU34=
143+
google.golang.org/genproto/googleapis/rpc v0.0.0-20250519155744-55703ea1f237/go.mod h1:qQ0YXyHHx3XkvlzUtpXDkS29lDSafHMZBAZDc03LQ3A=
117144
google.golang.org/grpc v1.73.0 h1:VIWSmpI2MegBtTuFt5/JWy2oXxtjJ/e89Z70ImfD2ok=
118145
google.golang.org/grpc v1.73.0/go.mod h1:50sbHOUqWoCQGI8V2HQLJM0B+LMlIUjNSZmow7EVBQc=
119146
google.golang.org/protobuf v1.36.6 h1:z1NpPI8ku2WgiWnf+t9wTPsn6eP1L7ksHUlkfLvd9xY=

0 commit comments

Comments
 (0)