Back to

package receiver

Latest Go to latest
Published: Jun 16, 2020 | License: Apache-2.0 | Module:


Package receiver contains implementations of Receiver components.

To implement a custom receiver you will need to implement component.ReceiverFactory interface and component.Receiver interface.

To make the custom receiver part of the Collector build the factory must be added to defaultcomponents.Components() function.

Example (EndToEnd)


// This is what the cmd/ocagent code would look like this.
// A trace receiver as per the trace receiver
// configs that have been parsed.
lte, err := loggingexporter.NewTraceExporter(&configmodels.ExporterSettings{}, "debug", zap.NewNop())
if err != nil {
	log.Fatalf("Failed to create logging exporter: %v", err)

tr, err := opencensusreceiver.New("opencensus", "tcp", "localhost:55678", converter.NewOCToInternalTraceConverter(lte), nil)
if err != nil {
	log.Fatalf("Failed to create trace receiver: %v", err)

// The agent will combine all trace receivers like this.
trl := []component.TraceReceiver{tr}

// Once we have the span receiver which will connect to the
// various exporter pipeline i.e. *tracepb.Span->OpenCensus.SpanData
for _, tr := range trl {
	if err = tr.Start(context.Background(), nil); err != nil {
		log.Fatalf("Failed to start trace receiver: %v", err)

// Before exiting, stop all the trace receivers
defer func() {
	for _, tr := range trl {
		_ = tr.Shutdown(context.Background())
log.Println("Done starting the trace receiver")
// We are done with the agent-core

// Now this code would exist in the client application e.g. client code.
// Create the agent exporter
oce, err := ocagent.NewExporter(ocagent.WithInsecure())
if err != nil {
	log.Fatalf("Failed to create ocagent exporter: %v", err)
defer oce.Stop()

// Register it as a trace exporter
// For demo purposes we are always sampling
trace.ApplyConfig(trace.Config{DefaultSampler: trace.AlwaysSample()})

log.Println("Starting loop")
ctx, span := trace.StartSpan(context.Background(), "ClientLibrarySpan")
for i := 0; i < 10; i++ {
	_, childSpan := trace.StartSpan(ctx, "ChildSpan")
		trace.StringAttribute("type", "Child"),
		trace.Int64Attribute("i", int64(i)),
	}, "This is an annotation")
	<-time.After(100 * time.Millisecond)

<-time.After(400 * time.Millisecond)
<-time.After(5 * time.Second)



Documentation was rendered with GOOS=linux and GOARCH=amd64.

Jump to identifier

Keyboard shortcuts

? : This menu
f or F : Jump to identifier