Jaeger Native Tracing

    • Trace propagation will work with the other services using Jaeger without needing to make configuration changes.

    • A variety of different can be used, including probabilistic or remote where sampling can be centrally controlled from Jaeger’s backend.

    This sandbox is very similar to the front proxy architecture described above, with one difference: service1 makes an API call to service2 before returning a response. The three containers will be deployed inside a virtual network called .

    Note

    All incoming requests are routed via the front Envoy, which is acting as a reverse proxy sitting on the edge of the network. Port is exposed by docker compose (see /examples/jaeger-native-tracing/docker-compose.yaml). Notice that all Envoys are configured to collect request traces (e.g., http_connection_manager/config/tracing setup in ) and setup to propagate the spans generated by the Jaeger tracer to a Jaeger cluster (trace driver setup in /examples/jaeger-native-tracing/front-envoy-jaeger.yaml).

    Before routing a request to the appropriate service Envoy or the application, Envoy will take care of generating the appropriate spans for tracing (parent/child context spans). At a high-level, each span records the latency of upstream API calls as well as information needed to correlate the span with other related spans (e.g., the trace ID).

    One of the most important benefits of tracing from Envoy is that it will take care of propagating the traces to the Jaeger service cluster. However, in order to fully take advantage of tracing, the application has to propagate trace headers that Envoy generates, while making calls to other services. In the sandbox we have provided, the simple flask app (see trace function in ) acting as service1 propagates the trace headers while making an outbound call to service2.

    The following documentation runs through the setup of Envoy described above.

    Ensure that you have a recent versions of and installed.

    If you have not cloned the Envoy repo, clone it with:

    SSH

    HTTPS

    To build this sandbox example, and start the example apps run the following commands:

    You can now send a request to service1 via the front-envoy as follows: