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构建你的微服务体系

    温馨提示

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

    戳我留言

  • 相关阅读:
    【总结】数组去重的3种方式
    【原】运动版的轮播图,有左右按钮和单独分页,原生JS版
    【巩固】JS中的封闭空间
    IIS 配置.svc的MIME映射
    c# 线程定时器 System.Threading.Timer 转载
    QTcreator快捷操作,转载
    C#中的钩子说明
    anaconda更新库命令
    Chart控件,chart、Series、ChartArea曲线图绘制的重要属性介绍
    c# chart控件柱状图,改变柱子宽度
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13295936.html
Copyright © 2011-2022 走看看