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
0
votes
0 answers

Sending trace context (parent) to another system to have end to end tracing across systems

I have two systems with request flow going from system A <-> system B, the two systems communicate via PubSub. System A is written in Golang and uses OpenCensus for tracing System B is written in Java and uses OpenTelemetry for tracing (it passes…
0
votes
1 answer

Missing Transparent Header when try to integrate React.js application with open telemetry

I am try to Integrate my React application with OpenTelemetry. I added trace.ts file and in the console the span is printing without any problem. But in the http header transparent header not available. So, in the backend (I have Quarkus backend)…
0
votes
0 answers

How to add tag to span generated by Istio, sent to Datadog backend?

I'm building an Istio-Datadog integration for distributed tracing. I can see traces showing in Datadog, but I cannot associate them with the running pods, because there's no pod_name in the span. I would like to add that pod_name to spans generated…
0
votes
1 answer

Passing custom correlation id across multiple Microservices in API and events

I am using spring boot microservice. Having requirement where MS X generated some custom correlation ID when some flow is started. Now this MS X is calling some API of MS Y, MS Y is sending event to MS Z and so on. Requirement is correlation id…
user2425109
  • 347
  • 1
  • 2
  • 10
0
votes
1 answer

Exception occured when trying to do tracing with Spring Boot project using Spring Sleuth and OpenTelemetry

I wanted to enable tracing in a Java Spring Boot project using Spring Sleuth and OpenTelemetry. The traces need to be exported to Lightstep. I added spring-cloud-starter-sleuth, spring-cloud-sleuth-otel-autoconfigure,…
0
votes
0 answers

SpringBoot + Tracing/Traces: Non intrusive mechanism to collect/scrap/poll application traces (as in traceId, spanId, parentId)

Small question regarding SpringBoot web applications and tracing please. By tracing, I mean traceId,spanId,parentId. Most of all, how to collect/scrap/poll those traces. For example, logging: SpringBoot can send logs to external systems (send log…
PatPanda
  • 3,644
  • 9
  • 58
  • 154
0
votes
1 answer

Spring Actuator to expose /trace or /tracing endpoint for traceId spanId and parentId

Small question regarding SpringBoot actuator and a possible /trace /tracing endpoint please. I am referring to tracing, as in traceId, spanId and parentId please. Currently, actuator can expose endpoints like /metrics or /prometheus for metrics…
0
votes
1 answer

Argo Events Kafka triggers cannot parse message headers to enable distributed tracing

TL;DR - Argo Events Kafka eventsource triggers do not currently parse headers of consumed Kafka message, which is needed to enable distributed tracing. I submitted a feature request (here) - if you face the same problem please upvote, and curious if…
0
votes
1 answer

Headers not getting propagated with open-telemetry and spring-cloud-sleuth

I have integrated open-telemetry collector with spring-cloud-sleuth and trying to test distributed tracing with it. My basic requirement is if app1 receives a header for traceId, it should use the same for logging and tracing. If not, it can…
0
votes
0 answers

Azure springboot distributed tracing correlationId and application map issue

I have created and configured two spring boot applications and with the help of application insight and cloud sleuth maven dependencies I have configured the logback . When I started the applications from my Intellij and queried the logs from…
0
votes
1 answer

How to deal with clock skew in a multi-node Kubernetes cluster?

The issue is that the logs for a specific request (identified by a traceId printed in each log line) are being collected by loki-stack in a Kubernetes cluster, but the logs are not being displayed in the correct order. This is because the…
Dojo
  • 5,374
  • 4
  • 49
  • 79
0
votes
0 answers

Node application is not exporting tracings to Jaeger monitor page

i'm implementing tracings in a node (NestJS) application and i'm using opentelemetry and jaeger as my tracing stack. I'm trying to export my application tracing to jaeger "monitor" page. Already configured otel-collector, jaeger, but i still can not…
0
votes
1 answer

Potential memory leak with use of ActivitySource

We are suspecting (or have concluded) a memory leak in a dotnet 6 application running in an Enterprise OpenShift cluster with limited permissions. The reason for us being suspicious is the graph here which shows a increasing memory usage across our…
lhn_dk
  • 13
  • 3
0
votes
0 answers

Constructing the Open Telemetry trace tree in bi-directional 3rd party communication

We have a 3rd party that we have integrations with and we adopted Open Telemetry but we have a problem building our trace tree. Below is the architecture involved: Basically, an HTTP request will be initiated by Service A to the 3rd-party API,…
Kimutai
  • 1,022
  • 11
  • 15
0
votes
0 answers

ZipkinExpoterOptions does not contain any definition for ServiceName

services.AddOpenTelemetryTracing(config => config .AddZipkinExporter(o => { o.Endpoint = new Uri("http://localhost:9411/api/v1/spans"); o.ServiceName = "Catalog.Api"; …