SpringBoot之微服務日誌鏈路追蹤

SpringBoot之微服務日誌鏈路追蹤

簡介

在微服務里,業務出現問題或者程序出的任何問題,都少不了查看日誌,一般我們使用 ELK 相關的日誌收集工具,服務多的情況下,業務問題也是有些難以排查,只能確定大致時間定位相關日誌。log-trace-spring-boot-starter 解決多個服務調用日誌的問題,它可以將一個完整的調用鏈給整合為一個完整有序的日誌。

支持組件:

  • zuul 調用
  • feign 調用
  • restTemplate 調用

日誌輸出格式:

2019-11-14 14:22:07.796  INFO [log-trace-service-a-demo,ac8ffaaed5f343da,log-trace-zuul-demo,,] 88948 --- [nio-8081-exec-7] c.p.l.t.service.a.demo.TestController    : controller test2 執行 ac8ffaaed5f343da
2019-11-14 14:23:15.569  INFO [log-trace-service-a-demo,04cf5392dc5c4881,log-trace-zuul-demo,,] 88948 --- [nio-8081-exec-9] c.p.l.t.service.a.demo.TestController    : controller test2 執行 04cf5392dc5c4881
2019-11-14 14:24:44.183  INFO [log-trace-service-a-demo,86b5c555ce4f4451,log-trace-zuul-demo,,] 88948 --- [nio-8081-exec-1] c.p.l.t.service.a.demo.TestController    : controller test2 執行 86b5c555ce4f4451

我們可以通過 86b5c555ce4f4451 id 進行查詢鏈路上的所有日誌信息。

log-trace-service-a-demo 為當前應用。
log-trace-zuul-demo 為上游應用。

當然這些參數可以基於業務定製的。

功能使用

添加依賴

ps: 實際version版本請使用最新版
最新版本:

<dependency>
  <groupId>com.purgeteam</groupId>
  <artifactId>log-trace-spring-boot-starter</artifactId>
  <version>0.1.0.RELEASE</version>
</dependency>

ps: 請基於 SpirngBoot2.1.x 版本使用

配置應用

這裏以3個微服務來舉例子。

  1. log-trace-zuul-demo 充當網關功能
  2. log-trace-service-a-demo 充當服務A
  3. log-trace-service-b-demo 充當服務B

調用鏈路為:

log-trace-zuul-demo -> log-trace-service-a-demo TestController#test -> log-trace-service-b-demo TestController#test

訪問網關地址: http://127.0.0.1:8000/a/test

網關日誌如下:

2019-11-14 14:27:37.434 DEBUG [33b07a9c5f324375,this] 89996 --- [nio-8000-exec-1] c.p.l.t.s.i.zuul.TracePreZuulFilter      : zuul traceid 33b07a9c5f324375

網關轉發至服務A

服務A 日誌如下:

2019-11-14 14:27:37.476  INFO [log-trace-service-a-demo,33b07a9c5f324375,log-trace-zuul-demo,,] 88948 --- [nio-8081-exec-5] c.p.l.t.service.a.demo.TestController    : controller test2 執行 33b07a9c5f324375

服務A 調用 服務B

服務B 日誌如下:

2019-11-14 14:27:37.478  INFO [log-trace-service-b-demo,33b07a9c5f324375,log-trace-service-a-demo,,] 88952 --- [nio-8082-exec-3] c.p.l.t.servcie.b.demo.TestController    : header traceId 33b07a9c5f324375
2019-11-14 14:27:37.478  INFO [log-trace-service-b-demo,33b07a9c5f324375,log-trace-service-a-demo,,] 88952 --- [nio-8082-exec-3] c.p.l.t.servcie.b.demo.TestController    : controller test 執行 33b07a9c5f324375
2019-11-14 14:27:37.478  INFO [log-trace-service-b-demo,33b07a9c5f324375,log-trace-service-a-demo,,] 88952 --- [nio-8082-exec-3] c.p.l.trace.servcie.b.demo.TestService   : test 方法執行 33b07a9c5f324375
2019-11-14 14:27:37.478  INFO [log-trace-service-b-demo,33b07a9c5f324375,log-trace-service-a-demo,,] 88952 --- [nio-8082-exec-3] c.p.l.trace.servcie.b.demo.TestService   : test1 方法執行 33b07a9c5f324375

這樣可以在第三方日誌平台按照一個id進行查詢了。

ELK 通過 33b07a9c5f324375 id 查詢出相關的所有鏈路調用。

配置輸出格式

目前支持以上參數:

X-B3-ParentName 上游服務名稱
X-B3-TraceId 為一個請求分配的ID號,用來標識一條請求鏈路。

通過 application.properties 進行配置。

spring.trace.log.format=X-B3-TraceId,X-B3-ParentName


`spring.trace.log.format` 配置參數順序將影響日誌輸出格式。

不配置將按照默認格式輸出。

日誌輸出如下:

2019-11-14 14:27:37.434 DEBUG [33b07a9c5f324375,this] 89996 --- [nio-8000-exec-1] c.p.l.t.s.i.zuul.TracePreZuulFilter      : zuul traceid 33b07a9c5f324375

總結

目前實現了日誌連貫的功能,後續將支持定製輸出 比如按照登陸人員id進行輸出,方便追蹤用戶行為。
框架方便後續支持 Dubbo 等。

示例代碼地址:

作者GitHub:
歡迎關注

qq交流群: 812321371 微信交流群: MercyYao

微信公眾號:

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!!

網頁設計一頭霧水??該從何著手呢? 找到專業技術的網頁設計公司,幫您輕鬆架站!

※想知道最厲害的台北網頁設計公司推薦台中網頁設計公司推薦專業設計師”嚨底家”!!