当前位置:网站首页>SkyWalking自定义链路追踪、性能剖析
SkyWalking自定义链路追踪、性能剖析
2022-07-21 09:07:00 【胡尚】
自定义链路追踪
如果想要业务方法也实现链路追踪,就可以使用自定义链路追踪。
如下图所示,我启动了gateway+order+stack三个服务
拓补图
追踪菜单
从上图中的追踪菜单的右边可以看到,这里仅仅显示了controller层的请求路径url,没有显示service层的业务方法。
第一步,在微服务中导入依赖
<!-- SkyWalking工具类 因为我们本地启动的SkyWalking服务是8.5版本的,所以这里的依赖版本也最好依赖-->
<dependency>
<groupId>org.apache.skywalking</groupId>
<artifactId>apm-toolkit-trace</artifactId>
<version>8.5.0</version>
</dependency>
第二步,将@Trace
注解加入到Service层的方法上
@Service
@Slf4j
public class OrderServiceImpl implements OrderService {
@Autowired
private OrderMapper orderMapper;
@Autowired
private StockFeignService stockFeignService;
@Override
@GlobalTransactional
@Trace
public void addOrder(Order order) {
// 创建订单
orderMapper.addOrder(order);
// 扣减库存
stockFeignService.deduction(order.getProductId());
log.info("远程服务调用扣减库存");
}
}
接下来重启服务,调用接口,再查看SkyWalking的链路追踪
如果想在SkyWalking的追踪菜单中看这个方法的入参与出差的话,就可以使用@Tag
或者@Tags
注解
@Override
@Trace
@Tag(key = "result", value = "returnedObj")
public List<Order> getAll() {
return orderMapper.getAll();
}
@Override
@Trace
@Tags({
@Tag(key = "param", value = "arg[0]"),
@Tag(key = "result", value = "returnedObj")})
public Order get(Integer id) {
return orderMapper.getById(id);
}
注意:
- 如果要用@tag或@tags注解,前提是必须要使用@Trace注解,不然仅仅给业务方法加@Tag注解的话,SkyWalking也不会显示
- @Tag注解中key我们可以自定义,而value的写法就固定了,如果要查看返回值就只能写returnedObj,如果要查看请求参数就只能用arg,下标代表第几个请求参数
- 返回值的对象,注意要重写toString()方法,不然在SkyWalking的界面中显示的只是一个对象的内存地址
接下来我们在浏览器中输入http://localhost:8080/order_server/order/get/14
进行测试
性能剖析
性能剖析菜单下,刚开始是没有内容的
性能剖析这个菜单的作用就是:假如我们请求一个接口,发现响应很慢,我们就可以使用性能剖析才找出到底是哪一句代码导致的,进而我们再去解决慢响应的问题。
第一步,我们先在接口中加一个睡眠代码
@RestController
@RequestMapping("/order")
public class OrderController {
@Autowired
private OrderService orderService;
@RequestMapping("/get/{id}")
public Order getById(@PathVariable("id") Integer id) throws InterruptedException {
// 睡眠2秒钟,然后再去根据id查询订单数据
Thread.sleep(2000);
return orderService.get(id);
}
}
第二步,我们需要新增任务,来监控某一个接口
第三步,请求几次这个接口,点击分析按钮后,可以查看右下方的信息
结果如下
边栏推荐
- PageHelper分页插件学习
- M using Verilog to develop GMSK modulator based on FPGA under ISE platform
- The Linux server installed the graphical interface, but failed to display the initialization graphical interface when installing the database
- Number game: n people count off, those who report a multiple of 3 leave, and the rest continue
- 数据库生成Html文档
- BGP—— 边界网关协议
- Local storage software system of local area network for data acquisition of electric meters in Enterprises
- C getting started series (XXVI) -- assemblies and namespaces
- Rigid body of unity physical component
- Judgment of empty string in Oracle
猜你喜欢
过时 2 天后,微软放弃“封禁”商业开源!
浏览器本地存储webStroage
Codeforces Round #808 (Div. 2) - A,B,C
Rigid body of unity physical component
Strict location dependent optimization of dynamic recursion
A thorough understanding of bio, NiO, AIO
Huirong technology and jiangbolong work together to improve the competitiveness of mobile phone storage
一文让你掌握22个神经网络训练技巧
import torch_geometric.nn报错/lib64/libm.so.6: version `GLIBC_2.27‘ not found
风控系统,Flink+Clickhouse实现!
随机推荐
次小生成树
Codeforces Round #809 (Div. 2) - C, D1
数据库生成Html文档
使用修改为jmp指令的方式hook 32位函数
m在ISE平台下使用verilog开发基于FPGA的GMSK调制器
m基于中继协助的认知无线电频谱切换机制的matlab仿真分析
URLEncode. The difference between encode (string, string) and new string (byte[], string)
为Kubernetes选择合适的容器运行时
NepCTF2022 WP
m在simulink进行DS-CDMA建模,然后通过MATLAB调用simulink模型进行误码率仿真
LeetCode 146:LRU 缓存
Dynamic programming multiple knapsack celebration (one dimension)
Codeforces Round #809 (Div. 2) - C, D1
Knapsack problem of two-dimensional cost (01 knapsack)
Jugement des chaînes vides dans Oracle
最近的三个数之和
The sum of the last three numbers
clip:learning transferable visual models from natural language supervision
Dynamic programming multiple knapsack one dimension
马斯克把大脑上传云端?周鸿祎:还得要用人脑安全卫士杀个毒