携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第19天,点击查看活动详情
一、SkyWalking持久化追踪数据
SkyWalking默认使用内置的H2内存数据库进行数据的,如果服务重启,数据就会丢失这样历史追踪的数据就无法查看了,因此需要将H2数据库改为mysql数据库,将数据持久化,这样就不用担心服务重启,而且后期排查问题的时候也有数据可以查询。并且如果SkyWalking数据存储在内存中,如果SkyWalking长时间运行未重启,就会占用大量内存,影响系统整体性能。
1-1、使用mysql持久化
打开配置文件,修改H2为mysql
在storage:selector这个地方将H2改为mysql
修改mysql配置信息
连接数据库创建swtset库,SkyWalking只需要我们创建数据库即可,不用创建表,启动SkyWalking的时候会自动帮助我们创建好。
1-2、使用mysql存储的错误处理
查看日志发现报错了,看错误可以看到确实mysql驱动如下:
这时候就需要自己拷贝一个mysql驱动,复制到opa-libs中
再次重启SkyWalking服务,并且访问接口信息,可以看到相关数据已经被收集到
查看数据库,创建了一些数据库表
再次重启SkyWalking服务,不用访问接口,界面就有相关信息,这样就证明SkyWalking已经从mysql来获取数据了。
二、自定义链路追踪
使用SkyWalking默认的链路追踪只能记录接口相关数据,比如GateWay调用order服务的/order/get。然后order服务调用数据库的信息。其中我们在业务中实现的就无法追踪,下面就来处理一下使业务代码也能实现追踪。
下面来实现一个下单服务,通过访问GateWay,调用order/add接口,然后在order/add的service业务层调用stock服务的减库存业务。
在不配置自定义链路追踪的情况下,先来看下链路都可以显示哪些信息。
通过以上信息是无法查看到业务层的追踪信息的。
2-1、引入依赖
因为调用的是GateWay调用order服务,然后order服务通过feign调用stock服务,我们就先给order服务添加下面的依赖。
<!-- SkyWalking 工具类-->
<dependency>
<groupId>org.apache.skywalking</groupId>
<artifactId>apm-toolkit-trace</artifactId>
<version>8.5.0</version>
</dependency>
2-2、@Trace将方法加入追踪链路
如果一个业务方法想在ui界面的跟踪链路上显示出来,只需要在业务方法上加上@Trace注解即可
2-3、重启服务、访问接口,查看业务代码链路追踪信息
这样就可以看到service业务端的追踪信息了。
点击上图标红的数据就可以查看业务追踪详情了,如下
2-4、在业务实现端代码加入@Tags或@Tag
通过以上操作虽然可以看到追踪的信息了,但是传入什么参数,返回什么数据还是看不到,实际上可以通过使用@Tags或者Tag来实现
@Trace
@Tags({@Tag(key = "param", value = "arg[0]"),
@Tag(key = "getById", value = "returnedObj")})
public Order selectByPrimaryKey(Integer id){
return orderMapper.selectByPrimaryKey(id);
}
@Trace
@Tag(key="",value = "returnedObj")
public List<Order> list(){
return orderMapper.selectAll();
}
如果只追踪返回值或者参数,可以用@Tag即可
使用@Tag时,当value="returnedObj"时代表追踪返回值;当value="arg[0]"时代表追踪传入的第一个参数。
使用@Tags时,里面就可以通过设置@Tag来设置参数和返回值。
2-5、再次重启服务,查看追踪数据。
虽然追踪到数据了,但是返回值是对象的内存地址
这是因为Order没有重写toString方法,我们重写toString方法
重启服务再次查看
这样就可以看到server业务端的追踪信息了。