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 產生的追蹤標頭。在我們提供的沙盒中,簡單的 aiohttp 應用程式 (請參閱 examples/shared/python/tracing/service.py 中的 trace 函數) 充當 service1,會在對 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」並點擊「尋找追蹤」。您應該會看到來自前端代理的追蹤。點擊追蹤以探索請求從前端代理到 service1 到 service2 所採取的路徑,以及每個躍點產生的延遲。

另請參閱

請求追蹤

了解更多關於使用 Envoy 請求追蹤的資訊。

Jaeger

Jaeger 追蹤網站。