Go Observer

an Observer API for OpenTracing-Go Tracers
Alternatives To Go Observer
Project NameStarsDownloadsRepos Using ThisPackages Using ThisMost Recent CommitTotal ReleasesLatest ReleaseOpen IssuesLicenseLanguage
Laravel Newrelic1742813 years ago19February 06, 201918PHP
Laravel NewRelic ServiceProvider
Signalfx Agent11523a month ago85April 23, 202118apache-2.0Go
The SignalFx Smart Agent
Performance Observer54
5 months ago3October 19, 20201apache-2.0TypeScript
Generic interface for PerformanceObserver API.
React Spy33
14 years ago23January 23, 20191TypeScript
A set of utilities for collecting UX-analytics of your React-application (ex: clicks, shows, errors and etc.)
Memory Pressure9
4 months agoGo
Linux memory pressure evaluation discovery toolkit
Go Observer82632066 years ago1June 22, 2017apache-2.0Go
an Observer API for OpenTracing-Go Tracers
Opentelemetry Metric Dotnet7
3 months ago1apache-2.0C#
Dynatrace OpenTelemetry Metrics Exporter for .NET
Bluekiri Diagnostics Prometheus6
5 years ago3mitC#
Exposes Diagnostic Source events as prometheus metrics using prometheus-net underneath
Masstransit.prometheus544 years ago408July 15, 2022apache-2.0C#
Collect the necessary MassTransit metrics for Prometheus
Visdomobserver4
5 years agomitJupyter Notebook
A sacred RunObserver which uses visdom to plot metrics and artifacts
Alternatives To Go Observer
Select To Compare


Alternative Project Comparisons
Readme

An Observer API for OpenTracing-go Tracers

OTObserver can be used to watch the span events like StartSpan(), SetOperationName(), SetTag() and Finish(). A need for observers arose when information (metrics) more than just the latency information was required for the spans, in the distributed tracers. But, there can be a lot of metrics in different domains and adding such metrics to any one (client) tracer breaks cross-platform compatibility. There are various ways to avoid such issues, however, an observer pattern is cleaner and provides loose coupling between the packages exporting metrics (on span events) and the tracer.

This information can be in the form of hardware metrics, RPC metrics, useful metrics exported out of the kernel or other metrics, profiled for a span. These additional metrics can help us in getting better Root-cause analysis. With that being said, its not just for calculation of metrics, it can be used for anything which needs watching the span events.

Installation and Usage

The otobserver package provides an API to watch span's events and define callbacks for these events. This API would be a functional option to a tracer constructor that passes an Observer. 3rd party packages (who want to watch the span events) should actually implement this observer API. To do that, first fetch the package using go get :

   go get -v github.com/opentracing-contrib/go-observer

and say :

    import "github.com/opentracing-contrib/go-observer"

and then, define the required span event callbacks. These registered callbacks would then be called on span events if an observer is created. Tracer may allow registering multiple observers. Have a look at the jaeger's observer.

With the required setup implemented in the backend tracers, packages watching the span events need to implement the observer api defining what they need to do for the observed span events.

Span events

An observer registered with this api, can observe for the following four span events :

    StartSpan()
    SetOperationName()
    SetTag()
    Finish()

Tradeoffs

As noble as our thoughts might be in fetching additional metrics (other than latency) for a span using an observer, there are some overhead costs. Not all observers need to observe all the span events, in which case, we may have to keep some callback functions empty. In effect, we will still call these functions, and that will incur unnecessary overhead. To know more about this and other tradeoffs, see this discussion.

Popular Observer Projects
Popular Metrics Projects
Popular Control Flow Categories

Get A Weekly Email With Trending Projects For These Categories
No Spam. Unsubscribe easily at any time.
Golang
Metrics
Observer
Opentracing