Jaeger 追踪
Jaeger 追踪沙盒演示了 Envoy 的 请求追踪 功能,使用 Jaeger 作为追踪提供商。此沙盒与上面描述的前端代理架构非常相似,只有一个区别:service1 在返回响应之前向 service2 发出 API 调用。这三个容器将部署在名为 envoymesh
的虚拟网络中。
所有传入的请求都通过前端 Envoy 路由,前端 Envoy 充当位于 envoymesh
网络边缘的反向代理。端口 8000
由 docker compose 公开 (参见 docker-compose.yaml
)。请注意,所有 Envoy 都配置为收集请求追踪 (例如,envoy.yaml
中的 http_connection_manager/config/tracing 设置) 并且设置传播 Jaeger 追踪器生成的跨度到 Jaeger 集群 (在 envoy.yaml
中的追踪驱动程序设置)。
在将请求路由到相应的 Envoy 服务或应用程序之前,Envoy 将负责为追踪生成相应的跨度 (父/子上下文跨度)。在高层次上,每个跨度都会记录上游 API 调用的延迟以及将跨度与其他相关跨度关联起来所需的信息 (例如,追踪 ID)。
从 Envoy 进行追踪的最重要优势之一是它将负责将追踪传播到 Jaeger 服务集群。但是,为了充分利用追踪,应用程序必须在调用其他服务时传播 Envoy 生成的追踪标头。在我们提供的沙盒中,充当 service1 的简单 aiohttp
应用程序 (参见 examples/shared/python/tracing/service.py
中的追踪函数) 在进行出站调用 service2 时会传播追踪标头。
步骤 1:构建沙盒
要构建此沙盒示例,并启动示例应用程序,请运行以下命令
$ pwd
envoy/examples/jaeger-tracing
$ docker compose pull
$ docker compose up --build -d
$ docker compose ps
Name Command State Ports
----------------------------------------------------------------------------------------------------------------------------------------------------------------------
jaeger-tracing_front-envoy_1 /docker-entrypoint.sh /bin ... Up 10000/tcp, 0.0.0.0:8000->8000/tcp
jaeger-tracing_jaeger_1 /go/bin/all-in-one-linux - ... Up 14250/tcp, 14268/tcp, 0.0.0.0:16686->16686/tcp, 5775/udp, 5778/tcp, 6831/udp, 6832/udp, 9411/tcp
jaeger-tracing_service1_1 /bin/sh -c /usr/local/bin/ ... Up 10000/tcp
jaeger-tracing_service2_1 /bin/sh -c /usr/local/bin/ ... Up 10000/tcp
步骤 2:生成一些负载
您现在可以通过以下方式通过前端 Envoy 向 service1 发送请求
$ curl -v localhost:8000/trace/1
* Trying 192.168.99.100...
* Connected to 192.168.99.100 (192.168.99.100) port 8000 (#0)
> GET /trace/1 HTTP/1.1
> Host: 192.168.99.100:8000
> User-Agent: curl/7.54.0
> Accept: */*
>
< HTTP/1.1 200 OK
< content-type: text/html; charset=utf-8
< content-length: 89
< x-envoy-upstream-service-time: 9
< server: envoy
< date: Fri, 26 Aug 2018 19:39:19 GMT
<
Hello from behind Envoy (service 1)! hostname: f26027f1ce28 resolvedhostname: 172.19.0.6
* Connection #0 to host 192.168.99.100 left intact
步骤 3:在 Jaeger UI 中查看追踪
将您的浏览器指向 https://127.0.0.1:16686。您应该会看到 Jaeger 仪表板。将服务设置为“front-proxy”并点击“查找追踪”。您应该会看到来自 front-proxy 的追踪。点击追踪以探索请求从 front-proxy 到 service1 到 service2 的路径,以及每次跳跃发生的延迟。