基於SkyWalking的分佈式跟蹤系統 - 微服務監控

上一篇文章咱們搭建了基於SkyWalking分佈式跟蹤環境,今天聊聊使用SkyWalking監控咱們的微服務(DUBBO)java

服務案例

假設你有個訂單微服務,包含如下組件spring

  • MySQL數據庫分表分庫(2臺)
  • 生產者(2臺) dubbo-provider
  • 消費者 dubbo-consumer

網絡拓撲圖以下 數據庫

image

生產者的關鍵代碼apache

@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 啓動生產者bash

    -javaagent:E:\訊飛開發工具\skywalking\agent\skywalking-agent.jar -Dskywalking.agent.service_name=dubbo-provider -Dskywalking.collector.backend_service=192.168.136.129:11800微信

    -javaagent:E:\訊飛開發工具\skywalking\agent\skywalking-agent.jar -Dskywalking.agent.service_name=dubbo-provider2 -Dskywalking.collector.backend_service=192.168.136.129:11800網絡

  • 啓動消費者
    -javaagent:E:\訊飛開發工具\skywalking\agent\skywalking-agent.jar -Dskywalking.agent.service_name=dubbo-consumer -Dskywalking.collector.backend_service=192.168.136.129:11800app

  • 模擬請求
    在瀏覽器訪問http://localhost:9090/order/1184489161562816511,屢次調用使負載生效;修改訂單id參數,讓調用覆蓋不一樣的數據庫分佈式

  • 效果查看
    訪問skywalking監控地址http://192.168.136.129:8080/查看監控效果

    image
    儀表盤
    image
    網絡拓撲圖
    image
    錯誤日誌
    image
    Trace查詢

日誌集成

這部分咱們先看下調用鏈的原理:

  • 請求到來生成一個全局TraceID,經過TraceID能夠串聯起整個調用鏈,一個TraceID表明一次請求。
  • 除了TraceID外,還須要SpanID用於記錄調用父子關係。每一個服務會記錄下Parent id和Span id,經過他們能夠組織一次完整調用鏈的父子關係。
  • 要查看某次完整的調用則只要根據TraceID查出全部調用記錄,而後經過Parent id和Span id組織起整個調用父子關係。

正是因爲TraceID如此重要,因此咱們但願這個調用鏈的TraceID能輸出在日誌文件中,一旦觀察到有異常調用,咱們在日誌分析平臺直接搜索TraceID便可將關聯的日誌所有檢索出來,大大提升咱們解決問題的效率。

集成過程(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,啓動完成後調用請求再次觀察控制檯,發現全部鏈路上的日誌都打上了TraceID。

    image

很簡單的幾步就讓你的微服務加上了調用鏈監控,你還不趕忙試試?

相關文章:
基於SkyWalking的分佈式跟蹤系統 - 環境搭建

SpringBoot2.1.9+dubbo2.7.3+Nacos1.1.4構建你的微服務體系

獲取更多內容請關注公衆號:JAVA日知錄

微信公衆號
相關文章
相關標籤/搜索