Documentation ¶
Overview ¶
Example (EndToEnd) ¶
package main import ( "context" "encoding/json" "log" "time" "contrib.go.opencensus.io/exporter/ocagent" "go.opencensus.io/trace" "github.com/census-instrumentation/opencensus-service/data" "github.com/census-instrumentation/opencensus-service/receiver" "github.com/census-instrumentation/opencensus-service/receiver/opencensus" ) func main() { // This is what the cmd/ocagent code would look like this. // A trace receiver as per the trace receiver // configs that have been parsed. tr, err := opencensus.New("localhost:55678") if err != nil { log.Fatalf("Failed to create trace receiver: %v", err) } // The agent will combine all trace receivers like this. trl := []receiver.TraceReceiver{tr} // Once we have the span receiver which will connect to the // various exporter pipeline i.e. *tracepb.Span->OpenCensus.SpanData lsr := new(logSpanSink) for _, tr := range trl { if err := tr.StartTraceReception(context.Background(), lsr); 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.StopTraceReception(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 trace.RegisterExporter(oce) // 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++ { _, span := trace.StartSpan(ctx, "ChildSpan") span.Annotatef([]trace.Attribute{ trace.StringAttribute("type", "Child"), trace.Int64Attribute("i", int64(i)), }, "This is an annotation") <-time.After(100 * time.Millisecond) span.End() oce.Flush() } span.End() <-time.After(400 * time.Millisecond) oce.Flush() <-time.After(5 * time.Second) } type logSpanSink int var _ receiver.TraceReceiverSink = (*logSpanSink)(nil) func (lsr *logSpanSink) ReceiveTraceData(ctx context.Context, td data.TraceData) (*receiver.TraceReceiverAcknowledgement, error) { spansBlob, _ := json.MarshalIndent(td.Spans, " ", " ") log.Printf("\n****\nNode: %#v\nSpans: %s\n****\n", td.Node, spansBlob) return &receiver.TraceReceiverAcknowledgement{SavedSpans: uint64(len(td.Spans))}, nil }
Output:
Index ¶
Examples ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type MetricsReceiver ¶
type MetricsReceiver interface { StartMetricsReception(ctx context.Context, destination MetricsReceiverSink) error StopMetricsReception(ctx context.Context) error }
A MetricsReceiver is an "arbitrary data"-to-"metric proto" converter. Its purpose is to translate data from the wild into metric proto accompanied by a *commonpb.Node to uniquely identify where that data comes from. MetricsReceiver feeds a MetricsReceiverSink with data.
For example it could be Prometheus data source which translates Prometheus metrics into *metricpb.Metric-s.
func MultiMetricsReceiver ¶ added in v0.0.3
func MultiMetricsReceiver(mrs ...MetricsReceiver) MetricsReceiver
MultiMetricsReceiver wraps multiple metrics receivers in a single one.
type MetricsReceiverAcknowledgement ¶ added in v0.0.3
MetricsReceiverAcknowledgement struct reports the number of saved and dropped metrics in a ReceiveMetricsData call.
type MetricsReceiverSink ¶ added in v0.0.3
type MetricsReceiverSink interface {
ReceiveMetricsData(ctx context.Context, metricsdata data.MetricsData) (*MetricsReceiverAcknowledgement, error)
}
MetricsReceiverSink is an interface that receives MetricsData.
type TraceReceiver ¶
type TraceReceiver interface { StartTraceReception(ctx context.Context, destination TraceReceiverSink) error StopTraceReception(ctx context.Context) error }
A TraceReceiver is an "arbitrary data"-to-"trace proto span" converter. Its purpose is to translate data from the wild into trace proto accompanied by a *commonpb.Node to uniquely identify where that data comes from. TraceReceiver feeds a TraceReceiverSink with data.
For example it could be Zipkin data source which translates Zipkin spans into *tracepb.Span-s.
StartTraceReception tells the receiver to start its processing.
StopTraceReception tells the receiver that should stop reception, giving it a chance to perform any necessary clean-up.
func MultiTraceReceiver ¶ added in v0.0.3
func MultiTraceReceiver(trs ...TraceReceiver) TraceReceiver
MultiTraceReceiver wraps multiple trace receivers in a single one.
type TraceReceiverAcknowledgement ¶ added in v0.0.3
TraceReceiverAcknowledgement struct reports the number of saved and dropped spans in a ReceiveTraceData call.
type TraceReceiverSink ¶ added in v0.0.3
type TraceReceiverSink interface {
ReceiveTraceData(ctx context.Context, tracedata data.TraceData) (*TraceReceiverAcknowledgement, error)
}
TraceReceiverSink is an interface that receives TraceData.
Directories ¶
Path | Synopsis |
---|---|
ocmetrics
Package ocmetrics is the logic for receiving OpenCensus metrics proto from already instrumented applications and then passing them onto a metricsink instance.
|
Package ocmetrics is the logic for receiving OpenCensus metrics proto from already instrumented applications and then passing them onto a metricsink instance. |
octrace
Package octrace is the logic for receiving OpenCensus trace protobuf defined spans from already instrumented applications and then passing them onto a TraceReceiverSink instance.
|
Package octrace is the logic for receiving OpenCensus trace protobuf defined spans from already instrumented applications and then passing them onto a TraceReceiverSink instance. |
Package prometheus has the logic for scraping Prometheus metrics from already instrumented applications and then passing them onto a metricsink instance.
|
Package prometheus has the logic for scraping Prometheus metrics from already instrumented applications and then passing them onto a metricsink instance. |