口记录计时信息,以帮助进行延迟分析。它还包括不同的采样策略以管理导出到Zipkin的数据量。
口与参与通信的常见Spring组件集成,如servlet过滤器、异步端点、RestTemplate、消息通道、Zuul 过滤器和Feign客户端等。
将 Sleuth与应用程序集成
===============
要为应用程序启用Spring Cloud Sleuth功能,只需将spring-cloud-starter-sleuth启动器添加到依赖项即可。
org。springframework. cloud
spring-cloud- starter-sleuth
包含此依赖项之后,应用程序生成的日志条目的格式已更改。具体如下所示。
2017-12-30 00:21:31. 639
INFO [order-service, 9a3fef0169864e80 , 9a3fef0169864e80, false]
49212 — [ni0-8090- exec-6]
p.p.s.order。
controller.OrderController :
Products found: [(“id”:2, “name”:“Test2”, “price”:1500},
(“id”:9, “name” :“Test9”,“price”:245011
2017-12-30 00:21:31.683
INFO [order-service, 9a3fef0169864e80, 9a3fef0169864e80, false ]
49212 — [n10-8090- exec-6]
p.p.s.order。controller。OrderController :
Customer found: “id”:2, “name”:“Adam Smith”,
“typel”:“REGULAR”, “accounts”:
[(“id”:4, “number”:“1234567893”. “balance”:50001,
(“id”:5, “number” :“1234567894”, “balance”:0},
{“id”:6, “number”:“1234567895”, “balance”:50001]1
2017-12-30 00:21:31.684
INFO [order-service, 9a3fef01 69864e80, 9a3fef0169864e80, false]
49212 — [n1o-8090- exec-6]
p.p.s.order。controller。OrderController :
Discounted price:{“price”:3752}
2017-12-30 00:21:31.684
INFO lorder-service, 9a3fef0169864e80, 9a3fef0169864e80, false]
49212 — [n1o-8090- exec-6]
p.p.s.order。controller . OrderController :
Account found: {“id”:4, “number”: “1234567893”,“balance” :5000 }
2017-12-30 00:21:31.711
INFO [order-service, 58b06c4c412c76cc, 58b06c4c412c76cc, false]
49212 — [ni0-8090- exec-7]
p.p.s.order . controller . OrderController :
Order found:{“id”:4, “status”: “ACCEPTED” ,
“price”:3752, “customerId”:2, “accountId”:4, “prod uctIds”:[9,2]1
2017-12-30 00:21:31.722
INFO lorder-service, 58b06c4c412c76cc,58b06c4c412c76cc,false]
49212 — [n10-8090- exec-7]
p.p.s.order .controller.OrderController :
Account modified: {“accountId”:4, “price”:3752}
2017-12-30 00:21:31.723
INFO [order-service, 58b06c4c412c76cc, 58b06c4c412c76cc, falsel
49212 — [ni0-8090- exec-7]
p.p.s.order .controller .OrderController :
Order status changed: {“status”: “DONE”}
使用Kibana搜索事件
============
Spring Cloud Sleuth会自动将HTTP标头X .B3-Spanld和X- B3-Traceld添加到所有请求和响应中。这些字段也将作为spanld和traceld包含在MDC中。但在转移到查看Kibana仪表板之前,不妨来看一,看图9.5,这是一个顺序示意图,它说明了示例微服务之间的通信流程。
order-service服务公开了两个可用的方法。第一个方法是创建新订单,第二个方法是确认订单。事实上,第一个POST 1方法将通过customer service服务直接从customer-service服务、produt-service 服务和account-service服务调用所有其他服务的端点。第二个PUT/{id}方法仅与account-service服务中的一个端点集成。
现在可以通过存储在ELK堆栈中的日志条目来映射先前描述的流程。在使用Kibana作为日志聚合器的情况下,再加上由Spring Cloud Sleuth生成的字段,开发人员即可通过使用跟踪或跨度ID过滤它们来轻松查找条目。在图9.6所示的示例中,可以发现与POST方法调用的order-service 服务端点相关的所有事件,其X-B3-Traceld字段等于103c949877519c2。
图9.7也是一个示例,它类似于上一个示例,但处理请求期间存储的所有事件都将发送到PUT/{id}端点。这些条目也已经被X-B3-Traceld字段过滤掉,X-B3-TraceId 字段的值等于7070b90bfb36c961。
在图9.8中可以看到完整的字段列表,这些字段已由微服务应用程序发送到Logstash。Spring Cloud Sleuth库已将包含X-前缀的字段包含在消息中。
集成 Sleuth和Zipkin
================
Zipkin是一种流行的开源分布式跟踪系统,它有助于收集分析基于微服务的架构中的延迟问题所需的计时数据。它能够使用用户界面Web控制台收集、查找和可视化数据。Zipkin用户界面提供了一个依赖关系图,显示系统中所有应用程序处理了多少个跟踪请求。Zipkin由4个元素组成,前面已经提到过其中一个,即Web用户界面。第二个是Zipkin收集器,它负责验证、存储和索引所有传入的跟踪数据。Zipkin 使用Cassandra作为默认的后端存储。它本身也支持Elasticsearch和MySQL.最后一个元素是查询服务,它提供了一个简单的JSONAPI,用于查找和检索跟踪。它主要由Web用户界面使用。
1.运行Zipkin服务器
开发人员可以通过多种方式在本地运行Zipkin 服务器。其中一种方法涉及使用Docker容器。以下命令将启动内存服务器实例。
docker run -d --name zipkin -P 9411: 9411 openzipkin / zipkin
在运行Docker容器之后,Zipkin API在htp://192.1/8.99.100:9411可用。或者,也可以使用Java库和Spring Boot应用程序启动它。要为应用程序启用Zipkin,应该将以下依赖项包含在Maven的pom.xml文件中,如以下代码片段所示。默认版本由spring-cloud-dependencies管理。具体到本示例应用程序,则使用了Edgware.RELEASE Spring Cloud版本列车。
io.zipkin.java
zipkin-server
</ dependency>
io.zipkin.java
zipkin-autoconfigure-ui
</ dependency>
在本示例系统中添加了一个新的zipkin-service 模块。这很简单,唯一需要实现的是应用程序main类,它使用@EnableZipkinServer进行注解。由于这个原因,Zipkin 实例将嵌入Spring Boot应用程序中。
@SpringBootApplication
@EnableZipkinServer
public class zipkinApplication
public static void main(string[] args)
new
SpringApplicationBuilder (ZipkinApplication.class) .web(true) .run(args);
}
}
为了在其默认端口上启动Zipkin 实例,必须覆盖application.yml文件中的默认服务器端口。启动该应用程序之后,可在htp:/:ocalhost:9411处使用Zipkin API。
spring:
application:
name: zipkin-service
server:
port: S[PORT:94111
2.构建客户端应用程序
如果要在项目中同时使用Spring Cloud Sleuth 和Zipkin,则只需在依赖项中添加spring-cloud starter zipkin启动器即可,它将启用通过HTTP API与Zipkin的集成。如果已将Zipkin服务器作为Spring Boot应用程序内的嵌入式实例启动,则不必提供包含连接地址的任何其他配置。如果使用Docker 容器,则应覆盖pplicationyml中的默认URL。
spring:
zipkin:
baseUrl: http://192.168.99. 100:9411/
开发人员始终可以利用与服务发现的集成。如果通过@EnableDiscoveryClient为使用嵌入式Zipkin服务器的应用程序启用了发现客户端,则可以将属性spring zipkin locator.discovery.enabled设置为true.在这种情况下,即使它在默认端口下不可用,所有应用程序也可以通过已注册名称对其进行本地化。开发人员还应该使用spring zipkinbaseUrl属性覆盖默认的Zipkin应用程序名称。