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
1
vote
1 answer

Complete tracing using zipkin-go

I have some services. I want to trace those services using zipkin-go. In every service, I am calling some of my other internal services or db calls. I want to trace every activity like how much time it has taken to call internal services or db. I…
Devendra Verma
  • 975
  • 2
  • 10
  • 24
1
vote
1 answer

How to Configure AWS X-Ray for node.js app not using Express middleware?

I am trying to integrate AWS X-Ray with my nodejs api hosted on AWS Lambda(serverless). X-Ray works as intended for api using express middleware and able to see traces on AWS Console. For async functions without express framework, I am facing issues…
1
vote
1 answer

Observability: can we filter by tags then aggregate on prometheus or any metrics backend server

For example, I call Redis server with following command: SET key "value" After running, I want to track those 2 information at the same time: statistic of all write operators (so tag should be SET) statistic of all specific operators (so tag…
Trần Kim Dự
  • 5,872
  • 12
  • 55
  • 107
1
vote
0 answers

Is there a way to enable zipkin tracing in a jar such that wherever the jar is used, it initialises a separate span by-default

I am creating a client sdk with retrofit calls to a service, packaged as a separate jar. I have to include zipkin tracer/tracing in this jar so that any application using this jar to communicate with the service, have a separate span created…
1
vote
0 answers

Unable to get the New Relic Trace ID from Header

I've been trying to get the New Relic Trace/Transaction ID from the request for a traced service. Unfortunately, I'm having trouble retrieving the value. When I try to pull the values from the header, they are not getting populated. I can get the…
ScrappyDev
  • 2,307
  • 8
  • 40
  • 60
1
vote
0 answers

Distributed tracing in Istio - expected behavior when the application does NOT propagate headers

My application (hosted in a Kubernetes cluster with Istio installed) does NOT propagate distributed tracing headers (as described here). My expectation is that istio-proxy should still generate a trace (consisting of a single call) that would be…
tokaplan
  • 108
  • 7
1
vote
1 answer

Disable send Zipkin spans on Pilot

How can I disable Istio to send spans to zipkin? If I'm not wrong this is not a mixer adapter right? It is something directly done from the pilot. How can I disable it?
Jxadro
  • 1,497
  • 2
  • 16
  • 36
0
votes
0 answers

Open telemetry support in blazor wasm

I'm adding distributed tracing to an existing app and I'm having a hard time configuring the client Blazor Wasm App to export its tracing through the OltpTraceExporter. Here's the exception I'm getting at runtime: System.AggregateException: One or…
Luis Abreu
  • 4,008
  • 9
  • 34
  • 63
0
votes
0 answers

SpringBoot 3 Integration Test with Zipkin Not Working

I have a running code with spring boot(3.1.3) with zipkin. However in IntegrationTests trace information is not collected by zipkin. I am using these dependencies: org.springframework.boot
0
votes
1 answer

Inject method in OpenTelemetry

We are migrating from open-tracing to open telemetry . We have inject function like below in open-tracing. getTracer().inject(getActiveSpanContet(), Builtin.HTTP_HEADERS, new TextMapAdapter(contextValues)); Could some one please help what would be…
0
votes
0 answers

httpx + opentelemetry + cloud trace: GCP strips x-cloud-trace-context, possible to inject?

I'm working on an API that queries several APIs. My API is instrumented with opentelemetry. I also have a httpx client that is also instrumented. My API queries the other APIs with this httpx client. For most of the APIs I'm talking to, the httpx…
0
votes
0 answers

Is logging requests with id and timestamp the same as tracing?

I have a server application. I log each request when it begins and when it ends (or errors). Additionally, I create a unique request id when they are received and add it to its logs, and also add a timestamp for begin and end. If another child…
Juan Perez
  • 212
  • 2
  • 10
0
votes
2 answers

Opentelemetry Kafka Streams Manual Instrumentation trace spans not exported

Am using opentelemetry java agent on my springboot app as well the opentelemetry sdk to manually instrument some business logic that is executed by kafka streams in my app. The dependencies in my build.gradle.kts file look like…
0
votes
1 answer

Spring Boot 3.1.0: Problems with custom io.opentelemetry.sdk.trace.samplers.Sampler and OTLP/Spring Boot: empty/undefined span information

I am using Micrometer / OTLP in Spring Boot (MVC web services). The tracing information is visualized with Jaeger. TraceId and SpanId are generated and added to the MDC, visualization is working fine, I can see all the spans with application name…
Clemens
  • 37
  • 5
0
votes
1 answer

Different TraceId's are generated in Micrometer for single HTTP request

I am recently trying to upgrade spring-boot version 2.7.3 and 2.7.10 to 3.1.0. Since spring-cloud-sleuth is not supported by spring-boot v3.x.x, we have to use micrometer for distributed tracing. However, the traceId is different in both the service…