Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

chore: update jaeger remote sampler example #4892

Open
wants to merge 3 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
4 changes: 4 additions & 0 deletions CHANGELOG.md
Expand Up @@ -14,6 +14,10 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm
- Add client metric support to `go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp`. (#4707)
- Add peer attributes to spans recorded by `NewClientHandler`, `NewServerHandler` in `go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc`. (#4873)

### Changed

- Updated jaeger version in `go.opentelemetry.io/contrib/samplers/jaegerremote/example` example. (#4892)
hcelaloner marked this conversation as resolved.
Show resolved Hide resolved

### Deprecated

- The `RequestCount`, `RequestContentLength`, `ResponseContentLength`, `ServerLatency` constants in `go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp` are deprecated. (#4707)
Expand Down
2 changes: 1 addition & 1 deletion samplers/jaegerremote/example/docker-compose.yaml
Expand Up @@ -2,7 +2,7 @@ version: "3"
services:

otel-collector:
image: otel/opentelemetry-collector:latest
image: otel/opentelemetry-collector-contrib:latest
command: [ "--config=/etc/otel-collector.yaml" ]
volumes:
- ./otel-collector.yaml:/etc/otel-collector.yaml
Expand Down
2 changes: 1 addition & 1 deletion samplers/jaegerremote/example/go.mod
Expand Up @@ -4,6 +4,7 @@ go 1.20

require (
github.com/davecgh/go-spew v1.1.1
github.com/go-logr/stdr v1.2.2
go.opentelemetry.io/contrib/samplers/jaegerremote v0.16.0
go.opentelemetry.io/otel v1.22.0
go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.22.0
Expand All @@ -12,7 +13,6 @@ require (

require (
github.com/go-logr/logr v1.4.1 // indirect
github.com/go-logr/stdr v1.2.2 // indirect
github.com/gogo/protobuf v1.3.2 // indirect
go.opentelemetry.io/otel/metric v1.22.0 // indirect
go.opentelemetry.io/otel/trace v1.22.0 // indirect
Expand Down
30 changes: 22 additions & 8 deletions samplers/jaegerremote/example/main.go
Expand Up @@ -16,9 +16,12 @@ package main

import (
"fmt"
stdlog "log"
"os"
"time"

"github.com/davecgh/go-spew/spew"
"github.com/go-logr/stdr"

"go.opentelemetry.io/contrib/samplers/jaegerremote"
"go.opentelemetry.io/otel"
Expand All @@ -27,12 +30,19 @@ import (
)

func main() {
// Optional: an implementation of logr.Logger used for demo purposes to catch potential error logs
logger := stdr.NewWithOptions(stdlog.New(os.Stderr, "", stdlog.LstdFlags), stdr.Options{LogCaller: stdr.All})
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The addition of this logger is also more than just an update. Wouldn't that be adding quite a bit of noise in the output, making the example less readable?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

When I wanted to try the example, I couldn't see any error logs from the background updater. By default sampler was using logr.Discard() if I am not wrong, I just added to a simple stdout logr implementation to be able to check error logs while trying. I didn't remove it because I thought that it could be a nice for example.


samplingRefreshInterval := 1 * time.Minute
jaegerRemoteSampler := jaegerremote.New(
"foo",
jaegerremote.WithSamplingServerURL("http://localhost:5778"),
jaegerremote.WithSamplingRefreshInterval(10*time.Second), // decrease polling interval to get quicker feedback
jaegerremote.WithSamplingServerURL("http://localhost:5778/sampling"),
jaegerremote.WithSamplingRefreshInterval(samplingRefreshInterval), // decrease polling interval to get quicker feedback
dmathieu marked this conversation as resolved.
Show resolved Hide resolved
jaegerremote.WithInitialSampler(trace.TraceIDRatioBased(0.5)),
jaegerremote.WithLogger(logger),
)
// Optional: you can decorate the jaeger sampler with parent based sampler as you wish
// parentBasedJaegerRemoteSampler := trace.ParentBased(jaegerRemoteSampler, trace.WithRemoteParentNotSampled(jaegerRemoteSampler))

exporter, _ := stdouttrace.New()

Expand All @@ -42,14 +52,18 @@ func main() {
)
otel.SetTracerProvider(tp)

ticker := time.Tick(time.Second)
fmt.Printf("\n* Initial Jaeger Remote Sampler: %v\n\n", time.Now())
spewCfg := spew.ConfigState{
Indent: " ",
DisablePointerAddresses: true,
SortKeys: true,
}
spewCfg.Dump(jaegerRemoteSampler)

ticker := time.Tick(samplingRefreshInterval / 2)
for {
<-ticker
fmt.Printf("\n* Jaeger Remote Sampler %v\n\n", time.Now())
spewCfg := spew.ConfigState{
Indent: " ",
DisablePointerAddresses: true,
}
fmt.Printf("\n* Jaeger Remote Sampler: %v\n\n", time.Now())
spewCfg.Dump(jaegerRemoteSampler)
}
}
24 changes: 16 additions & 8 deletions samplers/jaegerremote/example/otel-collector.yaml
@@ -1,17 +1,25 @@
receivers:
jaeger:
otlp:
protocols:
grpc:
remote_sampling:
host_endpoint: "0.0.0.0:5778" # default port
insecure: true
strategy_file: "/etc/strategies.json"
http:

processors:
batch:

exporters:
logging:
debug:

extensions:
jaegerremotesampling:
source:
reload_interval: 30s
file: "/etc/strategies.json"

service:
extensions: [jaegerremotesampling]
pipelines:
traces:
receivers: [ jaeger ]
exporters: [ logging ]
receivers: [otlp]
processors: [batch]
exporters: [debug]