关注分享主机优惠活动
国内外VPS云服务器

使用 Envoy 作为 sidecar 代理的微服务模型 - 3. 分布式跟踪

摘要:在第 3 部分中,了解如何在服务网格上启用分布式跟踪。 在此部署模型中,客户端(在本例中)被部署为服务。 在服务呼叫期间添加跟踪并发送到当前支持的跟踪提供商。 这些示例中的上游服务是 。

本博客是深入研究 Envoy Proxy 和 Istio.io 并解释如何以更复杂的方式连接和管理微服务的系列文章的一部分。部门。

以下是接下来几部分的一些想法(链接发布后我将立即更新):

断路器(第 1 部分)

重新尝试/超时(第 2 部分)

分布式跟踪(第 3 部分)

收集 Prometheus 指标(第 4 部分)

速率限制器(第 5 部分)

p>第 3 部分 - 使用 Envoy 代理实现分布式跟踪

在我们的第一篇博文中,我们将介绍 Envoy 代理的熔断功能的实现。 第二部分详细介绍了如何启用额外的恢复功能,例如超时和重试。 在第 3 部分中,您将了解如何在服务网格上启用分布式跟踪。 这是一个故意简单的演示,旨在帮助更详细地解释模式和用法。 下载此演示的源代码并按照说明进行操作。

该演示由客户端和服务组成。 客户端是一个 Java http 应用程序,它模拟对“上游”服务的 http 调用(请注意此处以及整个存储库中 Envoy 术语的使用)。 客户端打包在 docker.io/ceposta/http-envoy-client:latest 上的 Docker 映像中。 除了 http-client Java 应用程序之外,还有一个 Envoy 代理实例。 在此部署模型中,Envoy 被部署为服务的 sidecar(在本例中为 http 客户端)。 当 http- 客户端发出出站调用(向“上游”服务)时,所有调用都会通过 Envoy 代理 sidecar。Envoy 在服务调用期间添加一些跟踪标头并将它们发送到 Zipkin(或跟踪提供程序...Envoy 目前使用 Zipkin 和 Lightstep)。

这些示例中的“上游”服务是 httpbin.org。 httpbin.org 允许您轻松模拟 HTTP 服务的行为。 太神奇了,如果你还没有看过,请看一下。

这个跟踪演示有自己的 envoy.json 配置文件。 我们强烈建议您查看配置文件每个部分的参考文档,以了解完整的配置。 datawire.io 的优秀人员也对 Envoy 及其配置进行了精彩的介绍,因此请务必查看。

运行跟踪演示

跟踪演示使用以下配置来配置 Envoy(请参阅上下文其余部分的完整配置):

 "tracing": { "operation_name": "egress" }, ... "tracing": { "http": { "driver": { "type": "zipkin", "config" : { “collector_cluster”: “zipkin”, “collector_endpoint”: “/api/v1/spans” } } } }, ... { “名称”: “zipkin”, “connect_timeout_ms”: 1000, “类型”: “严格的_dns", "lb_type": "round_robin", "hosts": [ { "url": "tcp://zipkin:9411" } ] } 

这里我们配置跟踪驱动程序和跟踪集群。在这种情况下,要运行此演示,您需要启动 Zipkin 服务器:

首先,停止现有演示:

./docker -stop.sh

启动 zipkin 服务:

./tracing/docker-run-zipkin.sh

使用 minikube 之类的端口在 9411 上公开 zipkin。运行这些演示,您可以将 minikube 端口直接导出到主机,如下所示:

./port -forward-minikube.sh 9411

pre>

一旦您Zipkin 启动并运行,访问服务(即在 minikube 上,端口转发 http://localhost:9411 后)查看 Zipkin:

现在我们已经启动了 zipkin 服务器,让我们开始跟踪演示:

/docker-run.sh -d Tracing

接下来,让我们使用客户端访问服务:

./curl.sh -vvvv localhost:15001/get

您将看到以下输出:

p>

< HTTP /1.1 200 OK* 服务器特使已列入黑名单。不<服务器:特使<日期:2017 年 5 月 25 日星期四 06:31:02 GMT< 内容-类型:application/json< 访问-控制-允许-来源:*< 访问-控制-允许[ k4]凭证:true< x-powered-by:Flask< x-processed-时间:0.000982999801636<内容-长度:402<via:1.1 vegur<x-envoy[k4 ] ]上游 - 服务 - 时间:142< { "args": {}, "headers": { "Accept": "*/*", "Connection": "close", "Host" : " httpbin .org", "user-agent": "curl/7.35.0", "X-B3-sample": "1", "X-B3-西班牙" : " 0000b825f82b418d " , " " 68.3.84.124", "url": "http://httpbin.org/get"}

当我访问 Zipkin 服务器时,我看到这个单一的 span/trace (注意:您在某些情况下可能需要调整 zipkin。)过滤器开始/停止时间:

这里我们有一个只有一个跨度的跟踪(这是必要的,因为 Envoy 演示客户端无需外部服务 Envoy 即可直接工作)。调用...如果上游服务也有启用了 zipkin 的 Envoy,您将看到服务之间的完整跨度)。

点击跨度查看详细信息:

附加说明

该服务请注意。 架构中的所有服务均采用 Envoy 部署,并且必须参与分布式追踪。 这种方法的优点是跟踪是在应用程序的带外完成的。 然而,应用程序开发人员有责任正确传播正确的标头,以便正确关联不同的跨度,以便跟踪正确传播的上下文。 检查 zipkin 了解更多详细信息。 但是,至少传播以下标头(上面):

x-request-id

x-b3[ k4]traceid

x-b3-spanid

x-b3-parentspanid

x-b3-采样

x -b3-标志

x-ot-span-上下文

未经允许不得转载:主机频道 » 使用 Envoy 作为 sidecar 代理的微服务模型 - 3. 分布式跟踪

评论 抢沙发

评论前必须登录!