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 的路径,以及每次跳跃发生的延迟。

另请参阅

请求追踪

了解有关使用 Envoy 的请求追踪的更多信息。

Jaeger

Jaeger 追踪网站。