Documentation ¶
Overview ¶
Example ¶
package main import ( "context" "fmt" "log" "sync" "time" "github.com/mashiike/otelmuxsampler" "go.opentelemetry.io/otel/attribute" sdktrace "go.opentelemetry.io/otel/sdk/trace" "go.opentelemetry.io/otel/trace" ) type onMemoryExporter struct { mu sync.Mutex spans []sdktrace.ReadOnlySpan } func (e *onMemoryExporter) ExportSpans(ctx context.Context, spans []sdktrace.ReadOnlySpan) error { e.mu.Lock() defer e.mu.Unlock() e.spans = append(e.spans, spans...) return nil } func (e *onMemoryExporter) Shutdown(ctx context.Context) error { return nil } func main() { exporter := &onMemoryExporter{} // only priority=high span is sampled mux := otelmuxsampler.Multiplexed(sdktrace.NeverSample()) mux.AttributeEqual(attribute.String("priority", "high"), sdktrace.AlwaysSample()) tp := sdktrace.NewTracerProvider( sdktrace.WithBatcher(exporter), sdktrace.WithSampler(sdktrace.ParentBased(mux)), ) // operation1 is priority=high, operation2 is priority=low tr := tp.Tracer("example") func() { _, span := tr.Start(nil, "operation1", trace.WithAttributes( attribute.String("priority", "high"), )) defer span.End() }() func() { _, span := tr.Start(nil, "operation2", trace.WithAttributes( attribute.String("priority", "low"), )) defer span.End() }() ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) defer cancel() if err := tp.Shutdown(ctx); err != nil { log.Fatal("failed to shutdown:", err) } // stdout to span names for _, span := range exporter.spans { fmt.Println(span.Name()) } }
Output: operation1
Index ¶
- type Handler
- type Multiplexer
- func (mux *Multiplexer) AttributeEqual(attr attribute.KeyValue, sampler sdktrace.Sampler)
- func (mux *Multiplexer) AttributeExists(attrKey attribute.Key, sampler sdktrace.Sampler)
- func (mux *Multiplexer) Description() string
- func (mux *Multiplexer) Handle(name string, handler Handler)
- func (mux *Multiplexer) HandleFunc(name string, matcher func(sdktrace.SamplingParameters) bool, ...)
- func (mux *Multiplexer) ShouldSample(p sdktrace.SamplingParameters) sdktrace.SamplingResult
Examples ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Handler ¶
type Handler interface { Match(sdktrace.SamplingParameters) bool sdktrace.Sampler }
func NewHandler ¶
type Multiplexer ¶
type Multiplexer struct {
// contains filtered or unexported fields
}
Multiplexer is a Sampler that multiplexes sampling decisions
func Multiplexed ¶
func Multiplexed(sampler sdktrace.Sampler) *Multiplexer
Multiplexed returns a new Multiplexer
func (*Multiplexer) AttributeEqual ¶
func (mux *Multiplexer) AttributeEqual(attr attribute.KeyValue, sampler sdktrace.Sampler)
func (*Multiplexer) AttributeExists ¶
func (mux *Multiplexer) AttributeExists(attrKey attribute.Key, sampler sdktrace.Sampler)
func (*Multiplexer) Description ¶
func (mux *Multiplexer) Description() string
func (*Multiplexer) Handle ¶
func (mux *Multiplexer) Handle(name string, handler Handler)
func (*Multiplexer) HandleFunc ¶
func (mux *Multiplexer) HandleFunc(name string, matcher func(sdktrace.SamplingParameters) bool, sampler sdktrace.Sampler)
func (*Multiplexer) ShouldSample ¶
func (mux *Multiplexer) ShouldSample(p sdktrace.SamplingParameters) sdktrace.SamplingResult
Click to show internal directories.
Click to hide internal directories.