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/