Service meshes are a powerful platform for adding observability features to distributed, microservices-based applications. Without any changes to the application, they produce a rich set of metrics and logs that can be used to monitor and troubleshoot the application. Service meshes can also generate distributed traces, provided that the application is white-box instrumented to propagate the context, either by passing the headers only, or through normal tracing instrumentation.
In this chapter, we have discussed the pros and cons of both approaches and showed examples of the traces that can be obtained with each approach. The sidecar proxies comprise the data plane of the service mesh, and their intimate knowledge of inter-service communications allows for the generation of detailed and up-to-date service graphs. By combining the OpenTracing baggage (distributed context propagation facility) with routing rules in the service mesh, we can perform targeted, request-scoped routing decisions...