5 ms·
Do I miss anything? OpenTracing mentions "A vendor-neutral open standard for distributed tracing." It reads like it's for implementors - is it useable stand alo
by frik 9y ago
Do I miss anything? OpenTracing mentions "A vendor-neutral open standard for distributed tracing." It reads like it's for implementors - is it useable stand alone + Jaeger as UI?
How can it be used - can you point me to a tutorial/blog post?
- jamesmishra 9y agoHey frik, former Uber engineer here. I never worked on Jaeger, but I loved using it at Uber. If you want to get started, the documentation is at http://jaeger.readthedocs.io/en/latest/ http://jaeger.readthedocs.io/en/latest/ We also have a blog post that describes the history of Jaegar and some of the design decisions. https://eng.uber.com/distributed-tracing/ https://eng.uber.com/distributed-tracing/ Jaegar is compatible with the OpenTracing standard ( http://opentracing.io/documentation/pages/supported-tracers http://opentracing.io/documentation/pages/supported-tracers ) and is also compatible with the Zipkin backend and wire protocol ( http://zipkin.io/ http://zipkin.io/ ).
- frik 9y agoThanks a lot, will try it out. btw https://uber.github.io/jaeger/ https://uber.github.io/jaeger/ still mentions "Backend components are implemented in Go (will be open sourced soon)" ...in the meantime the code go published as it seems: https://github.com/uber/jaeger https://github.com/uber/jaeger
- tonyhb 9y agoMm it's a little sparse right now - had to dig into the opentracing spec, dig in to the implementations and make it piecemeal. OpenTracing is for everyone - both tracing implementors (eg. Jaeger engineers) and for you implementing tracing in your system. As an implementor in your system you mainly care about the "vocabulary" and "standards" opentracing defines. So, if you've got two functions (A which calls B) opentracing defines: - Syntaxes to say that the span for "B" is a "childOf" "A". This gives you the graph I had above. - Syntaxes to attach errors and other information to spans in a standard way (this lets any opentracing-compatible UI display/search errors etc): https://github.com/opentracing/specification/blob/master/semantic_conventions.md#standard-span-tags-and-log-fields https://github.com/opentracing/specification/blob/master/sem... OpenTracing also allows you to define functions that follow each other: https://github.com/opentracing/specification/blob/master/specification.md#the-opentracing-data-model https://github.com/opentracing/specification/blob/master/spe.... Plus, defines abstract ways of passing tracing contexts through service boundaries (ie. from client => API server => other microservices) via strings and HTTP headers. Also, the best part of opentracing (in go) is that you can use it directly to set these fields (https://github.com/tonyhb/personal-starter/blob/master/pkg/api/v0/v0middleware.go#L46 https://github.com/tonyhb/personal-starter/blob/master/pkg/a...). You can pull in the "github.com/opentracing/opentracing-go" library and use it to create and propagate your spans and contexts, and set errors using the default vocabulary (https://godoc.org/github.com/opentracing/opentracing-go/ext https://godoc.org/github.com/opentracing/opentracing-go/ext). Been meaning to sort my blog out and write some posts on this as the implementation documentation is sparse. Some time soon.
- jeffrand 9y agoBefore Jaeger was out I started using this, although I'm considering switching over to using Jaeger: https://github.com/opentracing/opentracing-go https://github.com/opentracing/opentracing-go It should be pretty clear how to use it once you read through the examples. Jaeger requires using Cassandra as a datastore (for now), which isn't easily supported at my company, so I went with Zipkin and used MySQL as a datastore.