調用鏈路的監控和統一日志的監控結合起來。比如說我在調用鏈監控上發現有一個調用訂單的服務慢了。通過pinpoint可以看到 。用戶發出來的請求,經過了網關,經過了order,經過了pagement。通過pinpoint可以知道慢, 也可以知道哪一環慢了。但是我想看一個整體的日志。這個請求從發出去,到回來,經過這四個應用,整個的一個完整的日志。我要看到在gateway上打印了什么。在Api上打了什么,在order上打了什么。在payment上打印了什么日志。我希望一個查詢能把這四個應用跟當前這一個請求相關的日志都 展示出來。然后來看一下這個請求里面到底發生了什么。

要實現這個功能關鍵的點就是這個TransactionID,這是一個無意義的字符串。這個串就是pinpoint用來把各個應用間的請求給它關聯起來的一個串,實際上這個串是在這四個應用里面不斷的傳遞的。

我們現在要做的就是在日志里面把這個Transaction打印出來。我們就可以之前用elk的方式,把它作為一個字段,傳到我們的elk里面,然后子啊kibana里面直接搜這個串,然后這個所有帶着這個TransactionId的日志都會按照時間順序展示出來。你就能看到這個請求在所有四個應用上,打出來的日志。
開始擼代碼
新建一個應用

創建一個product-api

復制orderAPi里面的pom.xml上面的部分,下面值引入starter-wenb的依賴。

創建SpringBoot的啟動類。



用restTemplate去發服務。

引入lombok

然后加上lombok的日志的對象。

return 隨便寫的一個字符串。

UserApi打印日志
在獲取用戶信息的這里,也打印一個日志

ProductAPI
給ProductAPI指定運行的配置

添加一個配置文件修改 啟動服務的端口

指定端口為8064

啟動productAPi

pinpoint的配置文件
agent里面加上productAPI

啟動測試
再啟動userAPI和ProductAPi

productAPI里面,這里要new 一個retTemplate 然后重啟productAPi

訪問product服務沒有問題

pinpoint里面。看到product里面調用了userAPI。userApi里面調用了數據庫。這樣一個鏈路已經展示出來了。
調整日志
調整日志首先要修改agent
pinpoint里面要進行修改。springboot里面用的是logback。所以搜索logback
下面這里設置為true。pinpont的agent就會自動往logback的mdc里面去加一個參數,

配置控制台上日志的格式

復制以前寫的格式

放在雙引號內

pinPoint加的參數叫做PtxId
把這段配置 復制到userAPi里面

重啟服務,productAPI和OrderAPI這兩個服務。
啟動后日志里面多了個方括號。就是我們在配置文件內配置的方括號。這些日志都系統啟動的時候內部打印出來的。並不是外部打出來的。

調用一個服務

調用服務后,方括號后內有值了。通過transactionId可以看出,最后這四行數據是同一個請求, 打印出來的。

userAPi的控制台也有同樣的trasacgtionId。這是兩個系統里面打印出來的日志。但是日志里面會有相同的編號。

這樣就可以接入ELK里面。把這一段代碼作為一個單獨的字段。提取出來 放到elk里面。在kibana里面你只要查這個串,兩個API
里面 這四行日志 都查出來。
這樣在一個請求進來以后,在不同的系統里面打印出來的日志,整個提取出來。 這里不再演示。
pinpoint里面的transactionId和日志系統就接起來了。

結束
