Distributed Tracing
This topic describes how to leverage Distributed Tracing in your GigaSpaces cluster to identify latency issues.
Overview
Distributed tracing is quickly becoming a must-have component in the tools that organizations use to monitor their complex, microservice-based architectures. This helps engineers to pinpoint errors and identify performance bottlenecks.
GigaSpaces monitoring, part of the GigaOps Stack, includes Zipkin, a distributed tracing system that gathers timing data to enable troubleshooting latency issues in the system. This enables more effective performance tuning.
OpenTracing is a vendor-agnostic API for tracing and allows users to instrument their own services or libraries for distributed tracing.
For more information, view https://opentracing.io/docs/overview/
Tracing with GigaSpaces
Proxy-Side Tracing
GigaSpaces allows its users to trace their code by using OpenTracing spans in the proxy side.
In order to turn tracing on, you must configure a Tracer and register it with the GlobalTracer.registerIfAbsent
method provided by the OpenTracing library. An example of such a Tracer is ZipkinTracer that reports the traces to a Zipkin server.
Every synchronous method in the GigaSpaces API will add a span to the active span if it exists. When the span is finished it is reported to the tracing endpoint (e.g. Zipkin).
The following example assumes that a Tracer and GigaSpaces proxy are defined. It creates a new span in the user’s code and calls the readMultiple
method that adds a new span to the lifecycle of the flow:
// define Tracer and GigaSpaces proxy
GlobalTracer.registerIfAbsent(tracer);
io.opentracing.Span span = tracer.buildSpan("FirstSpan").start();
gigaSpaces.readMultiple(new Person());
span.finish();
Zipkin Built-In tracer
GigaSpaces provides a built-in bean com.gigaspaces.tracing.ZipkinTracerBean
that can be used to send the traces to Zipkin as the tracing endpoint. This bean will register a GlobalTracer that can be used by the user’s code. Same GlobalTracer will be used in the GigaSpaces proxy for the synchronous methods.
@Bean
public ZipkinTracerBean tracerBean() {
return new ZipkinTracerBean("GatewayService")
.setZipkinUrl("http://zipkin.company.com")
.setStartActive(true);
}
This bean is part of the xap-reporter
module. To use it you need to add it to your processing unit jar file with its dependencies.
<dependency>
<groupId>org.gigaspaces</groupId>
<artifactId>xap-reporter</artifactId>
<version>15.2.0</version>
</dependency>
The screenshot below shows a “trace” of data sampled by Zipkin of multiple microservices running on a GigaSpaces distributed cluster:
Additional Resources
Microservices example with OpenTracing enabled