opencensus

package module
v0.9.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 30, 2018 License: Apache-2.0 Imports: 0 Imported by: 0

README

OpenCensus Libraries for Go

Build Status Windows Build Status GoDoc Gitter chat

OpenCensus Go is a Go implementation of OpenCensus, a toolkit for collecting application performance and behavior monitoring data. Currently it consists of three major components: tags, stats, and tracing.

Installation

$ go get -u go.opencensus.io

The API of this project is still evolving, see: Deprecation Policy. The use of vendoring or a dependency management tool is recommended.

Prerequisites

OpenCensus Go libraries require Go 1.8 or later.

Exporters

OpenCensus can export instrumentation data to various backends. Currently, OpenCensus supports:

Overview

OpenCensus Overview

In a microservices environment, a user request may go through multiple services until there is a response. OpenCensus allows you to instrument your services and collect diagnostics data all through your services end-to-end.

Start with instrumenting HTTP and gRPC clients and servers, then add additional custom instrumentation if needed.

Tags

Tags represent propagated key-value pairs. They are propagated using context.Context in the same process or can be encoded to be transmitted on the wire. Usually, this will be handled by an integration plugin, e.g. ocgrpc.ServerHandler and ocgrpc.ClientHandler for gRPC.

Package tag allows adding or modifying tags in the current context.

ctx, err = tag.New(ctx,
	tag.Insert(osKey, "macOS-10.12.5"),
	tag.Upsert(userIDKey, "cde36753ed"),
)
if err != nil {
	log.Fatal(err)
}

Stats

OpenCensus is a low-overhead framework even if instrumentation is always enabled. In order to be so, it is optimized to make recording of data points fast and separate from the data aggregation.

OpenCensus stats collection happens in two stages:

  • Definition of measures and recording of data points
  • Definition of views and aggregation of the recorded data
Recording

Measurements are data points associated with a measure. Recording implicitly tags the set of Measurements with the tags from the provided context:

stats.Record(ctx, videoSize.M(102478))
Views

Views are how Measures are aggregated. You can think of them as queries over the set of recorded data points (measurements).

Views have two parts: the tags to group by and the aggregation type used.

Currently three types of aggregations are supported:

  • CountAggregation is used to count the number of times a sample was recorded.
  • DistributionAggregation is used to provide a histogram of the values of the samples.
  • SumAggregation is used to sum up all sample values.
distAgg := view.Distribution(0, 1<<32, 2<<32, 3<<32)
countAgg := view.Count()
sumAgg := view.Sum()

Here we create a view with the DistributionAggregation over our measure.

if err := view.Register(&view.View{
	Name:        "my.org/video_size_distribution",
	Description: "distribution of processed video size over time",
	Measure:     videoSize,
	Aggregation: view.Distribution(0, 1<<32, 2<<32, 3<<32),
}); err != nil {
	log.Fatalf("Failed to subscribe to view: %v", err)
}

Subscribe begins collecting data for the view. Subscribed views' data will be exported via the registered exporters.

Traces

ctx, span := trace.StartSpan(ctx, "your choice of name")
defer span.End()

Profiles

OpenCensus tags can be applied as profiler labels for users who are on Go 1.9 and above.

ctx, err = tag.New(ctx,
	tag.Insert(osKey, "macOS-10.12.5"),
	tag.Insert(userIDKey, "fff0989878"),
)
if err != nil {
	log.Fatal(err)
}
tag.Do(ctx, func(ctx context.Context) {
	// Do work.
	// When profiling is on, samples will be
	// recorded with the key/values from the tag map.
})

A screenshot of the CPU profile from the program above:

CPU profile

Deprecation Policy

Before version 1.0.0, the following deprecation policy will be observed:

No backwards-incompatible changes will be made except for the removal of symbols that have been marked as Deprecated for at least one minor release (e.g. 0.9.0 to 0.10.0). A release removing the Deprecated functionality will be made no sooner than 28 days after the first release in which the functionality was marked Deprecated.

Documentation

Overview

Package opencensus contains Go support for OpenCensus.

Directories

Path Synopsis
examples
grpc/proto
Package helloworld is a generated protocol buffer package.
Package helloworld is a generated protocol buffer package.
helloworld
Command helloworld is an example program that collects data for video size.
Command helloworld is an example program that collects data for video size.
exporter
jaeger
Package jaeger contains an OpenCensus tracing exporter for Jaeger.
Package jaeger contains an OpenCensus tracing exporter for Jaeger.
jaeger/example
Command jaeger is an example program that creates spans and uploads to Jaeger.
Command jaeger is an example program that creates spans and uploads to Jaeger.
prometheus
Package prometheus contains a Prometheus exporter.
Package prometheus contains a Prometheus exporter.
prometheus/example
Command prometheus is an example program that collects data for video size.
Command prometheus is an example program that collects data for video size.
stackdriver
Package stackdriver has moved.
Package stackdriver has moved.
stackdriver/examples/stats
Command stackdriver is an example program that collects data for video size.
Command stackdriver is an example program that collects data for video size.
stackdriver/propagation
Package propagation implement X-Cloud-Trace-Context header propagation used by Google Cloud products.
Package propagation implement X-Cloud-Trace-Context header propagation used by Google Cloud products.
zipkin
Package zipkin contains an trace exporter for Zipkin.
Package zipkin contains an trace exporter for Zipkin.
readme
Package readme generates the README.
Package readme generates the README.
tagencoding
Package tagencoding contains the tag encoding used interally by the stats collector.
Package tagencoding contains the tag encoding used interally by the stats collector.
testpb
Package testpb is a generated protocol buffer package.
Package testpb is a generated protocol buffer package.
plugin
ocgrpc
Package ocgrpc contains OpenCensus stats and trace integrations for gRPC.
Package ocgrpc contains OpenCensus stats and trace integrations for gRPC.
ochttp
Package ochttp provides OpenCensus instrumentation for net/http package.
Package ochttp provides OpenCensus instrumentation for net/http package.
ochttp/propagation/b3
Package b3 contains a propagation.HTTPFormat implementation for B3 propagation.
Package b3 contains a propagation.HTTPFormat implementation for B3 propagation.
ochttp/propagation/tracecontext
Package tracecontext contains HTTP propagator for TraceContext standard.
Package tracecontext contains HTTP propagator for TraceContext standard.
Package stats contains support for OpenCensus stats recording.
Package stats contains support for OpenCensus stats recording.
view
Package view contains support for collecting and exposing aggregates over stats.
Package view contains support for collecting and exposing aggregates over stats.
Package tag contains OpenCensus tags.
Package tag contains OpenCensus tags.
Package trace contains support for OpenCensus distributed tracing.
Package trace contains support for OpenCensus distributed tracing.
internal
Package internal provides trace internals.
Package internal provides trace internals.
propagation
Package propagation implements the binary trace context format.
Package propagation implements the binary trace context format.
Package zpages implements a collection of HTML pages that display RPC stats and trace data, and also functions to write that same data in plain text to an io.Writer.
Package zpages implements a collection of HTML pages that display RPC stats and trace data, and also functions to write that same data in plain text to an io.Writer.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL