SkyWalking tracing
Requirements
Setup your sandbox environment with Docker and Docker Compose, and clone the Envoy repository with Git.
Used to make HTTP
requests.
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
Learn more about using Envoy’s request tracing.
Quick start guide to the Envoy admin interface.
SkyWalking observability analysis platform and application performance management system.