Spring Boot on GCP
  • Introduction
  • Getting Started
    • Google Cloud Platform
    • Cloud Shell
    • gcloud CLI
    • Hello World!
      • Cloud Shell
      • App Engine
      • Cloud Run
      • Kubernetes Engine
      • Compute Engine
      • Cloud Functions
  • Application Development
    • Development Tools
    • Spring Cloud GCP
    • Cloud Services
      • Databases
        • Cloud SQL
        • Cloud Spanner
        • Cloud Firestore
          • Datastore Mode
          • Native Mode
      • Messaging
        • Cloud Pub/Sub
        • Kafka
      • Secret Management
      • Storage
      • Cache
        • Memorystore Redis
        • Memorystore Memcached (beta)
      • Other Services
    • Observability
      • Trace
      • Logging
      • Metrics
      • Profiling
      • Debugging
    • DevOps
      • Artifact Repository
  • Deployment
    • Runtime Environments
    • Container
      • Container Image
      • Secure Container Image
      • Container Awareness
      • Vulnerability Scanning
      • Attestation
    • Kubernetes
      • Kubernetes Cluster
      • Deployment
      • Resources
      • Service
      • Health Checks
      • Load Balancing
        • External Load Balancing
        • Internal Load Balancing
      • Scheduling
      • Workload Identity
      • Binary Authorization
    • Istio
      • Getting Started
      • Sidecar Proxy
  • Additional Resources
    • Code Labs
    • Presentations / Videos
    • Cheat Sheets
Powered by GitBook
On this page
  • Cloud Trace
  • Enable API
  • Spring Cloud Sleuth
  • Dependency
  • Configuration
  • Instrumentation
  • Propagation
  • Log / Trace Correlation
  • Samples
  • Istio
  • Learn More

Was this helpful?

  1. Application Development
  2. Observability

Trace

PreviousObservabilityNextLogging

Last updated 4 years ago

Was this helpful?

Cloud Trace

Cloud Trace is a managed distributed tracing system that collects latency data from your applications and displays it in the Google Cloud Console. You can track how requests propagate through your application and receive detailed near real-time performance insights.

Enable API

gcloud services enable cloudtrace.googleapis.com

Spring Cloud Sleuth

uses behind the scenes to instrument and trace your application. In addition, it'll also enhance the log messages to include the current trace context (Trace ID, Span ID) for trace to log correlation.

Dependency

Add the Spring Cloud GCP Trace starter:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-gcp-starter-trace</artifactId>
</dependency>
compile group: 'org.springframework.cloud', name: 'spring-cloud-gcp-starter-trace'

Configuration

By default, Spring Cloud Sleuth samples only 10% of the requests. I.e., 1 in 10 requests may have traces propagated to the trace server (Cloud Trace). In a non-production environment, you may want to see all of the trace. You can adjust the sampling rate using Spring Cloud Sleuth's properties:

application.properties
# Set sampler probability to 100%
spring.sleuth.sampler.probability=1.0

Notice that there is no explicit configuration for username/password. Cloud Trace authentication uses the GCP credential (either your user credential, or Service Account credential), and authorization is configured via Identity Access Management (IAM).

Instrumentation

Web

Spring Cloud Sleuth will automatically trace incoming requests from WebMVC, or WebFlux as-is.

@RestController
class OrderController {
  private final OrderRepository orderRepository;

  OrderController(OrderRepository orderService) {
    this.orderRepository = orderRepository;
  }

  @GetMapping("/order/{orderId}")
  public Order getOrder(@PathParam String orderId) {
    return orderRepository.findById(orderId);
  }
}

In this example, an incoming request to /order/{orderId} endpoint will be automatically traced, and the traces will be propagated to Cloud Trace based on the sampler probability.

Messaging

Spring Cloud Sleuth will automatically trace incoming messages and handlers when using Spring Integration

Custom Spans

@Service
class OrderService {
    private final OrderRepository orderRepository;

    ...

  @NewSpan
    @Transactional
    Order createOrder(Order order) {
      ...
        return orderRepository.save(order);
    }
}

Tagging Spans

@Service
class OrderService {
    private final OrderRepository orderRepository;

  ...

  @NewSpan
    @Transactional
    Order getOrder(@SpanTag("orderId") String id) {
        return orderRepository.findById(id);
    }
}

Propagation

Rest Template / WebClient

Simply create a RestTemplate or WebClient bean and Spring Cloud Sleuth will automatically add filters to propagate the trace context via HTTP headers.

@Bean
RestTemplate restTemplate() {
  return new RestTemplate();
}

Messaging

Additional Headers

spring.sleuth.propagation-keys=x-request-id,x-ot-span-context

Log / Trace Correlation

Samples

Istio

spring.sleuth.propagation-keys=x-request-id,x-ot-span-context

Learn More

Spring Cloud Sleuth automatically adds trace instrumentation to commonly used components, such as , and incoming . See for more details.

If there is a piece of code/method that you want to break out into it's own span, you can use Spring Cloud Sleuth's @NewSpan annotation. See .

You can associate additional data to a Span (a tag) via annotation. See .

Spring Cloud Sleuth automatically propagates the trace context to a remote system (e.g., via HTTP request, or messaging) when using RestTemplate, WebClient, Spring Integration, and more. See for more details.

When using Spring Integration, Spring Cloud Sleuth will automatically propagate trace context via message headers. For example, send a will automatically add trace headers to the Pub/Sub message.

Spring Cloud Sleuth uses , and uses . Over HTTP, it will automatically propagate B3 headers to HTTP headers.

When running your application in Istio, you may need to propagate , such as x-request-id and x-ot-span-context.

Spring Cloud Sleuth automatically associate each log message with the trace context (Trace ID, Span ID). When the log message is sent to Cloud Logging, you can then be able to see the log messages alongside the trace itself. See to achieve this.

If you use Istio service mesh, Istio can automatically capture service to service traces. You can use Spring Cloud Sleuth to , without any trace senders:

For in-application trace, you can use .

Spring Cloud GCP's Trace integration
Spring Cloud Sleuth
incoming HTTP requests
messages from Spring Integration
Spring Cloud Sleuth Integrations documentation
Spring Cloud Sleuth's Creating New Span documentation
Spring Cloud Sleuth's Continuing Span documentation
Spring Cloud Sleuth Integrations documentation
OpenZipkin's Brave tracer
B3 propagation
additional trace headers required by Istio
Spring Cloud GCP Trace sample
Troubleshooting and Debugging Microservices in Kubernetes
propagate additional trace headers
Spring Cloud GCP Trace starter
how to configure Logback
Pub/Sub message with Spring Integration's Gateway