← Back to Questions
Microservices - Scenario based questions

How will you trace a request flowing across multiple microservices?

Learn How will you trace a request flowing across multiple microservices? with simple explanations, real-time examples, interview tips and practical use cases.

How Will You Trace a Request Flowing Across Multiple Microservices?

Tracing requests across multiple microservices is one of the most important concepts in distributed systems.

In microservices architecture:

  • One user request travels through many services
  • Services communicate synchronously and asynchronously
  • Failures may happen at any point
  • Performance bottlenecks become difficult to identify

Without proper tracing:

  • Root cause analysis becomes slow
  • Production debugging becomes difficult
  • Performance issues are hard to identify
  • Failures cannot be tracked properly

Real-Time Banking Example

Customer Transfers Money
         ↓
API Gateway
         ↓
Account Service
         ↓
Fraud Detection Service
         ↓
Payment Service
         ↓
Notification Service

Problem Scenario

Customer says:

Money debited but transaction failed

Challenge

Request traveled across:

  • API Gateway
  • Account Service
  • Fraud Service
  • Payment Service
  • Kafka Consumers
  • Notification Service

Main Problems Without Request Tracing

Problem Description
No Visibility Cannot track request journey
Scattered Logs Logs exist in multiple services
Slow Debugging Difficult root cause analysis
Latency Unknown Cannot identify slow service
Async Complexity Kafka/event tracking difficult

Production-Level Tracing Solution

  • Correlation ID / Trace ID
  • Distributed Tracing
  • Structured Logging
  • Centralized Logging
  • Metrics Correlation
  • Observability Platforms
  • APM Tools

Step 1: Generate Correlation ID / Trace ID

Every incoming request should get a unique Trace ID.


Example

TRACE-ID: TXN-12345-ABCDE

Flow

User Request
      ↓
Generate Trace ID
      ↓
Pass Across All Services

Benefits

  • Track request end-to-end
  • Connect logs across services
  • Simplify debugging

Spring Boot Filter Example

@Component
public class TraceFilter
implements Filter {

    @Override
    public void doFilter(
        ServletRequest request,
        ServletResponse response,
        FilterChain chain)
        throws IOException, ServletException {

        String traceId =
            UUID.randomUUID().toString();

        MDC.put("traceId", traceId);

        HttpServletResponse res =
            (HttpServletResponse) response;

        res.setHeader("traceId", traceId);

        chain.doFilter(request, response);

        MDC.clear();
    }
}

Step 2: Propagate Trace ID Across Services

Trace ID must travel with every request.


Flow

API Gateway
   ↓ traceId
Order Service
   ↓ traceId
Payment Service
   ↓ traceId
Notification Service

Benefits

  • Complete request visibility
  • Cross-service debugging

Feign Client Example

@Bean
public RequestInterceptor interceptor() {

    return requestTemplate -> {

        String traceId =
            MDC.get("traceId");

        requestTemplate.header(
            "traceId",
            traceId
        );
    };
}

Step 3: Use Structured Logging

Logs should contain trace ID.


Bad Logging

Payment Failed

Correct Logging

{
  "traceId":"TXN-12345",
  "service":"payment-service",
  "status":"FAILED",
  "error":"Timeout"
}

Benefits

  • Easy log filtering
  • Faster debugging
  • Better observability

Logback Configuration

logging.pattern.level=
%5p [${spring.application.name:},%X{traceId}]

Step 4: Use Distributed Tracing

Distributed tracing visually shows request journey.


Popular Distributed Tracing Tools

  • :contentReference[oaicite:0]{index=0}
  • :contentReference[oaicite:1]{index=1}
  • :contentReference[oaicite:2]{index=2} APM
  • :contentReference[oaicite:3]{index=3}

Distributed Trace Example

API Gateway → 20ms
Account Service → 30ms
Fraud Service → 2.5s
Payment Service → Timeout

Root Cause

Fraud Service Slow

Benefits

  • Visual request flow
  • Latency analysis
  • Find bottlenecks
  • Performance optimization

Step 5: Use OpenTelemetry

OpenTelemetry is industry standard observability framework.


Purpose

  • Tracing
  • Metrics
  • Logs

Spring Boot Dependency Example

<dependency>
    <groupId>io.opentelemetry</groupId>
    <artifactId>opentelemetry-api</artifactId>
</dependency>

Benefits

  • Vendor-neutral tracing
  • Automatic instrumentation
  • Cloud-native observability

Step 6: Centralized Logging Integration

Tracing works best with centralized logs.


Architecture

Microservices
     ↓
Fluentd / Logstash
     ↓
Elasticsearch
     ↓
Kibana

Benefits

  • Search logs using trace ID
  • Single debugging platform
  • Fast issue analysis

Example Search

traceId=TXN-12345

Step 7: Trace Kafka/Event-Driven Communication

Tracing async systems is more challenging.


Problem

Order Event Published
But Payment Not Triggered

Solution

Pass trace ID inside Kafka messages.


Kafka Message Example

{
  "traceId":"TXN-12345",
  "orderId":"ORD-1001"
}

Benefits

  • Track async flows
  • Debug event failures
  • Correlate producer and consumer logs

Kafka Producer Example

ProducerRecord<String, String> record =
    new ProducerRecord<>(
        "payment-topic",
        message
    );

record.headers().add(
    "traceId",
    traceId.getBytes()
);

Step 8: Correlate Metrics + Logs + Traces

Production debugging requires full observability.


Debugging Flow

Alert Triggered
      ↓
Open Dashboard
      ↓
Check Metrics
      ↓
Open Trace
      ↓
Analyze Logs
      ↓
Identify Root Cause

Monitoring Tools

  • :contentReference[oaicite:4]{index=4}
  • :contentReference[oaicite:5]{index=5}
  • :contentReference[oaicite:6]{index=6}

Step 9: Use APM Tools

Application Performance Monitoring tools provide deep tracing visibility.


Popular APM Tools

  • :contentReference[oaicite:7]{index=7}
  • :contentReference[oaicite:8]{index=8}
  • Dynatrace
  • AppDynamics

APM Features

  • Distributed tracing
  • Database query analysis
  • Error tracking
  • Dependency mapping
  • Performance monitoring

Step 10: Use Service Mesh for Advanced Tracing

Modern Kubernetes environments often use service mesh.


Popular Service Mesh Tools

  • Istio
  • Linkerd

Benefits

  • Automatic tracing
  • Traffic visibility
  • Request telemetry
  • Service dependency graph

Istio Tracing Flow

Envoy Sidecar
     ↓
Automatically Capture Traces

Step 11: Production Root Cause Analysis Example

Issue

Users reported:

Money deducted but payment status pending

Debugging Process

  • Grafana alert showed high payment latency
  • Jaeger trace identified Fraud Service delay
  • Logs with trace ID showed DB timeout
  • Metrics showed exhausted DB connection pool

Root Cause

Fraud Service DB pool exhaustion

Fixes Applied

  • Optimized DB queries
  • Increased connection pool
  • Added alerts
  • Improved tracing dashboards

Final Result

Before:
Hours to identify failures

After:
Root cause identified within minutes

Production Best Practices

Technique Purpose
Trace ID Track requests
Distributed Tracing Visualize request flow
Structured Logging Searchable logs
Centralized Logging Unified debugging
OpenTelemetry Standard observability
Metrics Correlation Root cause analysis
APM Tools Performance insights
Service Mesh Automatic telemetry

Final Interview Answer

To trace a request flowing across multiple microservices, I would generate a unique correlation ID or trace ID at the entry point, usually at the API Gateway, and propagate it across all downstream services through HTTP headers or Kafka message headers. I would implement structured logging so every log contains the trace ID, enabling easy search and correlation. Additionally, I would use distributed tracing tools like :contentReference[oaicite:9]{index=9} or :contentReference[oaicite:10]{index=10} along with OpenTelemetry for end-to-end request visibility. Centralized logging platforms such as ELK stack would allow searching logs by trace ID, while monitoring tools like :contentReference[oaicite:11]{index=11} and :contentReference[oaicite:12]{index=12} help correlate logs, metrics, and traces for faster root cause analysis in production systems.

Why this Microservices - Scenario based questions question is important?

This interview question helps candidates understand real-time backend development concepts, practical problem solving, coding fundamentals, system design basics and production-ready application behavior.

Practice this question carefully for Java backend roles, Spring Boot developer interviews, microservices interviews, company interviews and full-stack developer preparation.

About the Author

Naresh Kumar is a Senior Java Backend Engineer with experience building enterprise applications using Java, Spring Boot, Microservices, Docker, Kubernetes and Cloud technologies.