基於SkyWalking的分散式跟蹤系統 – 微服務監控
- 2019 年 11 月 7 日
- 筆記
上一篇文章我們搭建了基於SkyWalking分散式跟蹤環境,今天聊聊使用SkyWalking監控我們的微服務(DUBBO)
服務案例
假設你有個訂單微服務,包含以下組件
- MySQL資料庫分表分庫(2台)
- 生產者(2台) dubbo-provider
- 消費者 dubbo-consumer
網路拓撲圖如下
生產者的關鍵程式碼
@Service public class OrderServiceImpl implements OrderService { @Autowired protected OrderMapper orderMapper; @Override public OrderVO getById(long id) { OrderVO orderVO = new OrderVO(); Order order = orderMapper.selectById(id); BeanUtils.copyProperties(order,orderVO); return orderVO; } }
消費者的關鍵程式碼
@RestController public class OrderController { @Reference(retries = 0) private OrderService orderService; @GetMapping("/order/{id}") public OrderVO getOrder(@PathVariable long id){ return orderService.getById(id); } }
監控啟動
-
使用
javaagent
啟動生產者-javaagent:E:訊飛開發工具skywalkingagentskywalking-agent.jar -Dskywalking.agent.service_name=dubbo-provider -Dskywalking.collector.backend_service=192.168.136.129:11800
-javaagent:E:訊飛開發工具skywalkingagentskywalking-agent.jar -Dskywalking.agent.service_name=dubbo-provider2 -Dskywalking.collector.backend_service=192.168.136.129:11800
-
啟動消費者
-javaagent:E:訊飛開發工具skywalkingagentskywalking-agent.jar -Dskywalking.agent.service_name=dubbo-consumer -Dskywalking.collector.backend_service=192.168.136.129:11800
-
模擬請求
在瀏覽器訪問http://localhost:9090/order/1184489161562816511
,多次調用使負載生效;修改訂單id參數,讓調用覆蓋不同的資料庫 -
效果查看
訪問skywalking監控地址http://192.168.136.129:8080/
查看監控效果
儀錶盤
網路拓撲圖
錯誤日誌
Trace查詢
日誌集成
這部分我們先看下調用鏈的原理:
- 請求到來生成一個全局TraceID,通過TraceID可以串聯起整個調用鏈,一個TraceID代表一次請求。
- 除了TraceID外,還需要SpanID用於記錄調用父子關係。每個服務會記錄下Parent id和Span id,通過他們可以組織一次完整調用鏈的父子關係。
- 要查看某次完整的調用則只要根據TraceID查出所有調用記錄,然後通過Parent id和Span id組織起整個調用父子關係。
正是由於TraceID如此重要,所以我們希望這個調用鏈的TraceID能輸出在日誌文件中,一旦觀察到有異常調用,我們在日誌分析平台直接搜索TraceID即可將關聯的日誌全部檢索出來,大大提高我們解決問題的效率。
集成過程(log4j2)
-
引入日誌包log4j2
“`
org.springframework.boot
spring-boot-starter
org.springframework.boot
spring-boot-starter-logging
org.springframework.boot
spring-boot-starter-log4j2
“` -
引入SW工具包
<!--SW trace 跟蹤--> <dependency> <groupId>org.apache.skywalking</groupId> <artifactId>apm-toolkit-log4j-2.x</artifactId> <version>6.4.0</version> </dependency>
-
修改日誌顯示格式 log4j2.xml
%d [%traceId] %-5p %c{1}:%L - %m%n
-
啟動應用,觀察控制台
剛啟動時候獲取不到TraceID,所以TID顯示為N/A,啟動完成後調用請求再次觀察控制台,發現所有鏈路上的日誌都打上了TraceID。
很簡單的幾步就讓你的微服務加上了調用鏈監控,你還不趕緊試試?
相關文章:
基於SkyWalking的分散式跟蹤系統 – 環境搭建
SpringBoot2.1.9+dubbo2.7.3+Nacos1.1.4構建你的微服務體系
請關注個人公眾號:JAVA日知錄