微服务系列详解- Part 6:使用Spring Cloud Sleuth和Zipkin进行分布式跟踪

微服务是一团糟的调试工作。在本教程中,我们将发现如何在Spring Cloud环境中调试分布式调用。抽丝剥茧 细说架构那些事——【优锐课】

上篇文章说到,微服务系列详解-Part5:Spring Cloud Zuul代理作为API网关

微服务架构中的挑战之一是调试问题的能力。一个简单的用户操作可能会触发一系列下游微服务调用。在微服务中跟踪与特定用户操作相关的日志将很麻烦。除此之外,我们可能想跟踪为什么某个微服务调用要花费这么多时间。我们可以使用Spring Cloud Sleuth处理此类问题。Spring Cloud Sleuth提供了分布式跟踪功能,我们还可以将这些跟踪信息导出到Zipkin以可视化呼叫跟踪。

在这篇文章中,我们将学习:
• 跟踪分布式服务呼叫
• 使用Spring Cloud Sleuth进行分布式跟踪
• 使用Zipkin服务器进行分布式跟踪

在微服务世界中,用户对UI的操作可能会调用一个微服务API端点,而端点又会调用另一个微服务端点。

例如,当用户看到目录时,shoppingcart-ui将调用目录服务REST API http://localhost:8181/api/products,而产品反过来又调用了库存服务REST API http://localhost:8282/api/inventor以检查库存可用性。

假设发生了异常或返回的数据无效,并且你想通过查看日志来调查问题所在。但是到目前为止,还没有办法将特定用户的日志跨多个服务关联起来。

Poor Man’s分布式追踪

一种解决方案是在调用链的开头,我们可以创建一个CORRELATION_ID并将其添加到所有日志语句中。连同它一起,还将CORRELATION_ID作为标头发送到所有下游服务,以便那些下游服务在日志中也使用CORRELATION_ID。这样,我们可以识别与跨服务的特定操作相关的所有日志语句。

我们可以使用Logging框架的MDC功能来实现此解决方案。通常,我们会有一个WebRequest拦截器,你可以在其中检查是否有CORRELATION_ID标头。如果标题中没有CORRELATION_ID,则创建一个新的并将其设置在MDC中。日志记录框架包括所有日志语句在MDC中设置的信息。

但是,除了我们不做所有这些工作之外,我们还可以使用Spring Cloud Sleuth,它将为我们做所有以及更多的事情。

首先,在这里熟悉Span,Trace,Annotations的一些术语。

让我们将Sleuth启动器添加到库存服务和目录服务中。

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency>

添加Sleuth启动器并启动服务后,你可以在日志中观察到类似以下内容。

2018-03-20 10:19:15.512  INFO [inventory-service,,,] 53685 --- [trap-executor-0] c.n.d.s.r.aws.ConfigClusterResolver ...
2018-03-20 10:24:15.507  INFO [inventory-service,,,] 53685 --- [trap-executor-0] c.n.d.s.r.aws.ConfigClusterResolver ...

现在点击任何清单服务REST端点,例如http://localhost:8282/api/inventory。然后,你可以在日志中观察TraceID,SpanID。

2018-03-20 10:15:38.466  INFO [inventory-service,683f8e4370413032,d8abe400c68a9a6b,false] 53685 --- [oryController-3] ...

Sleuth在MDC的日志中包括模式[appname,traceId,spanId,exportable]。

现在,调用目录服务端点http://localhost:8181/api/products端点,该端点在内部调用清单服务端点http://localhost:8282/api/inventory。

在目录服务日志中,你可以找到类似以下内容的日志语句:

`2018-03-20 10:54:29.625  INFO [catalog-service,0335da07260d3d6f,
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值