zoukankan      html  css  js  c++  java
  • 基于SkyWalking的分布式跟踪系统

    是时候

    关注

    我们一波了

    上一篇文章我们搭建了基于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

      <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>
    • 修改日志显示格式%d [%traceId] %-5p %c{1}:%L - %m%n

    • 启动应用,观察控制台

      刚启动时候获取不到TraceID,所以TID显示为N/A,启动完成后调用请求再次观察控制台,发现所有链路上的日志都打上了TraceID。

    很简单的几步就让你的微服务加上了调用链监控,你还不赶紧试试?

     相关阅读

    • 基于SkyWalking的分布式跟踪系统 - 环境搭建

    • SpringBoot2.1.9+dubbo2.7.3+Nacos1.1.4构建你的微服务体系

    温馨提示

    如果你喜欢本文,请分享到朋友圈,想要获得更多信息,请关注我。

    戳我留言

  • 相关阅读:
    CSUFT 1002 Robot Navigation
    CSUFT 1003 All Your Base
    Uva 1599 最佳路径
    Uva 10129 单词
    欧拉回路
    Uva 10305 给任务排序
    uva 816 Abbott的复仇
    Uva 1103 古代象形文字
    Uva 10118 免费糖果
    Uva 725 除法
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13295936.html
Copyright © 2011-2022 走看看