Documentation
¶
Overview ¶
Example ¶
package main
import (
"context"
"log"
"time"
"github.com/Bofry/trace"
)
func main() {
tp, err := trace.OTLPProvider("http://localhost:4318",
trace.ServiceName("trace-demo"),
trace.Environment("go-test"),
trace.Pid(),
)
if err != nil {
log.Fatal(err)
}
// Register our TracerProvider as the global so any imported
// instrumentation in the future will default to using it.
trace.SetTracerProvider(tp)
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
// Cleanly shutdown and flush telemetry when the application exits.
defer func(ctx context.Context) {
// Do not make the application hang when it is shutdown.
ctx, cancel = context.WithTimeout(ctx, time.Second*5)
defer cancel()
if err := tp.Shutdown(ctx); err != nil {
log.Fatal(err)
}
}(ctx)
tr := tp.Tracer("example-main")
sp := tr.Open(ctx, "example()")
defer sp.End()
sp.Info("example starting")
}
Index ¶
- Constants
- func ContextWithSpan(parent context.Context, span *SeveritySpan) context.Context
- func GetTextMapPropagator() propagation.TextMapPropagator
- func IsNoopSeveritySpan(span *SeveritySpan) bool
- func IsOtelNoopSpan(span trace.Span) bool
- func SetSpanExtractor(extractor SpanExtractor)
- func SetSpanInjector(injector SpanInjector)
- func SetTextMapPropagator(propagator propagation.TextMapPropagator)
- func SetTracerProvider(tp *SeverityTracerProvider)
- func SpanToContext(ctx context.Context, span *SeveritySpan) context.Context
- func WithInstrumentationVersion(version string) trace.TracerOption
- func WithLinks(links ...Link) trace.SpanStartOption
- func WithNewRoot() trace.SpanStartOption
- func WithSchemaURL(schemaURL string) trace.TracerOption
- func WithSpanKind(kind SpanKind) trace.SpanStartOption
- func WithStackTrace(b bool) trace.SpanEndEventOption
- type CompositeSpanExtractor
- type Key
- type KeyValue
- type Link
- type NoopSpanInjector
- type NopEvent
- type ReplyCode
- type Severity
- type SeverityEvent
- type SeveritySpan
- func (s *SeveritySpan) Alert(reason string, v ...any) SpanEvent
- func (s *SeveritySpan) Argv(v any)
- func (s *SeveritySpan) Context() context.Context
- func (s *SeveritySpan) Crit(reason string, v ...any) SpanEvent
- func (s *SeveritySpan) Debug(message string, v ...any) SpanEvent
- func (s *SeveritySpan) Disable(disabled bool)
- func (s *SeveritySpan) Emerg(reason string, v ...any) SpanEvent
- func (s *SeveritySpan) End(opts ...trace.SpanEndOption)
- func (s *SeveritySpan) Err(err error)
- func (s *SeveritySpan) HasSpanID() bool
- func (s *SeveritySpan) HasTraceID() bool
- func (s *SeveritySpan) Info(message string, v ...any) SpanEvent
- func (s *SeveritySpan) Inject(p propagation.TextMapPropagator, c propagation.TextMapCarrier)
- func (s *SeveritySpan) IsDisabled() bool
- func (s *SeveritySpan) Link() Link
- func (s *SeveritySpan) Notice(message string, v ...any) SpanEvent
- func (s *SeveritySpan) Reply(code ReplyCode, v any)
- func (s *SeveritySpan) SpanID() trace.SpanID
- func (s *SeveritySpan) Tags(tags ...KeyValue)
- func (s *SeveritySpan) TraceFlags() trace.TraceFlags
- func (s *SeveritySpan) TraceID() trace.TraceID
- func (s *SeveritySpan) TraceState() trace.TraceState
- func (s *SeveritySpan) Warning(reason string, v ...any) SpanEvent
- type SeverityTracer
- func (s *SeverityTracer) Extract(ctx context.Context, carrier propagation.TextMapCarrier, spanName string, ...) *SeveritySpan
- func (s *SeverityTracer) ExtractWithPropagator(ctx context.Context, propagator propagation.TextMapPropagator, ...) *SeveritySpan
- func (s *SeverityTracer) Inject(ctx context.Context, carrier propagation.TextMapCarrier)
- func (s *SeverityTracer) InjectWithPropagator(ctx context.Context, propagator propagation.TextMapPropagator, ...)
- func (s *SeverityTracer) Link(ctx context.Context, link Link, spanName string, opts ...trace.SpanStartOption) *SeveritySpan
- func (s *SeverityTracer) Open(ctx context.Context, spanName string, opts ...trace.SpanStartOption) *SeveritySpan
- func (s *SeverityTracer) Start(ctx context.Context, spanName string, opts ...trace.SpanStartOption) *SeveritySpan
- type SeverityTracerProvider
- func CreateSeverityTracerProvider(provider trace.TracerProvider) *SeverityTracerProvider
- func GetTracerProvider() *SeverityTracerProvider
- func JaegerCompatibleProvider(endpoint string, attrs ...KeyValue) (*SeverityTracerProvider, error)
- func OTLPGRPCProvider(endpoint string, attrs ...KeyValue) (*SeverityTracerProvider, error)
- func OTLPProvider(endpoint string, attrs ...KeyValue) (*SeverityTracerProvider, error)
- type SpanEvent
- type SpanExtractor
- type SpanID
- type SpanInjector
- type SpanKind
- type TraceFlags
- type TraceID
- type TracerTagBuilder
- func (builder *TracerTagBuilder) Bool(name string, v bool)
- func (builder *TracerTagBuilder) BoolSlice(name string, v []bool)
- func (builder *TracerTagBuilder) Float64(name string, v float64)
- func (builder *TracerTagBuilder) Float64Slice(name string, v []float64)
- func (builder *TracerTagBuilder) Int(name string, v int)
- func (builder *TracerTagBuilder) Int64(name string, v int64)
- func (builder *TracerTagBuilder) Int64Slice(name string, v []int64)
- func (builder *TracerTagBuilder) IntSlice(name string, v []int)
- func (builder *TracerTagBuilder) Result() []KeyValue
- func (builder *TracerTagBuilder) String(name string, v string)
- func (builder *TracerTagBuilder) StringSlice(name string, v []string)
- func (builder *TracerTagBuilder) Value(name string, v any)
- type TracerTagMarshaler
- type ValueContext
Examples ¶
Constants ¶
View Source
const ( // SpanKindUnspecified is an unspecified SpanKind and is not a valid // SpanKind. SpanKindUnspecified should be replaced with SpanKindInternal // if it is received. SpanKindUnspecified = trace.SpanKindUnspecified // SpanKindInternal is a SpanKind for a Span that represents an internal // operation within an application. SpanKindInternal = trace.SpanKindInternal // SpanKindServer is a SpanKind for a Span that represents the operation // of handling a request from a client. SpanKindServer = trace.SpanKindServer // SpanKindClient is a SpanKind for a Span that represents the operation // of client making a request to a server. SpanKindClient = trace.SpanKindClient // SpanKindProducer is a SpanKind for a Span that represents the operation // of a producer sending a message to a message broker. Unlike // SpanKindClient and SpanKindServer, there is often no direct // relationship between this kind of Span and a SpanKindConsumer kind. A // SpanKindProducer Span will end once the message is accepted by the // message broker which might not overlap with the processing of that // message. SpanKindProducer = trace.SpanKindProducer // SpanKindConsumer is a SpanKind for a Span that represents the operation // of a consumer receiving a message from a message broker. Like // SpanKindProducer Spans, there is often no direct relationship between // this Span and the Span that produced the message. SpanKindConsumer = trace.SpanKindConsumer )
View Source
const ( // FlagsSampled is a bitmask with the sampled bit set. A SpanContext // with the sampling bit set means the span is sampled. FlagsSampled = trace.FlagsSampled )
Variables ¶
This section is empty.
Functions ¶
func ContextWithSpan ¶
func ContextWithSpan(parent context.Context, span *SeveritySpan) context.Context
func GetTextMapPropagator ¶
func GetTextMapPropagator() propagation.TextMapPropagator
func IsNoopSeveritySpan ¶
func IsNoopSeveritySpan(span *SeveritySpan) bool
func IsOtelNoopSpan ¶
func SetSpanExtractor ¶
func SetSpanExtractor(extractor SpanExtractor)
func SetSpanInjector ¶
func SetSpanInjector(injector SpanInjector)
func SetTextMapPropagator ¶
func SetTextMapPropagator(propagator propagation.TextMapPropagator)
func SetTracerProvider ¶
func SetTracerProvider(tp *SeverityTracerProvider)
func SpanToContext ¶
func SpanToContext(ctx context.Context, span *SeveritySpan) context.Context
func WithInstrumentationVersion ¶
func WithInstrumentationVersion(version string) trace.TracerOption
func WithLinks ¶
func WithLinks(links ...Link) trace.SpanStartOption
func WithNewRoot ¶
func WithNewRoot() trace.SpanStartOption
func WithSchemaURL ¶
func WithSchemaURL(schemaURL string) trace.TracerOption
func WithSpanKind ¶
func WithSpanKind(kind SpanKind) trace.SpanStartOption
func WithStackTrace ¶
func WithStackTrace(b bool) trace.SpanEndEventOption
Types ¶
type CompositeSpanExtractor ¶
type CompositeSpanExtractor []SpanExtractor
func NewCompositeSpanExtractor ¶
func NewCompositeSpanExtractor(extractors ...SpanExtractor) CompositeSpanExtractor
func (CompositeSpanExtractor) Extract ¶
func (ext CompositeSpanExtractor) Extract(ctx context.Context) *SeveritySpan
Extract implements SpanExtractor
type NoopSpanInjector ¶
type NoopSpanInjector int
func (NoopSpanInjector) Inject ¶
func (NoopSpanInjector) Inject(ctx context.Context, span *SeveritySpan) context.Context
Inject implements SpanInjector.
type SeverityEvent ¶
type SeverityEvent struct {
// contains filtered or unexported fields
}
func (*SeverityEvent) IsRecording ¶
func (s *SeverityEvent) IsRecording() bool
IsRecording implements SpanEvent
func (*SeverityEvent) Tags ¶
func (s *SeverityEvent) Tags(tags ...KeyValue)
Tags implements SpanEvent
type SeveritySpan ¶
type SeveritySpan struct {
// contains filtered or unexported fields
}
func CreateSeveritySpan ¶
func CreateSeveritySpan(ctx context.Context) *SeveritySpan
func SpanFromContext ¶
func SpanFromContext(ctx context.Context, extractors ...SpanExtractor) *SeveritySpan
func (*SeveritySpan) Argv ¶
func (s *SeveritySpan) Argv(v any)
func (*SeveritySpan) Context ¶
func (s *SeveritySpan) Context() context.Context
func (*SeveritySpan) Disable ¶
func (s *SeveritySpan) Disable(disabled bool)
func (*SeveritySpan) End ¶
func (s *SeveritySpan) End(opts ...trace.SpanEndOption)
func (*SeveritySpan) Err ¶
func (s *SeveritySpan) Err(err error)
func (*SeveritySpan) HasSpanID ¶
func (s *SeveritySpan) HasSpanID() bool
func (*SeveritySpan) HasTraceID ¶
func (s *SeveritySpan) HasTraceID() bool
func (*SeveritySpan) Inject ¶
func (s *SeveritySpan) Inject(p propagation.TextMapPropagator, c propagation.TextMapCarrier)
func (*SeveritySpan) IsDisabled ¶
func (s *SeveritySpan) IsDisabled() bool
func (*SeveritySpan) Link ¶
func (s *SeveritySpan) Link() Link
func (*SeveritySpan) Reply ¶
func (s *SeveritySpan) Reply(code ReplyCode, v any)
func (*SeveritySpan) SpanID ¶
func (s *SeveritySpan) SpanID() trace.SpanID
func (*SeveritySpan) Tags ¶
func (s *SeveritySpan) Tags(tags ...KeyValue)
func (*SeveritySpan) TraceFlags ¶
func (s *SeveritySpan) TraceFlags() trace.TraceFlags
func (*SeveritySpan) TraceID ¶
func (s *SeveritySpan) TraceID() trace.TraceID
func (*SeveritySpan) TraceState ¶
func (s *SeveritySpan) TraceState() trace.TraceState
type SeverityTracer ¶
type SeverityTracer struct {
// contains filtered or unexported fields
}
func CreateSeverityTracer ¶
func CreateSeverityTracer(tr trace.Tracer) *SeverityTracer
func Tracer ¶
func Tracer(name string, opts ...trace.TracerOption) *SeverityTracer
func (*SeverityTracer) Extract ¶
func (s *SeverityTracer) Extract( ctx context.Context, carrier propagation.TextMapCarrier, spanName string, opts ...trace.SpanStartOption) *SeveritySpan
func (*SeverityTracer) ExtractWithPropagator ¶
func (s *SeverityTracer) ExtractWithPropagator( ctx context.Context, propagator propagation.TextMapPropagator, carrier propagation.TextMapCarrier, spanName string, opts ...trace.SpanStartOption) *SeveritySpan
Example ¶
package main
import (
"context"
"log"
"time"
"github.com/Bofry/trace"
"go.opentelemetry.io/otel/propagation"
)
func main() {
tp, err := trace.OTLPProvider("http://localhost:4318",
trace.ServiceName("trace-demo"),
trace.Environment("go-test"),
trace.Pid(),
)
if err != nil {
log.Fatal(err)
}
// Register our TracerProvider as the global so any imported
// instrumentation in the future will default to using it.
trace.SetTracerProvider(tp)
trace.SetTextMapPropagator(propagation.NewCompositeTextMapPropagator(
propagation.TraceContext{},
propagation.Baggage{},
))
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
// Cleanly shutdown and flush telemetry when the application exits.
defer func(ctx context.Context) {
// Do not make the application hang when it is shutdown.
ctx, cancel = context.WithTimeout(ctx, time.Second*10)
defer cancel()
if err := tp.Shutdown(ctx); err != nil {
log.Fatal(err)
}
}(ctx)
tr := tp.Tracer("example-main")
sp := tr.Open(ctx, "example()")
defer sp.End()
sp.Info("example starting")
// subroutine
var bar = func(carrier propagation.TextMapCarrier, arg string) {
bartp, err := trace.OTLPProvider("http://localhost:4318",
trace.ServiceName("trace-demo-outside-boundary"),
trace.Environment("go-test"),
trace.Pid(),
)
if err != nil {
log.Fatal(err)
}
bartpctx, cancel := context.WithCancel(context.Background())
defer cancel()
// Cleanly shutdown and flush telemetry when the application exits.
defer func(ctx context.Context) {
// Do not make the application hang when it is shutdown.
ctx, cancel = context.WithTimeout(ctx, time.Second*5)
defer cancel()
if err := bartp.Shutdown(ctx); err != nil {
log.Fatal(err)
}
}(bartpctx)
propagator := trace.GetTextMapPropagator()
bartr := bartp.Tracer("example-bar")
barctx := context.Background() // can use nil instead of context.Background()
barsp := bartr.ExtractWithPropagator(barctx, propagator, carrier, "bar()")
defer barsp.End()
barsp.Argv(arg)
barsp.Reply(trace.PASS, "OK")
}
/* NOTE: the following statements also can be written as
*
* way 1:
* carrier := make(propagation.MapCarrier)
* propagator := trace.GetTextMapPropagator()
* propagator.Inject(sp.Context(), carrier)
*
* way 2:
* carrier := make(propagation.MapCarrier)
* propagator := trace.GetTextMapPropagator()
* tr.InjectWithPropagator(sp.Context(), propagator, carrier)
*
* way 3:
* carrier := make(propagation.MapCarrier)
* tr.Inject(sp.Context(), carrier)
*/
carrier := make(propagation.MapCarrier)
propagator := trace.GetTextMapPropagator()
sp.Inject(propagator, carrier)
// call subroutine
bar(carrier, "foo")
}
func (*SeverityTracer) Inject ¶
func (s *SeverityTracer) Inject( ctx context.Context, carrier propagation.TextMapCarrier)
func (*SeverityTracer) InjectWithPropagator ¶
func (s *SeverityTracer) InjectWithPropagator( ctx context.Context, propagator propagation.TextMapPropagator, carrier propagation.TextMapCarrier)
func (*SeverityTracer) Link ¶
func (s *SeverityTracer) Link( ctx context.Context, link Link, spanName string, opts ...trace.SpanStartOption) *SeveritySpan
Example ¶
package main
import (
"context"
"fmt"
"log"
"time"
"github.com/Bofry/trace"
)
func main() {
tp, err := trace.OTLPProvider("http://localhost:4318",
trace.ServiceName("trace-demo"),
trace.Environment("go-test"),
trace.Pid(),
)
if err != nil {
log.Fatal(err)
}
// Register our TracerProvider as the global so any imported
// instrumentation in the future will default to using it.
trace.SetTracerProvider(tp)
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
// Cleanly shutdown and flush telemetry when the application exits.
defer func(ctx context.Context) {
// Do not make the application hang when it is shutdown.
ctx, cancel = context.WithTimeout(ctx, time.Second*5)
defer cancel()
if err := tp.Shutdown(ctx); err != nil {
log.Fatal(err)
}
}(ctx)
tr := tp.Tracer("example-main")
sp := tr.Open(ctx, "example()")
defer sp.End()
sp.Info("example starting")
// subroutine
var bar = func(link trace.Link, arg string) {
barctx := context.Background() // can use nil instead of context.Background()
barsp := tr.Link(barctx, link, "bar()")
defer barsp.End()
barsp.Argv(arg)
barsp.Err(fmt.Errorf("an error occurred"))
}
// call subroutine
bar(sp.Link(), "foo")
}
func (*SeverityTracer) Open ¶
func (s *SeverityTracer) Open( ctx context.Context, spanName string, opts ...trace.SpanStartOption) *SeveritySpan
func (*SeverityTracer) Start ¶
func (s *SeverityTracer) Start( ctx context.Context, spanName string, opts ...trace.SpanStartOption) *SeveritySpan
Example ¶
package main
import (
"context"
"fmt"
"log"
"time"
"github.com/Bofry/trace"
)
func main() {
tp, err := trace.OTLPProvider("http://localhost:4318",
trace.ServiceName("trace-demo"),
trace.Environment("go-test"),
trace.Pid(),
)
if err != nil {
log.Fatal(err)
}
// Register our TracerProvider as the global so any imported
// instrumentation in the future will default to using it.
trace.SetTracerProvider(tp)
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
// Cleanly shutdown and flush telemetry when the application exits.
defer func(ctx context.Context) {
// Do not make the application hang when it is shutdown.
ctx, cancel = context.WithTimeout(ctx, time.Second*5)
defer cancel()
if err := tp.Shutdown(ctx); err != nil {
log.Fatal(err)
}
}(ctx)
tr := tp.Tracer("example-main")
sp := tr.Open(ctx, "example()")
defer sp.End()
sp.Info("example starting")
// subroutine
var bar = func(ctx context.Context, arg string) {
barsp := tr.Start(ctx, "bar()")
defer barsp.End()
barsp.Argv(arg)
barsp.Reply(trace.PASS, "OK")
}
ok := trace.IsNoopSeveritySpan(sp)
sp.Debug("check IsNoopSeveritySpan()").Tags(
trace.Key("IsNoopSeveritySpan").Bool(ok),
)
sp.Debug("log an error").Error(fmt.Errorf("some error"))
// call subroutine
bar(sp.Context(), "foo")
}
type SeverityTracerProvider ¶
type SeverityTracerProvider struct {
// contains filtered or unexported fields
}
func CreateSeverityTracerProvider ¶
func CreateSeverityTracerProvider(provider trace.TracerProvider) *SeverityTracerProvider
func GetTracerProvider ¶
func GetTracerProvider() *SeverityTracerProvider
func JaegerCompatibleProvider ¶ added in v0.3.1
func JaegerCompatibleProvider(endpoint string, attrs ...KeyValue) (*SeverityTracerProvider, error)
JaegerCompatibleProvider creates a provider that sends traces to Jaeger using OTLP This is a convenience function for testing with local Jaeger instances.
For Jaeger v1.35+, it uses the OTLP endpoint (port 4318 for HTTP). For older Jaeger versions, you may need to use the legacy Jaeger collector ports.
Usage:
tp, err := trace.JaegerCompatibleProvider("http://localhost:4318", attrs...)
// Or for Jaeger running on legacy port: "http://localhost:14268" (will auto-convert to OTLP)
func OTLPGRPCProvider ¶ added in v0.3.0
func OTLPGRPCProvider(endpoint string, attrs ...KeyValue) (*SeverityTracerProvider, error)
OTLPGRPCProvider creates a provider using OTLP gRPC exporter
func OTLPProvider ¶ added in v0.3.0
func OTLPProvider(endpoint string, attrs ...KeyValue) (*SeverityTracerProvider, error)
OTLPProvider creates a provider using OTLP HTTP exporter
func (*SeverityTracerProvider) Shutdown ¶
func (p *SeverityTracerProvider) Shutdown(ctx context.Context) error
func (*SeverityTracerProvider) Tracer ¶
func (p *SeverityTracerProvider) Tracer(name string, opts ...trace.TracerOption) *SeverityTracer
func (*SeverityTracerProvider) TracerProvider ¶
func (p *SeverityTracerProvider) TracerProvider() trace.TracerProvider
type SpanExtractor ¶
type SpanExtractor interface {
Extract(ctx context.Context) *SeveritySpan
}
func GetSpanExtractor ¶
func GetSpanExtractor() SpanExtractor
type SpanInjector ¶
type SpanInjector interface {
Inject(ctx context.Context, span *SeveritySpan) context.Context
}
func GetSpanInjector ¶
func GetSpanInjector() SpanInjector
type TraceFlags ¶
type TraceFlags = trace.TraceFlags
type TracerTagBuilder ¶
type TracerTagBuilder struct {
// contains filtered or unexported fields
}
func (*TracerTagBuilder) Bool ¶
func (builder *TracerTagBuilder) Bool(name string, v bool)
func (*TracerTagBuilder) BoolSlice ¶
func (builder *TracerTagBuilder) BoolSlice(name string, v []bool)
func (*TracerTagBuilder) Float64 ¶
func (builder *TracerTagBuilder) Float64(name string, v float64)
func (*TracerTagBuilder) Float64Slice ¶
func (builder *TracerTagBuilder) Float64Slice(name string, v []float64)
func (*TracerTagBuilder) Int ¶
func (builder *TracerTagBuilder) Int(name string, v int)
func (*TracerTagBuilder) Int64 ¶
func (builder *TracerTagBuilder) Int64(name string, v int64)
func (*TracerTagBuilder) Int64Slice ¶
func (builder *TracerTagBuilder) Int64Slice(name string, v []int64)
func (*TracerTagBuilder) IntSlice ¶
func (builder *TracerTagBuilder) IntSlice(name string, v []int)
func (*TracerTagBuilder) Result ¶
func (builder *TracerTagBuilder) Result() []KeyValue
func (*TracerTagBuilder) String ¶
func (builder *TracerTagBuilder) String(name string, v string)
func (*TracerTagBuilder) StringSlice ¶
func (builder *TracerTagBuilder) StringSlice(name string, v []string)
func (*TracerTagBuilder) Value ¶
func (builder *TracerTagBuilder) Value(name string, v any)
type TracerTagMarshaler ¶
type TracerTagMarshaler interface {
MarshalTracerTag(builder *TracerTagBuilder) error
}
type ValueContext ¶
Click to show internal directories.
Click to hide internal directories.