欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

基于SkyWalking的分布式跟踪系统 - 微服务监控

程序员文章站 2022-05-31 21:22:36
上一篇文章我们搭建了基于SkyWalking分布式跟踪环境,今天聊聊使用SkyWalking监控我们的微服务(DUBBO) 服务案例 假设你有个订单微服务,包含以下组件 MySQL数据库分表分库(2台) 生产者(2台) dubbo provider 消费者 dubbo consumer 网络拓扑图如 ......

上一篇文章我们搭建了基于skywalking分布式跟踪环境,今天聊聊使用skywalking监控我们的微服务(dubbo)

服务案例

假设你有个订单微服务,包含以下组件

  • mysql数据库分表分库(2台)
  • 生产者(2台) dubbo-provider
  • 消费者 dubbo-consumer

网络拓扑图如下
基于SkyWalking的分布式跟踪系统 - 微服务监控

生产者的关键代码

@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:\讯飞开发工具\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:11800

  • 模拟请求
    在浏览器访问http://localhost:9090/order/1184489161562816511,多次调用使负载生效;修改订单id参数,让调用覆盖不同的数据库

  • 效果查看
    访问skywalking监控地址http://192.168.136.129:8080/查看监控效果
    基于SkyWalking的分布式跟踪系统 - 微服务监控
    仪表盘
    基于SkyWalking的分布式跟踪系统 - 微服务监控
    网络拓扑图
    基于SkyWalking的分布式跟踪系统 - 微服务监控
    错误日志
    基于SkyWalking的分布式跟踪系统 - 微服务监控
    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

  • 启动应用,观察控制台
    基于SkyWalking的分布式跟踪系统 - 微服务监控

    刚启动时候获取不到traceid,所以tid显示为n/a,启动完成后调用请求再次观察控制台,发现所有链路上的日志都打上了traceid。
    基于SkyWalking的分布式跟踪系统 - 微服务监控

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

相关文章:
基于skywalking的分布式跟踪系统 - 环境搭建

springboot2.1.9+dubbo2.7.3+nacos1.1.4构建你的微服务体系

请关注个人公众号:java日知录

基于SkyWalking的分布式跟踪系统 - 微服务监控