上一篇文章我們搭建了基于SkyWalking分布式跟蹤環(huán)境,今天聊聊使用SkyWalking監(jiān)控我們的微服務(DUBBO)
服務案例
假設你有個訂單微服務娄猫,包含以下組件
- MySQL數(shù)據(jù)庫分表分庫(2臺)
- 生產(chǎn)者(2臺) dubbo-provider
- 消費者 dubbo-consumer
網(wǎng)絡拓撲圖如下
生產(chǎn)者的關鍵代碼
@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);
}
}
監(jiān)控啟動
-
使用
javaagent
啟動生產(chǎn)者-javaagent:E:\訊飛開發(fā)工具\skywalking\agent\skywalking-agent.jar -Dskywalking.agent.service_name=dubbo-provider -Dskywalking.collector.backend_service=192.168.136.129:11800
-javaagent:E:\訊飛開發(fā)工具\skywalking\agent\skywalking-agent.jar -Dskywalking.agent.service_name=dubbo-provider2 -Dskywalking.collector.backend_service=192.168.136.129:11800
啟動消費者
-javaagent:E:\訊飛開發(fā)工具\skywalking\agent\skywalking-agent.jar -Dskywalking.agent.service_name=dubbo-consumer -Dskywalking.collector.backend_service=192.168.136.129:11800
模擬請求
在瀏覽器訪問http://localhost:9090/order/1184489161562816511
,多次調用使負載生效;修改訂單id參數(shù)翘狱,讓調用覆蓋不同的數(shù)據(jù)庫-
效果查看
訪問skywalking監(jiān)控地址http://192.168.136.129:8080/
查看監(jiān)控效果
image
儀表盤
image
網(wǎng)絡拓撲圖
image
錯誤日志
image
Trace查詢
日志集成
這部分我們先看下調用鏈的原理:
- 請求到來生成一個全局TraceID坯约,通過TraceID可以串聯(lián)起整個調用鏈熊咽,一個TraceID代表一次請求。
- 除了TraceID外闹丐,還需要SpanID用于記錄調用父子關系横殴。每個服務會記錄下Parent id和Span id,通過他們可以組織一次完整調用鏈的父子關系卿拴。
- 要查看某次完整的調用則只要根據(jù)TraceID查出所有調用記錄衫仑,然后通過Parent id和Span id組織起整個調用父子關系。
正是由于TraceID如此重要堕花,所以我們希望這個調用鏈的TraceID能輸出在日志文件中文狱,一旦觀察到有異常調用,我們在日志分析平臺直接搜索TraceID即可將關聯(lián)的日志全部檢索出來航徙,大大提高我們解決問題的效率如贷。
集成過程(log4j2)
-
引入日志包log4j2
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-logging</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-log4j2</artifactId> </dependency>
-
引入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
-
啟動應用,觀察控制臺
image剛啟動時候獲取不到TraceID,所以TID顯示為N/A到踏,啟動完成后調用請求再次觀察控制臺杠袱,發(fā)現(xiàn)所有鏈路上的日志都打上了TraceID。
image
很簡單的幾步就讓你的微服務加上了調用鏈監(jiān)控窝稿,你還不趕緊試試楣富?
相關文章:
基于SkyWalking的分布式跟蹤系統(tǒng) - 環(huán)境搭建
SpringBoot2.1.9+dubbo2.7.3+Nacos1.1.4構建你的微服務體系
歡迎關注我的個人公眾號:JAVA日知錄