当前位置: 首页 > news >正文

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接口

    @Autowiredprivate 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]")@Overridepublic 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);}@Overridepublic 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

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

http://www.lryc.cn/news/343006.html

相关文章:

  • 设计模式之模板模式TemplatePattern(五)
  • 划重点!PMP报考条件、报考步骤、考试内容、适合人群
  • Java | Leetcode Java题解之第74题搜索二维矩阵
  • C#高级编程笔记-泛型
  • (超简单)SpringBoot中简单用工厂模式来实现
  • java中的条件、循环和scanner类
  • 【Qt QML】Frame组件
  • Web API之DOM
  • windows驱动开发-内核编程技术汇总(六)
  • Windows Server 2019虚拟机安装
  • 【软件工程】详细设计
  • 在K8S中,集群可以做哪些优化?
  • 【C++】从零开始认识多态
  • 为什么叫“机器学习”Machine Learning 而不是“计算机学习”——深度学习Note
  • Spring Boot集成RabbitMQ-之6大模式总结
  • 后端开发面经系列 -- 滴滴C++一面面经
  • Three.js的几何形状
  • 设计模式——单例模式(Singleton)
  • springboot3项目练习详细步骤(第二部分:文章分类模块)
  • VUE中父组件向子组件进行传值
  • alpine安装中文字体
  • JavaScript学习—JavaScript高级
  • CompletableFuture使用案例
  • 安卓使用so库
  • 【介绍下LeetCode的使用方法】
  • 重学java 30.API 1.String字符串
  • 【区块链】共识算法简介
  • Qt---day2-信号与槽
  • Python中设计注册登录代码
  • AI伦理和安全风险管理终极指南