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/