Skywalking实现对RuoYi-Cloud登录认证功能的链路追踪

一、环境准备

①去skywalking官网下载Skywalking APM(version≥9.0.0)以及Java Agent;

Downloads | Apache SkyWalking

②将下载好的agent压缩包解压过后放置apache-skywalking-apm目录下;

③打开webapp目录下的yml配置文件,并将启动端口改为8081(默认8080),防止端口冲突;

④打开bin目录下startup.bat,启动服务;

若出现以上两个页面则代表skywalking启动成功,浏览器输入localhost:8081,查看Web端页面;

二、链路追踪

①于若依官网下载完ruoyi-cloud源码后,用idea打开;

RuoYi-Cloud: 🎉 基于Spring Boot、Spring Cloud & Alibaba的分布式微服务架构权限管理系统,同时提供了 Vue3 的版本

② 同时准备Nacos,在config目录下的application文件下配置Nacos持久化,具体参考

环境部署 | RuoYi

③idea各个服务下添加JVM配置指令;

修改选项下面选择添加VM选项,并在框内添加如下指令;

-javaagent:F:\Desktop\apache-skywalking-apm-9.0.0\apache-skywalking-apm-bin\apache-skywalking-java-agent-9.0\skywalking-agent\skywalking-agent.jar
-Dskywalking.agent.service_name=ruoyi-auth
-Dskywalking.collector.backend_service=localhost:11800

(第一行为本地skywalking-agent.jar包的文件目录位置;第二行为服务名称,与你所启动的服务名一致;) 

④启动服务,并查看localhost:8081查看效果;

若是如上页面,可以查看到各个服务的状态、各个之间的拓扑图关系以及trace,即代表参数配置成功,成功实现链路追踪!

三、ruoyi登录认证源码分析

若依登录界面实现登录功能,发现调用了login,getinfo,getRouters三个接口。

可以在trace处查看,刚刚调用了的接口trace分布图,这边采用了树结构,方便更简洁明了的查看各个模块之间的关系;首先查看上半分支,点击对应的节点,可以查看具体的接口调用method以及端点;

①根据以上信息大致可以推断出,Ruoyi-Auth 服务向某个目标地址 ;

http://192.168.159.1:9201/user/info/admin 发起了一个成功的 GET 请求,而且没有出现错误。这可能是 Ruoyi-Auth 服务调用了其他服务的 /user/info/{username} 端点。

②这个操作的成功执行表明 Ruoyi-Auth 服务成功从 Redis 缓存中读取了数据而没有出现错误,以提高性能和减少对数据库的请求压力。

 ③记录了 Ruoyi-System 服务成功接收并处理了一个 HTTP GET 请求,请求的端点是 /user/info/{username},并且返回状态码为 200 表示请求成功。

 

④Ruoyi-System 服务中的一个操作的信息。操作的端点指示它涉及到 AlibabaDruid 组件中的数据库连接获取操作(getConnection) 

⑤ Ruoyi-System 服务中的一个操作,该操作使用了 mysql-connector-java 组件与本地 MySQL 数据库(Peer: localhost:3306)进行通信。操作类型是 "Exit",表示 Ruoyi-System 服务向数据库发出了查询请求。数据库查询的语句用于获取用户信息、角色信息和部门信息,以及相关的联接条件。操作没有出现错误(error: false)。

⑥Ruoyi-System 服务中的一个操作,该操作涉及 AlibabaDruid 组件中的数据库连接关闭操作(close)。操作是本地操作(Local),没有指定对等端(No Peer),并且没有出现错误(error: false)。这通常表示在操作完成后成功关闭了数据库连接。 

 ⑦Ruoyi-Auth 服务中的一个操作,该操作使用 Lettuce 组件与本地 Redis 缓存服务(Peer: localhost:6379)进行通信。操作类型是 "Exit",表示 Ruoyi-Auth 服务向 Redis 缓存发出了读取请求。操作没有出现错误(error: false)。

 ⑧Ruoyi-Auth 服务向 Redis 缓存发出了 EXISTS 命令,用于检查某个键是否存在。操作没有出现错误(error: false)。

⑨这个操作使用了 Feign 组件向地址为 http://192.168.159.1:9201/logininfor 发起了一个成功的 POST 请求,并且没有出现错误。 Feign 组件通常用于进行远程服务调用,这个操作可能是对某个服务的登录信息进行提交的请求,并且请求成功返回了状态码 200。 

⑩这个标记描述了 Ruoyi-System 服务中的一个操作,该操作是一个入站操作(Entry),表示 Ruoyi-System 服务接收了一个 HTTP POST 请求。操作的端点是 POST:/logininfor,使用了 SpringMVC 组件来处理请求。没有指定对等端(No Peer),并且操作没有出现错误(error: false)。请求的 URL 是 http://192.168.159.1:9201/logininfor,HTTP 请求方法是 POST,而且请求成功返回了状态码 200,通常表示请求成功。这个操作用于处理用户登录信息的提交。

 其中11/12/13操作与④⑤⑥一致,都是连接数据库,从数据库读取数据,关闭数据库的过程;

14.这个操作与 Redis 缓存相关,使用了 SETEX 命令来将数据写入缓存。SETEX 通常用于在一定时间后使缓存中的数据过期。这个操作成功执行并且没有出现错误,即成功将数据写入了缓存。

四、总结

  1. 用户发起登录请求: 用户使用 POST 请求向 Ruoyi-Auth 服务的 /login 端点发送登录请求。

  2. Ruoyi-Auth 处理登录请求: Ruoyi-Auth 服务使用 SpringMVC 组件处理接收到的登录请求。

  3. 认证逻辑: Ruoyi-Auth 服务处理登录请求,可能包括用户身份验证、权限检查和会话管理等。

  4. 数据库查询: Ruoyi-Auth 服务通过数据库查询操作(Mysql/JDBC/PreparedStatement/execute)从名为 "ry-cloud" 的 MySQL 数据库中检索用户信息、角色信息和部门信息。

  5. 缓存操作: Ruoyi-Auth 服务使用 Lettuce 组件与本地 Redis 缓存服务进行缓存操作,包括 GET、EXISTS 和 SETEX 等。

  6. 返回登录结果: Ruoyi-Auth 服务返回登录结果,通常是将用户重定向到其他页面或返回认证令牌等信息。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值