【JAVA】SpringBoot + skywalking 将接口的入参、出参、异常等信息上报到skywalking 链路追踪服务器上
创始人
2025-01-17 05:33:14
0

【JAVA】SpringBoot + skywalking 将接口的入参、出参、异常等信息上报到skywalking 链路追踪服务器上

1.下载SkyWalking APM

https://skywalking.apache.org/downloads/

jdk8 不支持 SkyWalking APM 9.3.0以上版本,所以这里我们下载 9.3.0版本

在这里插入图片描述

在这里插入图片描述

2.下载 Java Agent

https://skywalking.apache.org/downloads/

Java Agent 我们现在最新版本的 9.2.0

在这里插入图片描述

3.启动 SkyWalking APM 服务

3.1 windows环境

3.1.1 解压apache-skywalking-apm-9.3.0.tar.gz
3.1.2 进入解压后的bin目录,点击 startup.bat 启动SkyWalking APM服务

在这里插入图片描述

3.1.3 访问 http://127.0.0.1:8080/

如果访问出现空白页面,等待1分钟左右

在这里插入图片描述

3.2 linux环境

3.2.1 上传apache-skywalking-apm-9.3.0.tar.gz到服务器并解压
tar -zxvf apache-skywalking-apm-9.3.0.tar.gz 
3.2.2 开放端口 8080,11800,12800
firewall-cmd --zone=public --add-port=8080/tcp --permanent firewall-cmd --zone=public --add-port=11800/tcp --permanent firewall-cmd --zone=public --add-port=12800/tcp --permanent  ##  开放或者关闭,需要刷新防火墙规则 firewall-cmd --reload 
3.2.3 启动SkyWalking APM,进入解压后的bin目录
sh startup.sh 

在这里插入图片描述

3.2.4 访问 http://IP:8080/

如果访问出现空白页面,等待1分钟左右

在这里插入图片描述

4.SpringBoot项目中引入以下依赖

                              org.projectlombok             lombok             true                                                  cn.hutool             hutool-all             5.8.28                                                 org.aspectj             aspectjrt                               org.aspectj             aspectjweaver                                                  org.apache.skywalking             apm-toolkit-trace             9.1.0                                                  org.apache.skywalking             apm-toolkit-logback-1.x             9.1.0                   

4.1 resources文件夹下创建 logback-spring.xml文件

                                                                       %d{yyyy-MM-dd HH:mm:ss.SSS} [%X{tid}] [%thread] %-5level %logger{50} - %msg%n                                                                             %d{yyyy-MM-dd HH:mm:ss.SSS} [%X{tid}] [%thread] %-5level %logger{50} -%msg%n                                               ./${LOG_NAME}.log                                   ${LOG_PATH}/${LOG_NAME}.%d{yyyy-MM-dd}.log                          ${MAX_HISTORY}                                                %d{yyyy-MM-dd HH:mm:ss.SSS} [%X{tid}] [%thread] %-5level %logger{50} -%msg%n                                                                         

4.2 application.yml 文件中增加

# 日志配置 logging:   file:     # 日志生成的目录     path: ./log     # 日志文件名称     log-name: log     # 日志文件保留天数     days: 3   level:     ROOT: info     # com.xhs 包名称       com.xhs: info 

4.2 定义 接口日志切面

package com.xhs.aspect;  import cn.hutool.core.exceptions.ExceptionUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson2.JSON; import lombok.extern.slf4j.Slf4j; import org.apache.skywalking.apm.toolkit.trace.ActiveSpan; import org.apache.skywalking.apm.toolkit.trace.TraceContext; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Pointcut; import org.springframework.stereotype.Component; import org.springframework.util.StringUtils;  import javax.servlet.ServletRequest;  /**  * @desc: 接口日志切面,目的是将接口的入参、出参、异常等信息上报到SkyWalking链路追踪服务器上,以便我们进行日志分析  * @projectName: spring-boot-skywalking  * @author: xhs  * @date: 2024-06-17 017 10:24  * @version: JDK 1.8  */  @Slf4j @Aspect @Component public class ControllerLogAspect {      public static final String BIG_STR_SUB_PATTERN = "(:s*\"[^,\":]{8192,}?\")";      /**      * API的切点,拦截所有controller      */     @Pointcut("execution(public * com.xhs.controller.*.*(..))")     public void apiPointcut() {     }      /**      * 在方法执行前进行参数判断、在方法执行后记录日志      *      * @param joinPoint 入参      */     @Around("apiPointcut()")     public Object executeFaceAspect(ProceedingJoinPoint joinPoint) throws Throwable {         Object returnObj = null;         Object[] parameters = joinPoint.getArgs();         try {             returnObj = joinPoint.proceed();         } catch (Exception e) {             log.error("SkyWalking aspect catch exception {}", TraceContext.traceId(), e);             ActiveSpan.tag("异常", ExceptionUtil.getRootCauseMessage(e));             throw e;         } finally {             if (parameters != null && parameters.length > 0) {                 for (int i = 0; i < parameters.length; i++) {                     try {                         Object nowObj = parameters[i];                         if (nowObj instanceof ServletRequest) {                             continue;                         }                         ActiveSpan.tag("入参" + i, replaceLog(JSON.toJSONString(nowObj)));                     } catch (Exception ignore) {                      }                 }             }              if (returnObj != null) {                 try {                     ActiveSpan.tag("出参", replaceLog(JSON.toJSONString(returnObj)));                 } catch (Exception ignore) {                  }             }         }         return returnObj;     }      /*      * 格式化日志      *      * @param logStr 入参      * @return String      */     public static String replaceLog(String logStr) {         if (StringUtils.hasLength(logStr)) {             return logStr.replaceAll(BIG_STR_SUB_PATTERN, ":\"*\"");         }         return StrUtil.EMPTY;     } }  

4.3 创建测试接口,并添加jvm参数启动

# D:\soft-ware\skywalking-agent\skywalking-agent.jar 解压apache-skywalking-java-agent-9.2.0.tgz 后的skywalking-agent.jar jar包的地址 -javaagent:D:\soft-ware\skywalking-agent\skywalking-agent.jar # xhs1.0: skywalking 服务的 service groups 名称 # spring-boot-skywalking:service names 名称 -Dskywalking.agent.service_name=xhs1.0::spring-boot-skywalking # 127.0.0.1 skywalking apm 服务地址 -Dskywalking.collector.backend_service=127.0.0.1:11800 

linux环境下需要把 apache-skywalking-java-agent-9.2.0.tgz上传到服务器解压,然后在启动命令后面加上上面的三个参数

#!/bin/bash  # jar包名称 JAR_FILE="spring-boot-skywalking.jar" # pid 名称 PID_FILE="spring-boot-skywalking.pid" # skywalking-agent jar包地址 SKYWALKING_AGENT_URL="/root/skywalking-agent/skywalking-agent.jar" # skywalking SERVICE_NAME SKYWALKING_SERVICE_NAME="xhs1.0::spring-boot-skywalking" # skywalking SERVICE_NAME SKYWALKING_BACKEND_SERVICE="127.0.0.1:11800"  start() {     if [ -f "$PID_FILE" ]; then         echo "应用程序已在运行,PID: $(cat $PID_FILE) .........."     else         # 后台启动jar包,并将启动日志输出到log.log文件中         nohup java -javaagent:$SKYWALKING_AGENT_URL -Dskywalking.agent.service_name=$SKYWALKING_SERVICE_NAME -Dskywalking.collector.backend_service=$SKYWALKING_BACKEND_SERVICE -jar -Dloader.path=.,3rd-li $JAR_FILE >/dev/null 2>&1 &         echo $! > $PID_FILE         echo "应用程序已成功启动,PID: $(cat $PID_FILE) .........."     fi }  stop() {     if [ -f "$PID_FILE" ]; then         kill -9 $(cat $PID_FILE)         rm $PID_FILE         echo "应用程序已成功停止.........."     else         echo "应用程序未运行.........."     fi }  restart() {     echo "正在重启.........."     stop     start     echo "重启成功.........." }  case "$1" in     start)         start         ;;     stop)         stop         ;;     restart)         restart         ;;     *)         echo "使用: $0 {start|stop|restart} 命令"         exit 1         ;; esac  

4.3 访问创建的测试接口,刷新浏览器查看 SkyWalking APM 服务

在这里插入图片描述

4.3.1 SpringBoot 日志

在这里插入图片描述

4.3.2 SkyWalking APM 服务查看接口调用的情况及日志信息

在这里插入图片描述
在这里插入图片描述

5. 项目源码地址

https://gitee.com/xhs101/spring-boot-skywalking.git

相关内容

热门资讯

2分钟德州透视挂!hhpoke... 2分钟德州透视挂!hhpoker开挂教程,德州透视插件,详细教程(有挂功能)1、完成德州透视插件透视...
九分钟开辅助!wepoker辅... 九分钟开辅助!wepoker辅助软件价格(透视底牌)详细辅助程序(本来是真的有挂)1、任何wepok...
9分钟透视插件!hh poke... 9分钟透视插件!hh poker软件,hhpoker是正品吗,详细教程(有挂智能)1、hh poke...
7分钟插件辅助!wepoker... 7分钟插件辅助!wepoker买钻石有用吗(透视底牌)详细辅助插件(果然是有挂)7分钟插件辅助!we...
八分钟作弊实战!hhpoker... 八分钟作弊实战!hhpoker脚本,hhpoker辅助靠谱吗,详细教程(有挂安装)1、完成hhpok...
二分钟苹果版!wepoker有... 二分钟苹果版!wepoker有辅助器吗(透视底牌)详细辅助免费(切实真的是有挂)1、点击下载安装,插...
八分钟破解工具!德州透视hhp... 八分钟破解工具!德州透视hhpoker,hh poker辅助器先试用,详细教程(有挂插件)1、该软件...
二分钟作弊!wepoker私人... 二分钟作弊!wepoker私人局可以透视(透视底牌)详细辅助作弊器(本来真的有挂);暗藏猫腻,小编详...
五分钟外挂!德扑HHpoker... 五分钟外挂!德扑HHpoker有挂吗(透视脚本)详细辅助助手(确实真的是有挂)1、任何ai辅助神器的...
5分钟新号!wepoker透视... 5分钟新号!wepoker透视器免费(透视底牌)详细辅助外挂(确实是真的有挂)1、打开软件启动之后找...