All Projects → census-instrumentation → Opencensus Go

census-instrumentation / Opencensus Go

Licence: apache-2.0
A stats collection and distributed tracing framework

Programming Languages

go
31211 projects - #10 most used programming language

Projects that are alternatives of or similar to Opencensus Go

Opencensus Java
A stats collection and distributed tracing framework
Stars: ✭ 640 (-66.23%)
Mutual labels:  cloud, monitoring, prometheus, stats, distributed-tracing, trace, zipkin
Opencensus Node
A stats collection and distributed tracing framework
Stars: ✭ 249 (-86.86%)
Mutual labels:  cloud, monitoring, stats, distributed-tracing, trace, zipkin
Opencensus Web
A stats collection and distributed tracing framework
Stars: ✭ 168 (-91.13%)
Mutual labels:  cloud, monitoring, stats, distributed-tracing, trace
gateway
A proxy to buffer and forward metrics, events, and traces.
Stars: ✭ 94 (-95.04%)
Mutual labels:  prometheus, zipkin, distributed-tracing, jaegertracing, opencensus
Opencensus Csharp
Distributed tracing and stats collecting framework
Stars: ✭ 126 (-93.35%)
Mutual labels:  cloud, monitoring, stats, distributed-tracing, trace
Opencensus Erlang
A stats collection and distributed tracing framework
Stars: ✭ 131 (-93.09%)
Mutual labels:  cloud, monitoring, stats, trace
Applicationinsights Python
Application Insights SDK for Python
Stars: ✭ 114 (-93.98%)
Mutual labels:  monitoring, distributed-tracing, trace
Loki
Loki: Simple, Distributed Tracing
Stars: ✭ 127 (-93.3%)
Mutual labels:  prometheus, distributed-tracing, zipkin
Jaeger Ui
Web UI for Jaeger
Stars: ✭ 639 (-66.28%)
Mutual labels:  monitoring, distributed-tracing, trace
Zipkin Go Opentracing
OpenTracing Bridge for Zipkin Go
Stars: ✭ 472 (-75.09%)
Mutual labels:  distributed-tracing, trace, zipkin
Zipkin Go
Zipkin tracer library for go
Stars: ✭ 435 (-77.04%)
Mutual labels:  distributed-tracing, trace, zipkin
Grpc By Example Java
A collection of useful/essential gRPC Java Examples
Stars: ✭ 709 (-62.59%)
Mutual labels:  prometheus, distributed-tracing, zipkin
Cloudprober
An active monitoring software to detect failures before your customers do.
Stars: ✭ 1,269 (-33.03%)
Mutual labels:  cloud, monitoring, prometheus
Heplify Server
HEP Capture Server
Stars: ✭ 110 (-94.2%)
Mutual labels:  monitoring, prometheus
Spring Cloud Sleuth
Distributed tracing for spring cloud
Stars: ✭ 1,531 (-19.21%)
Mutual labels:  distributed-tracing, zipkin
Applicationinsights Go
Microsoft Application Insights SDK for Go
Stars: ✭ 113 (-94.04%)
Mutual labels:  monitoring, distributed-tracing
Openitcockpit
openITCOCKPIT is an Open Source system monitoring tool built for different monitoring engines like Nagios, Naemon and Prometheus.
Stars: ✭ 108 (-94.3%)
Mutual labels:  monitoring, prometheus
Mq Golang
Calling IBM MQ from Go applications
Stars: ✭ 118 (-93.77%)
Mutual labels:  monitoring, prometheus
Prom2teams
prom2teams is an HTTP server built with Python that receives alert notifications from a previously configured Prometheus Alertmanager instance and forwards it to Microsoft Teams using defined connectors
Stars: ✭ 122 (-93.56%)
Mutual labels:  monitoring, prometheus
Grafana
The open and composable observability and data visualization platform. Visualize metrics, logs, and traces from multiple sources like Prometheus, Loki, Elasticsearch, InfluxDB, Postgres and many more.
Stars: ✭ 45,930 (+2323.75%)
Mutual labels:  monitoring, prometheus

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.

OpenCensus and OpenTracing have merged to form OpenTelemetry, which serves as the next major version of OpenCensus and OpenTracing. OpenTelemetry will offer backwards compatibility with existing OpenCensus integrations, and we will continue to make security patches to existing OpenCensus libraries for two years. Read more about the merger here.

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.

Getting Started

The easiest way to get started using OpenCensus in your application is to use an existing integration with your RPC framework:

If you're using a framework not listed here, you could either implement your own middleware for your framework or use custom stats and spans directly in your application.

Exporters

OpenCensus can export instrumentation data to various backends. OpenCensus has exporter implementations for the following, users can implement their own exporters by implementing the exporter interfaces (stats, trace):

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.

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(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:        "example.com/video_size_distribution",
	Description: "distribution of processed video size over time",
	Measure:     videoSize,
	Aggregation: view.Distribution(1<<32, 2<<32, 3<<32),
}); err != nil {
	log.Fatalf("Failed to register view: %v", err)
}

Register begins collecting data for the view. Registered views' data will be exported via the registered exporters.

Traces

A distributed trace tracks the progression of a single user request as it is handled by the services and processes that make up an application. Each step is called a span in the trace. Spans include metadata about the step, including especially the time spent in the step, called the span’s latency.

Below you see a trace and several spans underneath it.

Traces and spans

Spans

Span is the unit step in a trace. Each span has a name, latency, status and additional metadata.

Below we are starting a span for a cache read and ending it when we are done:

ctx, span := trace.StartSpan(ctx, "cache.Get")
defer span.End()

// Do work to get from cache.

Propagation

Spans can have parents or can be root spans if they don't have any parents. The current span is propagated in-process and across the network to allow associating new child spans with the parent.

In the same process, context.Context is used to propagate spans. trace.StartSpan creates a new span as a root if the current context doesn't contain a span. Or, it creates a child of the span that is already in current context. The returned context can be used to keep propagating the newly created span in the current context.

ctx, span := trace.StartSpan(ctx, "cache.Get")
defer span.End()

// Do work to get from cache.

Across the network, OpenCensus provides different propagation methods for different protocols.

Execution Tracer

With Go 1.11, OpenCensus Go will support integration with the Go execution tracer. See Debugging Latency in Go for an example of their mutual use.

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.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].