Skip to content

Commit 98e430f

Browse files
authored
Merge pull request #9 from grafana/chore/cleanup
Deprecate unused options
2 parents 614c343 + 207e85a commit 98e430f

File tree

12 files changed

+316
-315
lines changed

12 files changed

+316
-315
lines changed

README.md

Lines changed: 49 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,64 @@
1-
# Profiling Instrumentation
1+
# Profiling Instrumentation for OpenTelemetry Go SDK
22

33
**NOTE**: This is an experimental package -- and will be officially supported in future versions of Pyroscope
44

55
The package provides means to integrate tracing with profiling. More specifically, a `TracerProvider` implementation,
6-
that annotates profiling data with span IDs: when a new trace span emerges, the tracer adds a `profile_id` [pprof tag](https://github.com/google/pprof/blob/master/doc/README.md#tag-filtering)
6+
that annotates profiling data with span IDs: when a new trace span emerges, the tracer adds a `span_id` [pprof tag](https://github.com/google/pprof/blob/master/doc/README.md#tag-filtering)
77
that points to the span. This makes it possible to filter out a profile of a particular trace span in [Pyroscope](https://pyroscope.io).
88

9-
### Jaeger Example
10-
You can find a full Jaeger example (with custom Jaeger UI) in the [tracing/jaeger](https://github.com/pyroscope-io/pyroscope/tree/main/examples/tracing/jaeger) folder in the Pyroscope repository.
11-
![image](https://user-images.githubusercontent.com/23323466/164025573-1f6e713b-ec94-4d82-842c-faf2be652b7f.png)
9+
Note that the module does not control `pprof` profiler itself – it still needs to be started for profiles to be
10+
collected. This can be done either via `runtime/pprof` package, or using the [Pyroscope client](https://github.com/grafana/pyroscope-go).
1211

13-
#### Baseline Diffs
14-
We also added functionality where each individual span is compared to a baseline of spans with similar properties and the diff can be shown in the UI:
12+
By default, only the root span gets labeled (the first span created locally): such spans are marked with the
13+
`pyroscope.profile.id` attribute set to the span ID. Please note that presence of the attribute does not necessarily
14+
indicate that the span has a profile: stack trace samples might not be collected, if the utilized CPU time is
15+
less than the sample interval (10ms).
1516

16-
[![Watch the video](https://user-images.githubusercontent.com/23323466/165633049-9591b0fd-b8be-4fbd-a0af-d90a1dd89b7b.mov)](https://user-images.githubusercontent.com/23323466/165633049-9591b0fd-b8be-4fbd-a0af-d90a1dd89b7b.mov)
17+
Limitations:
18+
- Only CPU profiling is fully supported at the moment.
1719

20+
### Trace spans profiles
1821

19-
### Grafana Example
20-
For another example of what this package allows you to do you can see with Grafana the ability to link between logs, traces and profiles in the following video ([source](https://github.com/pyroscope-io/pyroscope/tree/main/examples/tracing/jaeger)):
22+
To start profiling trace spans, you need to include our go module in your app:
2123

22-
[![Watch the video](https://user-images.githubusercontent.com/23323466/172881613-842f67f0-6bfa-4671-a44a-e966d5ca67a4.mov)](https://user-images.githubusercontent.com/23323466/172881613-842f67f0-6bfa-4671-a44a-e966d5ca67a4.mov)
24+
```
25+
go get github.com/grafana/otel-profiling-go
26+
```
2327

28+
Then add the pyroscope tracer provider:
2429

25-
### Other Notes
26-
Note that the module does not control `pprof` profiler itself – it still needs to be started for profiles to be
27-
collected. This can be done either via `runtime/pprof` package, or using the [Pyroscope client](https://github.com/pyroscope-io/client).
30+
```go
31+
package main
32+
33+
import (
34+
otelpyroscope "github.com/grafana/otel-profiling-go"
35+
"github.com/grafana/pyroscope-go"
36+
)
37+
38+
func main() {
39+
// Initialize your tracer provider as usual.
40+
tp := initTracer()
41+
42+
// Wrap it with otelpyroscope tracer provider.
43+
otel.SetTracerProvider(otelpyroscope.NewTracerProvider(tp))
44+
45+
// If you're using Pyroscope Go SDK, initialize pyroscope profiler.
46+
_, _ = pyroscope.Start(pyroscope.Config{
47+
ApplicationName: "my-service",
48+
ServerAddress: "http://localhost:4040",
49+
})
50+
51+
// Your code goes here.
52+
}
53+
```
54+
55+
Tracing integration is supported in pull mode as well: if you scrape profiles using Grafana Agent, you should
56+
make sure that the pyroscope `service_name` label matches `service.name` attribute specified in the OTel SDK configuration.
57+
Please refer to the [Grafana Agent](https://grafana.com/docs/pyroscope/latest/configure-client/grafana-agent/go_pull/)
58+
documentation to learn more.
59+
60+
## Example
2861

29-
By default, only the root span gets annotated (the first span created locally), this is done to circumvent the fact that the profiler records only the time spent on CPU. Otherwise, all the children profiles should be merged to get the full representation of the root span profile.
62+
You can find a complete example setup with Grafana Tempo in the [Pyroscope repository](https://github.com/grafana/pyroscope/tree/main/examples/tracing/tempo).
3063

31-
There are few limitations:
32-
- Only Go CPU profiling is fully supported at the moment.
33-
- Due to the very idea of the sampling profilers, spans shorter than the sample interval may not be captured. For example, Go CPU profiler probes stack traces 100 times per second, meaning that spans shorter than 10ms may not be captured.
64+
![image](https://github.com/grafana/otel-profiling-go/assets/12090599/31e33cd1-818b-4116-b952-c9ec7b1fb593)

deprecated.go

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
package otelpyroscope
2+
3+
// Config describes tracer configuration.
4+
// DEPRECATED: Do not use.
5+
type Config struct {
6+
AppName string
7+
PyroscopeURL string
8+
IncludeProfileURL bool
9+
IncludeProfileBaselineURL bool
10+
ProfileBaselineLabels map[string]string
11+
12+
RootOnly bool
13+
AddSpanName bool
14+
}
15+
16+
// WithRootSpanOnly indicates that only the root span is to be profiled.
17+
// The profile includes samples captured during child span execution
18+
// but the spans won't have their own profiles and won't be annotated
19+
// with pyroscope.profile attributes.
20+
// The option is enabled by default.
21+
// DEPRECATED: Ignored by tracer.
22+
func WithRootSpanOnly(bool) Option { return func(tp *tracerProvider) {} }
23+
24+
// WithAddSpanName specifies whether the current span name should be added
25+
// to the profile labels. N.B if the name is dynamic, or too many values
26+
// are supposed, this may significantly deteriorate performance.
27+
// By default, span name is not added to profile labels.
28+
// DEPRECATED: Ignored by tracer.
29+
func WithAddSpanName(bool) Option { return func(tp *tracerProvider) {} }
30+
31+
// WithAppName specifies the profiled application name.
32+
// It should match the name specified in pyroscope configuration.
33+
// Required, if profile URL or profile baseline URL is enabled.
34+
// DEPRECATED: Ignored by tracer.
35+
func WithAppName(string) Option { return func(tp *tracerProvider) {} }
36+
37+
// WithPyroscopeURL provides a base URL for the profile and baseline URLs.
38+
// Required, if profile URL or profile baseline URL is enabled.
39+
// DEPRECATED: Ignored by tracer.
40+
func WithPyroscopeURL(string) Option { return func(tp *tracerProvider) {} }
41+
42+
// WithProfileURL specifies whether to add the pyroscope.profile.url
43+
// attribute with the URL to the span profile.
44+
// DEPRECATED: Ignored by tracer.
45+
func WithProfileURL(bool) Option { return func(tp *tracerProvider) {} }
46+
47+
// WithProfileBaselineURL specifies whether to add the
48+
// pyroscope.profile.baseline.url attribute with the URL
49+
// to the baseline profile. See WithProfileBaselineLabels.
50+
// DEPRECATED: Ignored by tracer.
51+
func WithProfileBaselineURL(bool) Option { return func(tp *tracerProvider) {} }
52+
53+
// WithProfileBaselineLabels provides a map of extra labels to be added to the
54+
// baseline query alongside with pprof labels set in runtime. Typically,
55+
// it should match the labels specified in the Pyroscope profiler config.
56+
// Note that the map must not be modified.
57+
// DEPRECATED: Ignored by tracer.
58+
func WithProfileBaselineLabels(map[string]string) Option { return func(tp *tracerProvider) {} }
59+
60+
// WithProfileURLBuilder specifies how profile URL is to be built.
61+
// DEPRECATED: Ignored by tracer.
62+
func WithProfileURLBuilder(func(_ string) string) Option { return func(tp *tracerProvider) {} }
63+
64+
// WithDefaultProfileURLBuilder specifies the default profile URL builder.
65+
// DEPRECATED: Ignored by tracer.
66+
func WithDefaultProfileURLBuilder(_, _ string) Option { return func(tp *tracerProvider) {} }

example/Dockerfile

Lines changed: 0 additions & 13 deletions
This file was deleted.

example/README.md

Lines changed: 0 additions & 18 deletions
This file was deleted.

example/docker-compose.yaml

Lines changed: 0 additions & 16 deletions
This file was deleted.

example/go.mod

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,11 @@ module github.com/pyroscope-io/otel-profiling-go/example
33
go 1.16
44

55
require (
6-
github.com/grafana/pyroscope-go v1.0.4 // indirect
7-
github.com/pyroscope-io/otel-profiling-go v0.4.0
8-
go.opentelemetry.io/otel v1.20.0
6+
github.com/grafana/otel-profiling-go v0.5.0
7+
github.com/grafana/pyroscope-go v1.0.4
8+
go.opentelemetry.io/otel v1.21.0
99
go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.4.1
10-
go.opentelemetry.io/otel/sdk v1.20.0
10+
go.opentelemetry.io/otel/sdk v1.21.0
1111
)
1212

13-
replace github.com/pyroscope-io/otel-profiling-go => ../
13+
replace github.com/grafana/otel-profiling-go => ../

example/go.sum

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -9,15 +9,12 @@ github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre
99
github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE=
1010
github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
1111
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
12-
github.com/grafana/pyroscope-go v0.2.1/go.mod h1:zRdQXIGxy0H2QbKEkCmZBR6KOLLIFYLWsdzVI0MRm2E=
1312
github.com/grafana/pyroscope-go v1.0.4 h1:oyQX0BOkL+iARXzHuCdIF5TQ7/sRSel1YFViMHC7Bm0=
1413
github.com/grafana/pyroscope-go v1.0.4/go.mod h1:0d7ftwSMBV/Awm7CCiYmHQEG8Y44Ma3YSjt+nWcWztY=
1514
github.com/grafana/pyroscope-go/godeltaprof v0.1.4 h1:mDsJ3ngul7UfrHibGQpV66PbZ3q1T8glz/tK3bQKKEk=
1615
github.com/grafana/pyroscope-go/godeltaprof v0.1.4/go.mod h1:1HSPtjU8vLG0jE9JrTdzjgFqdJ/VgN7fvxBNq3luJko=
1716
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
1817
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
19-
github.com/pyroscope-io/client v0.2.1 h1:GUyrncANOCuFhnmgURnpJ90o9z/uwZMx+1l9RMJUuKk=
20-
github.com/pyroscope-io/client v0.2.1/go.mod h1:zRdQXIGxy0H2QbKEkCmZBR6KOLLIFYLWsdzVI0MRm2E=
2118
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
2219
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
2320
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
@@ -27,18 +24,18 @@ github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO
2724
github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
2825
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
2926
go.opentelemetry.io/otel v1.4.1/go.mod h1:StM6F/0fSwpd8dKWDCdRr7uRvEPYdW0hBSlbdTiUde4=
30-
go.opentelemetry.io/otel v1.20.0 h1:vsb/ggIY+hUjD/zCAQHpzTmndPqv/ml2ArbsbfBYTAc=
31-
go.opentelemetry.io/otel v1.20.0/go.mod h1:oUIGj3D77RwJdM6PPZImDpSZGDvkD9fhesHny69JFrs=
27+
go.opentelemetry.io/otel v1.21.0 h1:hzLeKBZEL7Okw2mGzZ0cc4k/A7Fta0uoPgaJCr8fsFc=
28+
go.opentelemetry.io/otel v1.21.0/go.mod h1:QZzNPQPm1zLX4gZK4cMi+71eaorMSGT3A4znnUvNNEo=
3229
go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.4.1 h1:yaXaoJjXaJqRnsfW9HrN7pGb7bzcEn31Rk6yo2LFaWo=
3330
go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.4.1/go.mod h1:BFiGsTMZdqtxufux8ANXuMeRz9dMPVFdJZadUWDFD7o=
34-
go.opentelemetry.io/otel/metric v1.20.0 h1:ZlrO8Hu9+GAhnepmRGhSU7/VkpjrNowxRN9GyKR4wzA=
35-
go.opentelemetry.io/otel/metric v1.20.0/go.mod h1:90DRw3nfK4D7Sm/75yQ00gTJxtkBxX+wu6YaNymbpVM=
31+
go.opentelemetry.io/otel/metric v1.21.0 h1:tlYWfeo+Bocx5kLEloTjbcDwBuELRrIFxwdQ36PlJu4=
32+
go.opentelemetry.io/otel/metric v1.21.0/go.mod h1:o1p3CA8nNHW8j5yuQLdc1eeqEaPfzug24uvsyIEJRWM=
3633
go.opentelemetry.io/otel/sdk v1.4.1/go.mod h1:NBwHDgDIBYjwK2WNu1OPgsIc2IJzmBXNnvIJxJc8BpE=
37-
go.opentelemetry.io/otel/sdk v1.20.0 h1:5Jf6imeFZlZtKv9Qbo6qt2ZkmWtdWx/wzcCbNUlAWGM=
38-
go.opentelemetry.io/otel/sdk v1.20.0/go.mod h1:rmkSx1cZCm/tn16iWDn1GQbLtsW/LvsdEEFzCSRM6V0=
34+
go.opentelemetry.io/otel/sdk v1.21.0 h1:FTt8qirL1EysG6sTQRZ5TokkU8d0ugCj8htOgThZXQ8=
35+
go.opentelemetry.io/otel/sdk v1.21.0/go.mod h1:Nna6Yv7PWTdgJHVRD9hIYywQBRx7pbox6nwBnZIxl/E=
3936
go.opentelemetry.io/otel/trace v1.4.1/go.mod h1:iYEVbroFCNut9QkwEczV9vMRPHNKSSwYZjulEtsmhFc=
40-
go.opentelemetry.io/otel/trace v1.20.0 h1:+yxVAPZPbQhbC3OfAkeIVTky6iTFpcr4SiY9om7mXSQ=
41-
go.opentelemetry.io/otel/trace v1.20.0/go.mod h1:HJSK7F/hA5RlzpZ0zKDCHCDHm556LCDtKaAo6JmBFUU=
37+
go.opentelemetry.io/otel/trace v1.21.0 h1:WD9i5gzvoUPuXIXH24ZNBudiarZDKuekPqi/E8fpfLc=
38+
go.opentelemetry.io/otel/trace v1.21.0/go.mod h1:LGbsEB0f9LGjN+OZaQQ26sohbOmiMR+BaslueVtS/qQ=
4239
golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
4340
golang.org/x/sys v0.14.0 h1:Vz7Qs629MkJkGyHxUlRHizWJRG2j8fbQKjELVSNhy7Q=
4441
golang.org/x/sys v0.14.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=

example/main.go

Lines changed: 11 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package main
22

33
import (
4-
"context"
54
"errors"
65
"log"
76
"net/http"
@@ -13,26 +12,20 @@ import (
1312
"go.opentelemetry.io/otel/propagation"
1413
"go.opentelemetry.io/otel/sdk/trace"
1514

16-
"github.com/pyroscope-io/otel-profiling-go"
17-
)
18-
19-
const (
20-
appName = "example-app"
21-
pyroscopeEndpoint = "http://localhost:4040"
15+
otelpyroscope "github.com/grafana/otel-profiling-go"
2216
)
2317

2418
func main() {
25-
tp := initTracer(appName, pyroscopeEndpoint)
26-
defer func() {
27-
if err := tp.Shutdown(context.Background()); err != nil {
28-
log.Printf("Error shutting down tracer provider: %v", err)
29-
}
30-
}()
19+
// Initialize your tracer provider as usual.
20+
tp := initTracer()
3121

22+
// Wrap it with otelpyroscope tracer provider.
23+
otel.SetTracerProvider(otelpyroscope.NewTracerProvider(tp))
24+
25+
// Initialize pyroscope profiler.
3226
_, _ = pyroscope.Start(pyroscope.Config{
33-
ApplicationName: appName,
34-
ServerAddress: pyroscopeEndpoint,
35-
Logger: pyroscope.StandardLogger,
27+
ApplicationName: "my-service",
28+
ServerAddress: "http://localhost:4040",
3629
})
3730

3831
log.Println("starting listening")
@@ -42,7 +35,7 @@ func main() {
4235
}
4336
}
4437

45-
func cpuBoundHandler(w http.ResponseWriter, r *http.Request) {
38+
func cpuBoundHandler(_ http.ResponseWriter, r *http.Request) {
4639
tracer := otel.GetTracerProvider().Tracer("")
4740
_, span := tracer.Start(r.Context(), "cpuBoundHandler")
4841
defer span.End()
@@ -54,7 +47,7 @@ func cpuBoundHandler(w http.ResponseWriter, r *http.Request) {
5447
}
5548
}
5649

57-
func initTracer(appName, pyroscopeEndpoint string) *trace.TracerProvider {
50+
func initTracer() *trace.TracerProvider {
5851
exporter, err := stdouttrace.New(stdouttrace.WithPrettyPrint())
5952
if err != nil {
6053
log.Fatal(err)
@@ -63,14 +56,6 @@ func initTracer(appName, pyroscopeEndpoint string) *trace.TracerProvider {
6356
trace.WithSampler(trace.AlwaysSample()),
6457
trace.WithBatcher(exporter),
6558
)
66-
otel.SetTracerProvider(otelpyroscope.NewTracerProvider(tp,
67-
otelpyroscope.WithAppName(appName),
68-
otelpyroscope.WithPyroscopeURL(pyroscopeEndpoint),
69-
otelpyroscope.WithRootSpanOnly(true),
70-
otelpyroscope.WithAddSpanName(true),
71-
otelpyroscope.WithProfileURL(true),
72-
otelpyroscope.WithProfileBaselineURL(true),
73-
))
7459
otel.SetTextMapPropagator(propagation.NewCompositeTextMapPropagator(
7560
propagation.TraceContext{},
7661
propagation.Baggage{},

go.mod

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
1-
module github.com/pyroscope-io/otel-profiling-go
1+
module github.com/grafana/otel-profiling-go
22

33
go 1.16
44

55
require (
6-
go.opentelemetry.io/otel v1.20.0
7-
go.opentelemetry.io/otel/trace v1.20.0
6+
go.opentelemetry.io/otel v1.21.0
7+
go.opentelemetry.io/otel/sdk v1.21.0
8+
go.opentelemetry.io/otel/trace v1.21.0
89
)

go.sum

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@ github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSs
22
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
33
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
44
github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
5+
github.com/go-logr/logr v1.3.0 h1:2y3SDp0ZXuc6/cjLSZ+Q3ir+QB9T/iG5yYRXqsagWSY=
56
github.com/go-logr/logr v1.3.0/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
7+
github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
68
github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
79
github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
810
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
@@ -15,11 +17,16 @@ github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/
1517
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
1618
github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
1719
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
18-
go.opentelemetry.io/otel v1.20.0 h1:vsb/ggIY+hUjD/zCAQHpzTmndPqv/ml2ArbsbfBYTAc=
19-
go.opentelemetry.io/otel v1.20.0/go.mod h1:oUIGj3D77RwJdM6PPZImDpSZGDvkD9fhesHny69JFrs=
20-
go.opentelemetry.io/otel/metric v1.20.0/go.mod h1:90DRw3nfK4D7Sm/75yQ00gTJxtkBxX+wu6YaNymbpVM=
21-
go.opentelemetry.io/otel/trace v1.20.0 h1:+yxVAPZPbQhbC3OfAkeIVTky6iTFpcr4SiY9om7mXSQ=
22-
go.opentelemetry.io/otel/trace v1.20.0/go.mod h1:HJSK7F/hA5RlzpZ0zKDCHCDHm556LCDtKaAo6JmBFUU=
20+
go.opentelemetry.io/otel v1.21.0 h1:hzLeKBZEL7Okw2mGzZ0cc4k/A7Fta0uoPgaJCr8fsFc=
21+
go.opentelemetry.io/otel v1.21.0/go.mod h1:QZzNPQPm1zLX4gZK4cMi+71eaorMSGT3A4znnUvNNEo=
22+
go.opentelemetry.io/otel/metric v1.21.0 h1:tlYWfeo+Bocx5kLEloTjbcDwBuELRrIFxwdQ36PlJu4=
23+
go.opentelemetry.io/otel/metric v1.21.0/go.mod h1:o1p3CA8nNHW8j5yuQLdc1eeqEaPfzug24uvsyIEJRWM=
24+
go.opentelemetry.io/otel/sdk v1.21.0 h1:FTt8qirL1EysG6sTQRZ5TokkU8d0ugCj8htOgThZXQ8=
25+
go.opentelemetry.io/otel/sdk v1.21.0/go.mod h1:Nna6Yv7PWTdgJHVRD9hIYywQBRx7pbox6nwBnZIxl/E=
26+
go.opentelemetry.io/otel/trace v1.21.0 h1:WD9i5gzvoUPuXIXH24ZNBudiarZDKuekPqi/E8fpfLc=
27+
go.opentelemetry.io/otel/trace v1.21.0/go.mod h1:LGbsEB0f9LGjN+OZaQQ26sohbOmiMR+BaslueVtS/qQ=
28+
golang.org/x/sys v0.14.0 h1:Vz7Qs629MkJkGyHxUlRHizWJRG2j8fbQKjELVSNhy7Q=
29+
golang.org/x/sys v0.14.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
2330
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
2431
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
2532
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=

0 commit comments

Comments
 (0)