资讯专栏INFORMATION COLUMN

使用Envoy 作Sidecar Proxy的微服务模式-3.分布式追踪

Fundebug / 763人阅读

摘要:在第三部分中,我们将了解如何在服务网格中启用分布式跟踪。在此部署模型中,被部署为服务的在本例中为客户端。会在服务调用之间添加一些追踪,并发送到或您的跟踪提供商目前支持和。这些示例的上游服务是。

本博客是深入研究Envoy Proxy和Istio.io 以及它如何实现更优雅的方式来连接和管理微服务系列文章的一部分。

这是接下来几个部分的想法(将在发布时更新链接):

断路器(第一部分)

重试/超时(第二部分)

分布式跟踪(第三部分)

Prometheus的指标收集(第四部分)

rate limiter(第五部分)

第三部分 - 使用envoy proxy 实现分布式追踪

第一篇博文向您介绍了Envoy Proxy的断路功能实现。在第二部分中,仔细研究了如何启用额外的弹性功能,如超时和重试。在第三部分中,我们将了解如何在服务网格中启用分布式跟踪。有意进行一些简单的演示,因此我可以多带带说明模式和用法。请下载此演示的源代码并按照说明进行操作!

该演示由一个客户端和一个服务组成。客户端是一个Java http应用程序,模拟对“上游”服务进行http调用(注意,我们在这里使用Envoys术语,并贯穿整个repo)。客户端打包在docker.io/ceposta/http-envoy-client:latest的Docker镜像中。除了http-client Java应用程序之外,还有Envoy Proxy的一个实例。在此部署模型中,Envoy被部署为服务的sidercar(在本例中为http客户端)。当http-client进行出站调用(到“上游”服务)时,所有调用都通过Envoy Proxy sidercar。envoy会在服务调用之间添加一些追踪headers,并发送到Zipkin(或您的跟踪提供商...... Envoy目前支持Zipkin和Lightstep)。

这些示例的“上游”服务是httpbin.org。 httpbin.org允许我们轻松模拟HTTP服务行为。它很棒,所以如果你没有看到它,请查看它。

这个traceing 演示有自己的envoy.json配置文件。我绝对建议您查看配置文件每个部分的参考文档,以帮助理解完整配置。 datawire.io的优秀人员也为Envoy及其配置提供了一个很好的介绍,你也应该检查一下。

运行 tracing demo

对于跟踪演示,我们将使用以下如下的配置来配置我们的Envoy(请参阅其余上下文的完整配置):

   "tracing": {
      "operation_name": "egress"
    },
    
    ...
    
      "tracing": {
        "http": {
          "driver": {
            "type": "zipkin",
            "config": {
              "collector_cluster": "zipkin",
              "collector_endpoint": "/api/v1/spans"
            }
          }
        }
      },
      
      ...
      
       {
          "name": "zipkin",
          "connect_timeout_ms": 1000,
          "type": "strict_dns",
          "lb_type": "round_robin",
          "hosts": [
            {
              "url": "tcp://zipkin:9411"
            }
          ]
        }
    

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

首先我们停止已经存在的演示demo:

./docker-stop.sh

启动zipkin服务:

./tracing/docker-run-zipkin.sh

会将zipkin暴露在端口9411上。如果您使用minikube或类似的东西来运行这些演示,您可以直接将minikube端口导出到您的主机,如下所示:

./port-forward-minikube.sh 9411

一旦你启动并运行Zipkin,访问该服务(即,在minikube上,在进行端口转发后,它将只是http:// localhost:9411)。你应该看看Zipkin:

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

/docker-run.sh -d tracing

然后让我们用客户端访问服务:

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

我们将看到如下的输出:

< HTTP/1.1 200 OK
* Server envoy is not blacklisted
< server: envoy
< date: Thu, 25 May 2017 06:31:02 GMT
< content-type: application/json
< access-control-allow-origin: *
< access-control-allow-credentials: true
< x-powered-by: Flask
< x-processed-time: 0.000982999801636
< content-length: 402
< via: 1.1 vegur
< x-envoy-upstream-service-time: 142
< 
{
  "args": {}, 
  "headers": {
    "Accept": "*/*", 
    "Connection": "close", 
    "Host": "httpbin.org", 
    "User-Agent": "curl/7.35.0", 
    "X-B3-Sampled": "1", 
    "X-B3-Spanid": "0000b825f82b418d", 
    "X-B3-Traceid": "0000b825f82b418d", 
    "X-Ot-Span-Context": "0000b825f82b418d;0000b825f82b418d;0000000000000000;cs"
  }, 
  "origin": "68.3.84.124", 
  "url": "http://httpbin.org/get"
}

现在,如果我们转到Zipkin服务器,我们应该看到此调用的单个跨度/跟踪(注意,您可能需要调整zipkin过滤器中的开始/停止时间:

这里我们有一个只有一个span的跟踪(这是我们所期望的,因为我们的Envoy演示客户端直接与没有Envoy的外部服务调用......如果上游服务也有启用了zipkin的Envoy,我们将看到服务之间的全部span)。

如果我们点击span以查看更多细节,我们会看到如下内容:

PS

请注意,服务体系结构中的每个服务都应该与Envoy一起部署并参与分布式跟踪。这种方法的优点在于跟踪是从应用程序带外进行的。但是,为了跟踪要正确传播的上下文,应用程序开发人员有责任正确传播正确的header,以便不同的span正确关联。检查zipkin以获取更多详细信息,但至少要传播这些header(如上所示):

x-request-id

x-b3-traceid

x-b3-spanid

x-b3-parentspanid

x-b3-sampled

x-b3-flags

x-ot-span-context

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/33139.html

相关文章

  • 使用Envoy Sidecar Proxy的微服务模式-1.熔断

    摘要:我们将直接向发送流量,以使其帮帮助处理熔断。让我们调用我们的服务我们将看到以下的输出我们也能看到我们五次的调用成功了。 本博客是深入研究Envoy Proxy和Istio.io 以及它如何实现更优雅的方式来连接和管理微服务系列文章的一部分。 这是接下来几个部分的想法(将在发布时更新链接): 断路器(第一部分) 重试/超时(第二部分) 分布式跟踪(第三部分) Prometheus的指标...

    NotFound 评论0 收藏0
  • 使用Envoy Sidecar Proxy的微服务模式-1.熔断

    摘要:我们将直接向发送流量,以使其帮帮助处理熔断。让我们调用我们的服务我们将看到以下的输出我们也能看到我们五次的调用成功了。 本博客是深入研究Envoy Proxy和Istio.io 以及它如何实现更优雅的方式来连接和管理微服务系列文章的一部分。 这是接下来几个部分的想法(将在发布时更新链接): 断路器(第一部分) 重试/超时(第二部分) 分布式跟踪(第三部分) Prometheus的指标...

    Drummor 评论0 收藏0
  • 使用Envoy Sidecar Proxy的微服务模式-5.rate limiter

    摘要:为安装过滤器的侦听器上的每个新请求调用服务,路由表指定应调用服务。使用了令牌桶算法来限流。 本博客是深入研究Envoy Proxy和Istio.io 以及它如何实现更优雅的方式来连接和管理微服务系列文章的一部分。 这是接下来几个部分的想法(将在发布时更新链接): 断路器(第一部分) 重试/超时(第二部分) 分布式跟踪(第三部分) Prometheus的指标收集(第四部分) rate ...

    CocoaChina 评论0 收藏0
  • 使用Envoy Sidecar Proxy的微服务模式-2.超时和重试

    摘要:在第二部分中,我们将详细介绍如何启用其他弹性功能,如超时和重试。在此部署模型中,被部署为服务的在本例中为客户端。这些示例的上游服务是。它们可以帮助传播故障或对可能正在挣扎的内部服务造成类型攻击。此延迟应足以触发超时。 本博客是深入研究Envoy Proxy和Istio.io 以及它如何实现更优雅的方式来连接和管理微服务系列文章的一部分。 这是接下来几个部分的想法(将在发布时更新链接):...

    vibiu 评论0 收藏0
  • 华尔街见闻基于istio的服务网格实践

    摘要:,托管于腾讯云容器平台容器编排工具。适配我们目前的服务部署在腾讯云托管,节点使用核的网络增强型机器,所有的后端服务都以部署,集群外部署高可用支持集群内服务发现,数据库以为主,消息队列采用。 距离2017年的见闻技术架构调整接近2年,随着业务线的发展,见闻技术部的项目数量、项目架构类型、基础设施规模、服务变更频率都在不断地增长,带给SRE的挑战是如何能更快地助力于开发人员更快更稳定地部署...

    stonezhu 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<