SkyWalking tracing
The SkyWalking tracing sandbox demonstrates Envoy’s request tracing
capabilities using SkyWalking as the tracing provider. This sandbox
is very similar to the Zipkin sandbox. All containers will be deployed inside a virtual network
called envoymesh
.
All incoming requests are routed via the front Envoy, which is acting as a reverse proxy
sitting on the edge of the envoymesh
network. Port 8000
is exposed
by docker compose (see docker-compose.yaml
).
Notice that all Envoys are configured to collect request traces (e.g., http_connection_manager/config/tracing setup in
front-envoy-skywalking.yaml
)
and setup to propagate the spans generated by the SkyWalking tracer to a SkyWalking cluster (trace driver setup
in front-envoy-skywalking.yaml
).
When service1 accepts the request forwarded from front envoy, it will make an API call to service2 before returning a response.
Step 1: Build the sandbox
Change to the examples/skywalking-tracing
directory.
To build this sandbox example, and start the example apps run the following commands:
$ pwd
envoy/examples/skywalking-tracing
$ docker-compose pull
$ docker-compose up --build -d
$ docker-compose ps
Name Command State Ports
--------------------------------------------------------------------------------------------------------------------------------------------------
skywalking-tracing_elasticsearch_1 /tini -- /usr/local/bin/do ... Up (healthy) 0.0.0.0:9200->9200/tcp, 9300/tcp
skywalking-tracing_front-envoy_1 /docker-entrypoint.sh /bin ... Up 10000/tcp, 0.0.0.0:8000->8000/tcp, 0.0.0.0:8001->8001/tcp
skywalking-tracing_service1_1 /bin/sh /usr/local/bin/sta ... Up 10000/tcp
skywalking-tracing_service2_1 /bin/sh /usr/local/bin/sta ... Up 10000/tcp
skywalking-tracing_skywalking-oap_1 bash docker-entrypoint.sh Up (healthy) 0.0.0.0:11800->11800/tcp, 1234/tcp, 0.0.0.0:12800->12800/tcp
skywalking-tracing_skywalking-ui_1 bash docker-entrypoint.sh Up 0.0.0.0:8080->8080/tcp
Step 2: Generate some load
You can now send a request to service1 via the front-envoy as follows:
$ curl -v localhost:8000/trace/1
* Trying ::1...
* TCP_NODELAY set
* Connected to localhost (::1) port 8000 (#0)
> GET /trace/1 HTTP/1.1
> Host: localhost:8000
> User-Agent: curl/7.58.0
> Accept: */*
>
< HTTP/1.1 200 OK
< content-type: text/html; charset=utf-8
< content-length: 89
< server: envoy
< date: Sat, 10 Oct 2020 01:56:08 GMT
< x-envoy-upstream-service-time: 27
<
Hello from behind Envoy (service 1)! hostname: 1a2ba43d6d84 resolvedhostname: 172.19.0.6
* Connection #0 to host localhost left intact
You can get SkyWalking stats of front-envoy after some requests as follows:
$ curl -s localhost:8001/stats | grep tracing.skywalking
tracing.skywalking.cache_flushed: 0
tracing.skywalking.segments_dropped: 0
tracing.skywalking.segments_flushed: 0
tracing.skywalking.segments_sent: 13
Step 3: View the traces in SkyWalking UI
Point your browser to http://localhost:8080 . You should see the SkyWalking dashboard. Set the service to “front-envoy” and set the start time to a few minutes before the start of the test and hit enter. You should see traces from the front-proxy. Click on a trace to explore the path taken by the request from front-proxy to service1 to service2, as well as the latency incurred at each hop.
See also
- Request tracing
Learn more about using Envoy’s request tracing.
- Envoy admin quick start guide
Quick start guide to the Envoy admin interface.
- Apache SkyWalking
SkyWalking observability analysis platform and application performance management system.