Spring cloud Zipkin 链路追踪安装配置和使用,SpringCloud Zipkin server 下载安装

Spring cloud Zipkin 链路追踪安装配置和使用,SpringCloud Zipkin server 下载安装

================================

©Copyright 蕃薯耀 2021-03-29

https://www.cnblogs.com/fanshuyao/

一、Spring cloud Zipkin 概述

为什么要使用链路追踪?
如果一个企业存在N多个系统,N多个微服务,服务之前相互调用,突然有一个请求变得很慢,那找原因就很麻烦。
若配置了链路追踪,则能实时监控服务调用的情况,包括服务调用的时间,很容易就能知道哪个服务的请求变慢。

Zipkin是一个分布式跟踪系统。它有助于收集解决服务体系结构中的延迟问题所需的时间数据。功能包括收集和查找这些数据。
如果日志文件中有跟踪ID,可以直接跳转到它。否则,可以根据服务、操作名称、标记和持续时间等属性进行查询。我们将为您总结一些有趣的数据,例如在服务中花费的时间百分比,以及操作是否失败。

官网地址:

https://zipkin.io/

二、SpringCloud Zipkin server 下载地址
zipkin-server最新版本下载地址:

https://repo1.maven.org/maven2/io/zipkin/zipkin-server/2.23.2/zipkin-server-2.23.2-exec.jar

zipkin-server更多版本(2.14.1-2.23.2【当前最新版】)下载地址:

https://repo1.maven.org/maven2/io/zipkin/zipkin-server/

zipkin-server(2.10.4-2.12.9)下载地址:

https://dl.bintray.com/openzipkin/maven/io/zipkin/java/zipkin-server/

zipkin-server官网说明文档:

https://github.com/openzipkin/zipkin/tree/master/zipkin-server

三、SpringCloud Zipkin server 运行启动
Zipkin server是一个java1.8+服务,打包为一个可执行jar。

java -jar zipkin-server-2.23.2-exec.jar

Windows示例:

F:\0我的软件\springCloud\Zipkin\zipkin-server>java -jar zipkin-server-2.23.2-exec.jar

启动后:
:: version 2.23.2 :: commit 7bf3aab ::
2021-03-26 16:10:40.462 INFO [/] 5972 --- [oss-http-*:9411] c.l.a.s.Server : Serving HTTP at /0:0:0:0:0:0:0:0:9411 - http://127.0.0.1:9411/

浏览器打开地址进入到Zipkin监控页面:

http://127.0.0.1:9411/

四、SpringCloud Zipkin 配置
Span存储和收集器是可配置的。默认情况下,存储在内存中,HTTP收集器(POST/api/v2/spans端点)被启用,服务器侦听端口9411。
Zipkin服务器是用Armeria实现的。虽然Zipkin服务器在内部使用Spring引导,但不应将其视为普通的Spring引导应用程序。
注:不支持自定义服务器,zipkin不能作为您打包的应用程序的一部分

1、Endpoints(端点)
以下端点是在基url下定义的:http://your_host:9411

/ - UI
/config.json - Configuration for the UI
/api/v2 - API
/health - 如果正常,则返回200状态
/info - 提供正在运行的实例的版本
/metrics - 包括按传输类型细分的收集器度量
/prometheus - Prometheus scrape endpoint(普罗米修斯刮除端点)

2、CORS (Cross-origin Resource Sharing)(跨域请求)
默认情况下,/api/v2下的所有端点都配置为允许跨源请求。
这可以通过修改属性来更改:zipkin.query.allowed-origins.
例如,允许CORS请求来自:http://foo.bar.com:

ZIPKIN_QUERY_ALLOWED_ORIGINS=http://foo.bar.com

3、Logging(日志)
默认情况下,zipkin将日志消息写入信息级别及更高级别的控制台。可以使用logging.level.XXX属性。
例如,如果要为所有zipkin类别启用debug调试日志记录,可以按如下方式启动服务器:

$ java -jar zipkin.jar --logging.level.zipkin2=DEBUG

4、Configuration(Zipkin配置)
我们支持ENV变量配置,比如STORAGE_TYPE=cassandra3,因为管理员很熟悉这些配置,而且在Docker等运行时环境中也很容易使用。
以下是Zipkin的顶级配置:

QUERY_PORT:HTTP API和web UI的侦听端口;默认为9411

QUERY_ENABLEDfalse禁用“/api/v2”下的HTTP读取端点。这也会禁用UI,因为它依赖于API。如果您的唯一目标是限制搜索,请改用启用搜索。默认为true

SEARCH_ENABLEDfalse禁用查询API中的搜索以及收集器中支持搜索的任何索引或后处理。这不会禁用整个UI,因为按ID跟踪和依赖项查询仍在运行。使用其他服务(如日志)查找跟踪ID时禁用此选项。默认为true

QUERY_TIMEOUT:设置查询请求的硬超时。接受任何持续时间字符串(例如100ms)。值为0将完全禁用超时。默认为11秒。

QUERY_LOG_LEVEL:写入控制台的日志级别,默认为INFO

QUERY_NAMES_MAX_AGE:控制MAX AGE头的值zipkin服务器在http请求UI中的自动完成值时响应(例如服务名称)。默认为300秒。

QUERY_LOOKBACK:查询从结束Ts可以回溯多少毫秒;默认为24小时(两个每日存储桶:一个用于今天,一个用于昨天)

STORAGE_TYPE:存储类型:Span存储实现:mem、mysql、cassandra3、elasticsearch之一

COLLECTOR_SAMPLE_RATE:收集器采样率:要保留的记录道百分比,默认为“始终采样”(1.0)。

AUTOCOMPLETE_KEYS:自动完成键:将由/api/v2/AUTOCOMPLETE Tags端点返回的span标记键列表;标记键应以逗号分隔,例如“instance id,user id,env”

AUTOCOMPLETE_TTL:禁止调用写入相同的AUTOCOMPLETE键/值对的时间(毫秒)。默认值3600000(1小时)

五、实际项目发送请求,配置Zipkin链路追踪消费者服务提供者都要加上Zipkin和配置

记得要先启动zipkin-server:

java -jar zipkin-server-2.23.2-exec.jar

1、pom.xml引入依赖

<!--spring-cloud-starter-zipkin已经包含spring-cloud-starter-sleuth-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>

2、application.properties文件配置

#zipkin 链路追踪配置
spring.zipkin.base-url=http://127.0.0.1:9411
#采用率值介于:0到1,1表示全部采集,默认的采样比例为: 0.1(即10%)。
spring.sleuth.sampler.probability=1

3、Controller服务调用
省略。


本示例基于(有全部代码):

https://www.cnblogs.com/fanshuyao/p/14577910.html

4、测试zipkin 链路追踪
输入地址访问消费者的接口,消费者再调用服务提供者的接口,返回结果。
例如:

http://127.0.0.1:8805/web/get/1

返回结果:8801是服务提供者的端口,是由服务提供者返回的

{
"result": true,
"timestamp": "2021-03-26 16:55:14",
"msg": "操作成功。",
"datas": "端口=8801,text=1"
}

截图:

Zipkin 请求查询列表:

Zipkin 链路追踪详细

Zipkin宕机不影响服务接口的调用,但会有错误(只有一次错误,后面再调用服务接口,没有再报错)。

Zipkin宕机发生的错误:

2021-03-26 17:22:29.008  WARN [SPRING-CLOUD-NACOS-CONSUMER,,,] 8616 --- [/api/v2/spans}}] z.r.AsyncReporter$BoundedAsyncReporter   : Spans were dropped due to exceptions. All subsequent errors will be logged at FINE level.
2021-03-26 17:22:29.013  WARN [SPRING-CLOUD-NACOS-CONSUMER,,,] 8616 --- [/api/v2/spans}}] z.r.AsyncReporter$BoundedAsyncReporter   : Dropped 2 spans due to ResourceAccessException(I/O error on POST request for "http://127.0.0.1:9411/api/v2/spans": connect timed out; nested exception is java.net.SocketTimeoutException: connect timed out)

org.springframework.web.client.ResourceAccessException: I/O error on POST request for "http://127.0.0.1:9411/api/v2/spans": connect timed out; nested exception is java.net.SocketTimeoutException: connect timed out
    at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:746) ~[spring-web-5.2.13.RELEASE.jar:5.2.13.RELEASE]
    at org.springframework.cloud.sleuth.zipkin2.sender.ZipkinRestTemplateWrapper.doExecute(ZipkinRestTemplateSenderConfiguration.java:228) ~[spring-cloud-sleuth-zipkin-2.2.7.RELEASE.jar:2.2.7.RELEASE]
    at org.springframework.web.client.RestTemplate.exchange(RestTemplate.java:639) ~[spring-web-5.2.13.RELEASE.jar:5.2.13.RELEASE]
    at org.springframework.cloud.sleuth.zipkin2.sender.RestTemplateSender.post(RestTemplateSender.java:129) ~[spring-cloud-sleuth-zipkin-2.2.7.RELEASE.jar:2.2.7.RELEASE]
    at org.springframework.cloud.sleuth.zipkin2.sender.RestTemplateSender$HttpPostCall.doExecute(RestTemplateSender.java:147) ~[spring-cloud-sleuth-zipkin-2.2.7.RELEASE.jar:2.2.7.RELEASE]
    at org.springframework.cloud.sleuth.zipkin2.sender.RestTemplateSender$HttpPostCall.doExecute(RestTemplateSender.java:137) ~[spring-cloud-sleuth-zipkin-2.2.7.RELEASE.jar:2.2.7.RELEASE]
    at zipkin2.Call$Base.execute(Call.java:380) ~[zipkin-2.21.7.jar:na]
    at zipkin2.reporter.AsyncReporter$BoundedAsyncReporter.flush(AsyncReporter.java:299) ~[zipkin-reporter-2.15.2.jar:na]
    at zipkin2.reporter.AsyncReporter$Flusher.run(AsyncReporter.java:378) [zipkin-reporter-2.15.2.jar:na]
    at java.lang.Thread.run(Thread.java:748) [na:1.8.0_241]
Caused by: java.net.SocketTimeoutException: connect timed out
    at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method) ~[na:1.8.0_241]
    at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:85) ~[na:1.8.0_241]
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350) ~[na:1.8.0_241]
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206) ~[na:1.8.0_241]
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188) ~[na:1.8.0_241]
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172) ~[na:1.8.0_241]
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) ~[na:1.8.0_241]
    at java.net.Socket.connect(Socket.java:606) ~[na:1.8.0_241]
    at sun.net.NetworkClient.doConnect(NetworkClient.java:175) ~[na:1.8.0_241]
    at sun.net.www.http.HttpClient.openServer(HttpClient.java:463) ~[na:1.8.0_241]
    at sun.net.www.http.HttpClient.openServer(HttpClient.java:558) ~[na:1.8.0_241]
    at sun.net.www.http.HttpClient.<init>(HttpClient.java:242) ~[na:1.8.0_241]
    at sun.net.www.http.HttpClient.New(HttpClient.java:339) ~[na:1.8.0_241]
    at sun.net.www.http.HttpClient.New(HttpClient.java:357) ~[na:1.8.0_241]
    at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:1226) ~[na:1.8.0_241]
    at sun.net.www.protocol.http.HttpURLConnection.plainConnect0(HttpURLConnection.java:1162) ~[na:1.8.0_241]
    at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:1056) ~[na:1.8.0_241]
    at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:990) ~[na:1.8.0_241]
    at org.springframework.http.client.SimpleBufferingClientHttpRequest.executeInternal(SimpleBufferingClientHttpRequest.java:76) ~[spring-web-5.2.13.RELEASE.jar:5.2.13.RELEASE]
    at org.springframework.http.client.AbstractBufferingClientHttpRequest.executeInternal(AbstractBufferingClientHttpRequest.java:48) ~[spring-web-5.2.13.RELEASE.jar:5.2.13.RELEASE]
    at org.springframework.http.client.AbstractClientHttpRequest.execute(AbstractClientHttpRequest.java:53) ~[spring-web-5.2.13.RELEASE.jar:5.2.13.RELEASE]
    at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:737) ~[spring-web-5.2.13.RELEASE.jar:5.2.13.RELEASE]
    ... 9 common frames omitted

(时间宝贵,分享不易,捐赠回馈,^_^)

================================

©Copyright 蕃薯耀 2021-03-29

https://www.cnblogs.com/fanshuyao/

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Spring Cloud Sleuth是一个分布式跟踪解决方案,它可以帮助开发人员在微服务架构中追踪请求的流程和调用链路。它通过为每个请求生成唯一的跟踪ID和跨服务的调用ID来实现这一目标。这些ID可以用于跟踪请求的流程和调用链路,从而帮助开发人员快速诊断和解决问题。Spring Cloud Sleuth还提供了一些可视化工具,如Zipkin,可以帮助开发人员更好地理解和分析跟踪数据。 ### 回答2: SpringCloud Sleuth是一个基于日志的分布式跟踪方案,它可以用于解决微服务架构下的分布式系统的链路追踪问题。在分布式系统中,一个请求经常会穿越多个服务,从而会形成一条复杂的链路,如果有一台或多台机器对此进行记录,那么将能够轻松地查看和理解一个请求的完整路径。这些信息能够帮助我们更快地定位问题所在,提高系统可靠性和稳定性。 Sleuth使用Zipkin的架构和数据模型,通过在每个请求的Header中添加Trace Id和Span Id来实现链路追踪。Trace Id表示整个请求链路,Span Id表示每一个服务的一个简单步骤。使用这两个 Id,我们就可以将整个链路追踪下来,使得对请求的监测、记录和分析变得更加容易。 Sleuth结合了Spring Cloud日志管理和Zipkin的功能,能够自动收集各个微服务的请求跟踪信息,并将其发送到Zipkin服务器进行聚合分析,视图展现。通过Sleuth的ChainInvoker,可以实现对所有链路的统一管理。当一条请求跨越多个服务时,Sleuth会为每个服务实例生成唯一的spanId,并将这个spanId沿用到下一个服务实例,从而使得整条链路保留了完整的信息。此外,Sleuth还支持基于日志的采样策略和数据比较高效的存储,保证了高性能的分布式链路追踪Sleuth的主要应用场景是微服务架构下的链路跟踪和性能监控。微服务架构中有大量的服务,服务之间的关系错综复杂,因此链路追踪对于排查问题、优化性能非常重要。Sleuth能够方便地实现链路追踪和监测,并帮助我们快速定位问题所在,提高系统的可靠性和稳定性。 ### 回答3: Spring Cloud Sleuth 链路追踪Spring Cloud 微服务架构中的一项重要的功能模块。通过 Sleuth 链路追踪,我们可以跟踪整个分布式系统中的请求链路,从而了解每个操作所花费的时间、调用的服务以及调用顺序。在微服务架构中,服务调用会涉及到多个服务之间的协作,使用 Sleuth 链路追踪可以帮助我们很好地理解系统在内部的调用过程。 Sleuth 链路追踪的原理是在每个服务的请求中添加唯一的追踪 ID,通过这个追踪 ID,Sleuth 可以实现将每个请求相关的服务调用串联起来,形成完整的请求链路。追踪 ID 通常被称为 Trace ID,它作为请求的一部分,从前端发起请求的服务开始一直传递到最后一个服务。 通过 Sleuth 链路追踪,我们可以了解每个调用的服务名和 IP 地址,以及请求的耗时情况,在调试分布式系统时非常实用。此外,Sleuth 还支持将链路追踪信息集成到日志系统中,从而更好地协助开发人员进行故障排查。 Sleuth 链路追踪还提供了 Zipkin 集成,Zipkin 是一个开源的分布式链路追踪系统,可以将链路数据可视化显示,并提供了一些分析工具,帮助开发人员更好地理解系统的调用情况。 总之,Spring Cloud Sleuth 链路追踪是一个非常实用的工具,可以帮助我们更好地理解分布式系统中服务调用的情况,有效地解决微服务架构中的复杂度和故障排查的问题。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值