Questions tagged [opentracing]

A vendor-neutral open standard for distributed tracing

Abstract

OpenTracing is a vendor-neutral open standard for distributed tracing

Why Tracing?

Developers and engineering organizations are trading in old, monolithic systems for modern microservice architectures, and they do so for numerous compelling reasons: system components scale independently, dev teams stay small and agile, deployments are continuous and decoupled, and so on.

That said, once a production system contends with real concurrency or splits into many services, crucial (and formerly easy) tasks become difficult: user-facing latency optimization, root-cause analysis of backend errors, communication about distinct pieces of a now-distributed system, etc.

Contemporary distributed tracing systems (e.g., Zipkin, Dapper, HTrace, X-Trace, Hawkular, sky-walking among others) aim to address these issues, but they do so via application-level instrumentation using incompatible APIs. Developers are uneasy about tightly coupling their polyglot systems to any particular distributed tracing implementation, yet the application-level instrumentation APIs for these many distinct tracing systems have remarkably similar semantics.

Why OpenTracing?

Enter OpenTracing: by offering consistent, expressive, vendor-neutral APIs for popular platforms, OpenTracing makes it easy for developers to add (or switch) tracing implementations with an O(1) configuration change. OpenTracing also offers a lingua franca for OSS instrumentation and platform-specific tracing helper libraries. Please refer to the Semantic Specification.

A Basic Trace In Real World

enter image description here

Tracing a workflow or transaction through a distributed system often looks something like the above. While this type of visualization can be useful to see how various components fit together, it does not convey any time durations, does not scale well, and is cumbersome when parallelism is involved. Another limitation is that there is no way to easily show latency or other aspects of timing. A more useful way to visualize even a basic trace often looks like this:

enter image description here

This type of visualization adds the context of time, the hierarchy of the services involved, and the serial or parallel nature of the process/task execution. This view helps to highlight the system's critical path. By focusing on the critical path, attention can focus on the area of code where the most valuable improvements can be made. For example, you might want to trace the resource allocation spans inside an API request down to the underlying blocking calls.

OpenTracing Specification

All language-specific OpenTracing APIs share core concepts and terminology. OpenCensus and OpeTracing have merged to form OpenTelemetry. You can find all concepts, terminology, Best Practices from following websites.

270 questions
18
votes
2 answers

OpenTracing doesn't send logs with Serilog

I'm trying to use OpenTracing.Contrib.NetCore with Serilog. I need to send to Jaeger my custom logs. Now, it works only when I use default logger factory Microsoft.Extensions.Logging.ILoggerFactory My Startup: public void…
Darkside
  • 470
  • 3
  • 20
18
votes
5 answers

How to configure Jaeger with elasticsearch?

I have tried executing this docker command to setup Jaeger Agent and jaeger collector with elasticsearch. sudo docker run \ -p 5775:5775/udp \ -p 6831:6831/udp \ -p 6832:6832/udp \ -p 5778:5778 \ -p 16686:16686 \ -p 14268:14268 \ -e…
11
votes
4 answers

How to enrich Jaeger opentracing data with the application logs (produced by slf4j) for Spring Boot?

There is an existing Spring Boot app which is using SLF4J logger. I decided to add the support of distributed tracing via standard opentracing API with Jaeger as the tracer. It is really amazing how easy the initial setup is - all that is required…
Ilya Buziuk
  • 1,839
  • 5
  • 27
  • 43
11
votes
2 answers

Tracing with Jaeger doesn't work with docker-compose

I instrumented a simple Spring-Boot application with Jaeger, but when I run the application within a Docker container with docker-compose, I can't see any traces in the Jaeger frontend. I'm creating the tracer configuration by reading the properties…
TheManawaha
  • 303
  • 3
  • 9
8
votes
1 answer

Difference between Opentracing and W3C Trace Context (with respect to headers)

The W3C trace context defines the traceparent and tracestate headers for enabling distributed tracing. My question(s) is then How is it different from OpenTracing. If W3C has already defined usage of the headers, then is opentracing using some…
Tiju John
  • 933
  • 11
  • 28
8
votes
1 answer

How to change trace-id header in opentracing?

Is there way to configure opentracing-spring-jaeger-cloud-starter to handle any other header than Uber-Trace-Id? I have Traefik as an ingress in my kubernetes cluster. Traefik can be configured to change traceContextHeaderName. Default value is…
kamyl
  • 113
  • 1
  • 7
8
votes
2 answers

Using WebClient to propagate request headers received in a Spring Webflux applications to downstream services

I have two kinds of Webflux applications, annotation-based and route-based. These applications are called with a set of headers, some of which (Open Tracing) I need to propagate in downstream calls using WebClient. If these were normal Spring WebMvc…
codependent
  • 23,193
  • 31
  • 166
  • 308
7
votes
1 answer

How to inject an opentracing span into RabbitMQ?

I´m using OpenTracing and I am trying to propagate a span through RabbitMQ. However I don't understand how I am supposed to inject the span and how to extract it later. This is the code for sending a message def send_message(self, message, tracer): …
BoliBoom
  • 101
  • 1
  • 6
7
votes
2 answers

Spring Cloud Sleuth with OpenTracing

Is there a way to use Spring Cloud Sleuth with OpenTracing? I want to connect Spring clients with Jaeger
Javier Sainz
  • 301
  • 1
  • 2
  • 7
6
votes
1 answer

Python: fetching urllib3 request headers

We are injecting tracing information into request headers of all the http request calls in our API client library which is implemented based on urllib3 def _init_jaeger_tracer(): '''Jaeger tracer initialization''' config = Config( …
6
votes
1 answer

Advantage of opentracing/jaeger over APM tracing capabilities

I was looking at APM tools. Essentially Dynatrace and I could see that it also provides tracing capabilities that seem to be language agnostic and also without code modifications. Where would jaeger/open tracing be a better option than a tool like…
Vipin Menon
  • 2,892
  • 4
  • 20
  • 35
6
votes
1 answer

Adding JDBC query information to opentracing/Jaeger spans

We're using Opentracing/Jaeger in Istio for tracing multiple Spring Boot/Spring Cloud based microservices. I'm currently wondering if there's an option to enrich the tracing spans by providing information about executed query (i.e. SQL statement)?…
John
  • 896
  • 7
  • 25
5
votes
1 answer

Distributed tracing using Jaeger with correct hierarchy

I am new to Jaeger and I would like to use it in order to record traces for my microservices. I create traces from my μservices, providing the traceId publish them as messages and consume them in another service in order to export the trace to…
5
votes
1 answer

Jaeger Service : How to configure on Google Kubernetes?

Created a deployment on Google Kubernetes using jaegertracing/all-in-one public image from Docker Hub Then, exposed the deployment with Service type as LoadBalancer. Now, launched the Jagger UI and it is working, but it do not show any service…
CodeZila
  • 919
  • 2
  • 14
  • 31
5
votes
0 answers

Angular open tracing to Jaeger

I am looking at open tracing implementations to trace the application to JaegerUI. Our application Front end is angular, backend end is Asp.net Web api. I am able to trace the webapi using Jaeger C# nuget packages. However, I have not found a way/…
Balaji
  • 127
  • 13
1
2 3
17 18