Questions tagged [distributed-tracing]

Distributed Tracing aims to provide better observability into distributed systems and microservices for purposes of performance monitoring and troubleshooting issues.

Distributed Tracing

Distributed Tracing aims to provide better observability into distributed systems and microservices for purposes of performance monitoring and troubleshooting issues.

Modern Internet services are often implemented as complex, large-scale distributed systems. These applications are constructed from collections of software modules that may be developed by different teams, perhaps in different programming languages, and could span many thousands of machines across multiple physical facilities. Tools that aid in understanding system behavior and reasoning about performance issues are invaluable in such an environment.

Source: Dapper, a Large-Scale Distributed Systems Tracing Infrastructure

How it works in a nutshell

Distributed Tracing works by collecting the various entry and exit points and useful intermediate data and metrics done by a request until the final response is served to the requesting end. Some Distributed Tracing systems collect this information fully automatic while some other require manual instrumentation of code.

When entering a system, the request is usually assigned a unique Trace ID. This ID is then propagated to any participating systems. Information gathered this way is sent to some sort of backend collecting the data. The collector then aggregates the data via the Trace ID, thus showing the full request as it passed through the distributed system.

Metrics usually included are request time, latency, errors, status codes, etc. but not limited to this.

Open Source implementations:

Several Open Source implementations for Distributed Tracing exist:

  • http://opencensus.io

    A single distribution of libraries for metrics and distributed tracing with minimal overhead that allows you to export data to multiple backends.

  • http://opentracing.io

    Vendor-neutral APIs and instrumentation for distributed tracing

  • http://zipkin.io

    Zipkin is a distributed tracing system. It helps gather timing data needed to troubleshoot latency problems in microservice architectures. It manages both the collection and lookup of this data.

  • http://www.jaegertracing.io

    Jaeger, inspired by Dapper and OpenZipkin, is a distributed tracing system released as open source by Uber Technologies. It is used for monitoring and troubleshooting microservices-based distributed systems

There is also a W3 working group aiming to standardize context propagation across various Distributed Tracing systems:

Because Distributed Tracing is crucial for application performance monitoring, most APM vendors adopted it in one way or another. Notable APM vendors offering Distributed Tracing are AppDynamics, DynaTrace, Instana, Lightstep or New Relic.

219 questions
3
votes
1 answer

Injected traces data into Logs is not showing on Loki-Grafana

SETUP: i'm using the python-logging-loki library to manually instrument my code for logs. I have a single running instance of Loki (promtail not used, i'm pushing directly to loki). On Grafana i have Jaeger and Loki up and running as data sources.…
3
votes
1 answer

Propagate top-level span ID's in OpenTelemetry

I'm trying to get OpenTelemetry tracing working with FastAPI and Requests. Currently, my setup looks like this: import requests from opentelemetry.baggage.propagation import W3CBaggagePropagator from opentelemetry.propagators.composite import…
iLikeBreakfast
  • 1,545
  • 23
  • 46
3
votes
1 answer

where is istio filtering trace headers like x-b3-*

I see istio is adding x-b3-traceid, x-b3-spanid and other headers to the incoming request when tracing is enabled. But none of them are returned to the caller. I am able to capture the x-b3-traceid in the log and can find it out in Tempo/Grafana. I…
3
votes
2 answers

How to add tracing to a Rust microservice?

I built a microservice in Rust. I receive messages, request a document based on the message, and call a REST api with the results. I built the REST api with warp and send out the result with reqwest. We use jaeger for tracing and the "b3" format. I…
Edelherb
  • 31
  • 2
3
votes
1 answer

Proper way of extracting tracer from request Headers for opentelemetry

I have krakend apigateway which is using opentracing and sending req headers as X-B3-... for tracing and my service is using opentelemetry. This is what I'm having right now on jaeger. enter image description here enter image description here I…
3
votes
0 answers

Propagating Baggages with Opentelemetry.Baggage API in .NET

Say I have 3 microservices, and I want to trace requests using OpenTelemetry/Jaeger UI. How do I add baggages that propagate through the spans? Say I have one API called WeatherForecast which performs a get request to another service called Matrix,…
3
votes
1 answer

Azure Application Insights not showing the whole chain of events (in event-driven app), but all telemetry is there

Scenario I have an containerized, event-driven, microservices app in ASP .NET Core just migrated to .NET 5. All projects are using Microsoft.ApplicationInsights 2.16.0, and I have checked that all telemetry is sent and Sampling does not affect the…
3
votes
1 answer

How to figure out the relationship between tracing spans from the headers when using W3C Trace Context

I've been reading the W3C Trace Context spec and I can't figure out how to get child-of relationships between spans from just looking at the headers in my requests. Assuming I understand the processing model correctly, the first service generates a…
n_l
  • 844
  • 1
  • 6
  • 19
3
votes
1 answer

spring boot with p6spy sleuth traces interpretation

We have been using spring cloud sleuth in our micoservices for tracing. We have also added enabled jdbc level spans from spring data Repository connection, fetch and query. I am seeing some weird jps traces of name jdbc:/datasource/connection which…
v78
  • 2,803
  • 21
  • 44
3
votes
2 answers

How to Add DataDog trace ID in Logs using Spring Boot + Logback

OK, I spent quiet some time figuring out how to configure stuff to have DataDog trace ID in logs but couldn't get it working. To be clear what I'm looking for is to see trace IDs in logs message, the same way that adding spring-cloud-starter-sleuth…
Rad
  • 4,292
  • 8
  • 33
  • 71
3
votes
1 answer

Istio distributed tracing with Jaeger not working

I'm trying to set up a local k8s cluster and on minikube with installed istio and I have an issue with enabling distributed tracing with Jaeger. I have 3 microservices A -> B -> C. I am propagating the all the headers that are…
Sergii Bishyr
  • 8,331
  • 6
  • 40
  • 69
2
votes
0 answers

Why does my Datadog APM Query show data in the APM section, but not for the dashboards section?

I am running a Datadog APM query, and I am able to see my traces in the APM section. However, when I try the same query parameters (env and service) in the query definition of the dashboards section, I am getting no data. I have a java application…
2
votes
1 answer

OpenTelemetry .NET HttpClient not propagating TraceId

I am trying to get Tracing using OpenTelemetry to work with HttpClient in an integration test for an Asp.NET API. Tracing works for everything else, we get traces from the API controllers and all other instrumented libraries. Configuration looks…
2
votes
0 answers

Spring Cloud Sleuth - not propagating baggage for Spring Kafka

I have two microservices using Kafka as a broker for the communications between them and using Spring Cloud Sleuth for tracing and both of them have the same Spring boot version 2.7.2. I needed to pass extra information (e.g. correlationId) for the…
2
votes
1 answer

Is there a step by step instruction to enable tracing of kubernetes components?

I'm running Kubernetes version v1.24.0, trying to enable tracing in Kubernetes components and so I can instrument my custom controller to work with tracing. However, the instruction…
1
2
3
14 15