Documentation ¶
Overview ¶
Package trace contains types for representing trace information, and functions for global configuration of tracing.
The following assumes a basic familiarity with OpenCensus concepts. See http://opencensus.io.
Enabling Tracing for a Program ¶
To use OpenCensus tracing, register at least one Exporter. You can use one of the provided exporters or write your own.
trace.RegisterExporter(anExporter)
By default, traces will be sampled relatively rarely. To change the sampling frequency for your entire program, call SetDefaultSampler. Use a ProbabilitySampler to sample a subset of traces, or use AlwaysSample to collect a trace on every run:
trace.SetDefaultSampler(trace.AlwaysSample())
Adding Spans to a Trace ¶
A trace consists of a tree of spans. In Go, the current span is carried in a context.Context.
It is common to want to capture all the activity of a function call in a span. For this to work, the function must take a context.Context as a parameter. Add these two lines to the top of the function:
ctx, span := trace.StartSpan(ctx, "your choice of name") defer span.End()
StartSpan will create a new top-level span if the context doesn't contain another span, otherwise it will create a child span.
As a suggestion, use the fully-qualified function name as the span name, e.g. "github.com/me/mypackage.Run".
Index ¶
- func RegisterExporter(e Exporter)
- func SetDefaultSampler(sampler Sampler)
- func UnregisterExporter(e Exporter)
- func WithSpan(parent context.Context, s *Span) context.Context
- type Annotation
- type Attribute
- type BoolAttribute
- type Exporter
- type Int64Attribute
- type Link
- type LinkType
- type MessageEvent
- type MessageEventType
- type Sampler
- type SamplingDecision
- type SamplingParameters
- type Span
- func FromContext(ctx context.Context) *Span
- func NewSpan(name string, parent *Span, o StartOptions) *Span
- func NewSpanWithRemoteParent(name string, parent SpanContext, o StartOptions) *Span
- func StartSpan(ctx context.Context, name string) (context.Context, *Span)
- func StartSpanWithOptions(ctx context.Context, name string, o StartOptions) (context.Context, *Span)
- func StartSpanWithRemoteParent(ctx context.Context, name string, parent SpanContext, o StartOptions) (context.Context, *Span)
- func (s *Span) AddLink(l Link)
- func (s *Span) AddMessageReceiveEvent(messageID, uncompressedByteSize, compressedByteSize int64)
- func (s *Span) AddMessageSendEvent(messageID, uncompressedByteSize, compressedByteSize int64)
- func (s *Span) Annotate(attributes []Attribute, str string)
- func (s *Span) Annotatef(attributes []Attribute, format string, a ...interface{})
- func (s *Span) End()
- func (s *Span) IsRecordingEvents() bool
- func (s *Span) SetAttributes(attributes ...Attribute)
- func (s *Span) SetStatus(status Status)
- func (s *Span) SpanContext() SpanContext
- func (s *Span) String() string
- type SpanContext
- type SpanData
- type SpanID
- type StartOptions
- type Status
- type StringAttribute
- type TraceID
- type TraceOptions
Examples ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func RegisterExporter ¶
func RegisterExporter(e Exporter)
RegisterExporter adds to the list of Exporters that will receive sampled trace spans.
func SetDefaultSampler ¶
func SetDefaultSampler(sampler Sampler)
SetDefaultSampler sets the default sampler used when creating new spans.
func UnregisterExporter ¶
func UnregisterExporter(e Exporter)
UnregisterExporter removes from the list of Exporters the Exporter that was registered with the given name.
Types ¶
type Annotation ¶
Annotation represents a text annotation with a set of attributes and a timestamp.
type Attribute ¶
type Attribute interface {
// contains filtered or unexported methods
}
Attribute is an interface for attributes; it is implemented by BoolAttribute, IntAttribute, and StringAttribute.
type BoolAttribute ¶
BoolAttribute represents a bool-valued attribute.
type Exporter ¶
type Exporter interface {
ExportSpan(s *SpanData)
}
Exporter is a type for functions that receive sampled trace spans.
The ExportSpan method should be safe for concurrent use and should return quickly; if an Exporter takes a significant amount of time to process a SpanData, that work should be done on another goroutine.
The SpanData should not be modified, but a pointer to it can be kept.
type Int64Attribute ¶
Int64Attribute represents an int64-valued attribute.
type Link ¶
type Link struct { TraceID TraceID SpanID SpanID Type LinkType // Attributes is a set of attributes on the link. Attributes map[string]interface{} }
Link represents a reference from one span to another span.
type LinkType ¶
type LinkType int32
LinkType specifies the relationship between the span that had the link added, and the linked span.
type MessageEvent ¶
type MessageEvent struct { Time time.Time EventType MessageEventType MessageID int64 UncompressedByteSize int64 CompressedByteSize int64 }
MessageEvent represents an event describing a message sent or received on the network.
type MessageEventType ¶
type MessageEventType int32
MessageEventType specifies the type of message event.
const ( MessageEventTypeUnspecified MessageEventType = iota // Unknown event type. MessageEventTypeSent // Indicates a sent RPC message. MessageEventTypeRecv // Indicates a received RPC message. )
MessageEventType values.
type Sampler ¶
type Sampler interface {
Sample(p SamplingParameters) SamplingDecision
}
Sampler is an interface for values that have a method that the trace library can call to determine whether to export a trace's spans.
func AlwaysSample ¶
func AlwaysSample() Sampler
AlwaysSample returns a Sampler that samples every trace.
func ProbabilitySampler ¶
ProbabilitySampler returns a Sampler that samples a given fraction of traces.
It also samples spans whose parents are sampled.
type SamplingDecision ¶
type SamplingDecision struct {
Sample bool
}
SamplingDecision is the value returned by a Sampler.
type SamplingParameters ¶
type SamplingParameters struct { ParentContext SpanContext TraceID TraceID SpanID SpanID Name string HasRemoteParent bool }
SamplingParameters contains the values passed to a Sampler.
type Span ¶
type Span struct {
// contains filtered or unexported fields
}
Span represents a span of a trace. It has an associated SpanContext, and stores data accumulated while the span is active.
Ideally users should interact with Spans by calling the functions in this package that take a Context parameter.
func FromContext ¶
FromContext returns the Span stored in a context, or nil if there isn't one.
func NewSpan ¶
func NewSpan(name string, parent *Span, o StartOptions) *Span
NewSpan returns a new span.
If parent is not nil, created span will be a child of the parent.
func NewSpanWithRemoteParent ¶
func NewSpanWithRemoteParent(name string, parent SpanContext, o StartOptions) *Span
NewSpanWithRemoteParent returns a new span with the given parent SpanContext.
func StartSpan ¶
StartSpan starts a new child span of the current span in the context.
If there is no span in the context, creates a new trace and span.
Example ¶
This example shows how to use StartSpan and (*Span).End to capture a function execution in a Span. It assumes that the function has a context.Context argument.
package main import ( "fmt" "go.opencensus.io/trace" "golang.org/x/net/context" ) func main() { printEvens := func(ctx context.Context) { ctx, span := trace.StartSpan(ctx, "my/package.Function") defer span.End() for i := 0; i < 10; i++ { if i%2 == 0 { fmt.Printf("Even!\n") } } } ctx := context.Background() printEvens(ctx) }
Output:
func StartSpanWithOptions ¶
func StartSpanWithOptions(ctx context.Context, name string, o StartOptions) (context.Context, *Span)
StartSpanWithOptions starts a new child span of the current span in the context.
If there is no span in the context, creates a new trace and span.
func StartSpanWithRemoteParent ¶
func StartSpanWithRemoteParent(ctx context.Context, name string, parent SpanContext, o StartOptions) (context.Context, *Span)
StartSpanWithRemoteParent starts a new child span with the given parent SpanContext.
If there is an existing span in ctx, it is ignored -- the returned Span is a child of the span specified by parent.
func (*Span) AddMessageReceiveEvent ¶
AddMessageReceiveEvent adds a message receive event to the span.
messageID is an identifier for the message, which is recommended to be unique in this span and the same between the send event and the receive event (this allows to identify a message between the sender and receiver). For example, this could be a sequence id.
func (*Span) AddMessageSendEvent ¶
AddMessageSendEvent adds a message send event to the span.
messageID is an identifier for the message, which is recommended to be unique in this span and the same between the send event and the receive event (this allows to identify a message between the sender and receiver). For example, this could be a sequence id.
func (*Span) Annotate ¶ added in v0.2.0
Annotate adds an annotation with attributes. Attributes can be nil.
func (*Span) IsRecordingEvents ¶
IsRecordingEvents returns true if events are being recorded for this span.
func (*Span) SetAttributes ¶
SetAttributes sets attributes in the span.
Existing attributes whose keys appear in the attributes parameter are overwritten.
func (*Span) SpanContext ¶
func (s *Span) SpanContext() SpanContext
SpanContext returns the SpanContext of the span.
type SpanContext ¶
type SpanContext struct { TraceID TraceID SpanID SpanID TraceOptions TraceOptions }
SpanContext contains the state that must propagate across process boundaries.
SpanContext is not an implementation of context.Context. TODO: add reference to external Census docs for SpanContext.
func (SpanContext) IsSampled ¶
func (sc SpanContext) IsSampled() bool
IsSampled returns true if the span will be exported.
type SpanData ¶
type SpanData struct { SpanContext ParentSpanID SpanID Name string StartTime time.Time // The wall clock time of EndTime will be adjusted to always be offset // from StartTime by the duration of the span. EndTime time.Time // The values of Attributes each have type string, bool, or int64. Attributes map[string]interface{} Annotations []Annotation MessageEvents []MessageEvent Status Links []Link HasRemoteParent bool }
SpanData contains all the information collected by a Span.
type StartOptions ¶ added in v0.2.0
type StartOptions struct { // RecordEvents indicates whether to record data for this span, and include // the span in a local span store. // Events will also be recorded if the span will be exported. RecordEvents bool Sampler Sampler // if non-nil, the Sampler to consult for this span. // RegisterNameForLocalSpanStore indicates that a local span store for spans // of this name should be created, if one does not exist. // If RecordEvents is false, this option has no effect. RegisterNameForLocalSpanStore bool }
StartOptions contains options concerning how a span is started.
type Status ¶
type Status struct { // Code is a status code. Zero indicates success. // // If Code will be propagated to Google APIs, it ideally should be a value from // https://github.com/googleapis/googleapis/blob/master/google/rpc/code.proto . Code int32 Message string }
Status is the status of a Span.
type StringAttribute ¶
StringAttribute represents a string-valued attribute.
type TraceOptions ¶
type TraceOptions uint32
TraceOptions contains options associated with a trace span.
func (TraceOptions) IsSampled ¶
func (t TraceOptions) IsSampled() bool
IsSampled returns true if the span will be exported.
Source Files ¶
Directories ¶
Path | Synopsis |
---|---|
Package propagation implements the binary trace context format.
|
Package propagation implements the binary trace context format. |