The micro-services based architecture differs from the traditional monoliths in many aspects. From the request observability perspective, there are asynchronous boundaries among various different micro-services that compose a request flow. Moreover, these micro-services can have heterogeneous semantics when it comes to monitoring and observability. It is required to have a tracing solution that can provide a holistic view of the request flow and help the developer understand the system better to take informed decisions regarding troubleshooting and performance optimization.
Tracing in Kyma uses Jaeger as a backend which serves as the query mechanism for displaying information about traces. Jaeger is used for monitoring and troubleshooting microservice-based distributed systems, including:
- Distributed context propagation
- Distributed transaction monitoring
- Root cause analysis
- Service dependency analysis
- Performance and latency optimization
Jaeger provides compatibility with the Zipkin protocol. The compatibility makes it possible to use Zipkin protocol and clients in Istio, Envoy, and Kyma services.
You can access the Jaeger UI either locally at
https://jaeger.kyma.local or on a cluster at
The envoy proxy controls the inbound and outbound traffic in the application and automatically sends the trace information to the Zipkin. However, to track the flow of the REST API calls or the service injections in Kyma, it requires the minimal application cooperation from the micro-services code. For this purpose, you need to configure the application to propagate the tracing context in HTTP headers when making outbound calls. See the Istio documentation for details on which headers are required to ensure the correct tracing in Kyma.
See the diagram and steps for an overview of the tracing flow in Kyma:
The central element of the tracing architecture in Kyma is istio-jaeger. This main component serves both as a target of all query requests made from the Jaeger UI and the space for storing and processing the spans and traces created by Envoy and Kyma services.
- Kyma user accesses Jaeger UI and requests the trace details for a given service by selecting the service from the Services drop-down menu and confirming the choice by selecting the Find Traces button.
- Jaeger passes the request to the the UI facade, jaeger-query.
- The jaeger-query forwards the details to the istio-jaeger component which sends the information back.
- Kyma user configures the application to propagate the correct HTTP headers for the outbound calls.
- Envoy passes the trace details to the Zipkin Kubernetes service. This service acts as a facade to receive the trace and span details.
- Zipkin service forwards the tracing information to the istio-jaeger component which processes the received details.