Skywalking数据持久化与自定义链路追踪

学习本篇文章之前首先要了解一下Sky walking的基础知识

分布式链路追踪工具Skywalking详解

一,Sky walking数据持久化

Sky walking提供了es,MySQL等数据持久化方案,默认使用h2基于内存的数据库,重启之后数据即会丢失。
在实际工作场景中,更多选择es作为sky walking的存储方案。配置如下
提前准备好es节点,在sky walking服务端的config/application.yml文件中找到storage配置项,配置elasticsearch
在这里插入图片描述
重启Sky walking即可。

二,自定义链路追踪【注解方式】

Sky walking默认的追踪粒度只到服务级别,粒度不够小。如果一个请求只在当前服务中完成,且这个请求的过程调用该服务中很多个接口。
在这里插入图片描述
他们是在同一个服务中,为了在追踪到这些同一个服务中的Service,就需要我们自定义追踪

引入依赖

        <dependency>
            <groupId>org.apache.skywalking</groupId>
            <artifactId>apm-toolkit-trace</artifactId>
            <version>8.14.0</version>
        </dependency>

编写trace接口

    @Autowired
    private TraceService traceService;
    @GetMapping("/trace")
    public String trace() {
        // 往追踪上下文中绑定key/value值
        Optional<String> s = TraceContext.putCorrelation("name", "xiaoliu");
        log.info("【自定义追踪测试】存储标签信息:{}",s.orElse(null));
        traceService.placeOrder("123");
        return "success";
    }

traceServiceImpl类的实现

    @Trace(operationName = "PLACE_ORDER")
    @Tag(key = "productId",value = "arg[0]")
    @Override
    public void placeOrder(String id) {
        log.info("准备创建订单:{}",id);
        String orderNo = this.generateOrderNo();
        log.info("生成订单编号:{}",orderNo);
        try {
            TimeUnit.MILLISECONDS.sleep(200L);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        String user = this.findByUserId(1);
        log.info("查询用户信息:{}",user);
    }

    @Override
    public void traceex() {
        this.check();
        RestTemplate restTemplate = new RestTemplate();
        String url = "http://localhost:8086/getUserById";
        String str = restTemplate.getForObject(url, String.class);
        System.out.println(str);

    }

    private void check() {
        if (1==3) {
            log.info("ok");
        }
    }

    @Trace(operationName = "FIND_USER")
    @Tags(
            {
                    @Tag(key = "userId",value = "arg[0]"),
                    @Tag(key = "user",value = "returnedObj")
            }
    )
    private String findByUserId(int i) {
        try {
            Optional<String> name = TraceContext.getCorrelation("name");
            log.info("name:{}",name.orElse("aaaa"));
            TimeUnit.SECONDS.sleep(1L);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        return "{'id':1,'name':'yj'}";
    }

    @Trace(operationName = "GEN_ORDER_NO")
    @Tag(key = "order",value = "returnedObj")
    private String generateOrderNo() {
        return System.currentTimeMillis() + "";
    }

发送请求 http://localhost:8085/trace

查看Sky walkingUI界面
在这里插入图片描述
可以监控到同一个服务的其他Service

还可以查看相关的日志信息
在这里插入图片描述

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

炸鸡叔老白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值