专门做库存处理的网站,友情下载网站,海外推广引流,Wordpress支付时效【JAVA】SpringBoot skywalking 将接口的入参、出参、异常等信息上报到skywalking 链路追踪服务器上
1.下载SkyWalking APM
https://skywalking.apache.org/downloads/ jdk8 不支持 SkyWalking APM 9.3.0以上版本#xff0c;所以这里我们下载 9.3.0版本 2.下载 Java Agent …【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.gz3.2.2 开放端口 80801180012800
firewall-cmd --zonepublic --add-port8080/tcp --permanent
firewall-cmd --zonepublic --add-port11800/tcp --permanent
firewall-cmd --zonepublic --add-port12800/tcp --permanent## 开放或者关闭需要刷新防火墙规则
firewall-cmd --reload3.2.3 启动SkyWalking APM进入解压后的bin目录
sh startup.sh3.2.4 访问 http://IP:8080/ 如果访问出现空白页面等待1分钟左右 4.SpringBoot项目中引入以下依赖 !-- lombok ↓ --dependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactIdoptionaltrue/optional/dependency!-- lombok ↑ --!-- hutool ↓ --dependencygroupIdcn.hutool/groupIdartifactIdhutool-all/artifactIdversion5.8.28/version/dependency!-- hutool ↑ --!-- aspectjrt 切面编程 ↓ --dependencygroupIdorg.aspectj/groupIdartifactIdaspectjrt/artifactId/dependencydependencygroupIdorg.aspectj/groupIdartifactIdaspectjweaver/artifactId/dependency!-- aspectjrt 切面编程 ↑ --!-- skywalking-trace skyWalking监控相关 ↓ --dependencygroupIdorg.apache.skywalking/groupIdartifactIdapm-toolkit-trace/artifactIdversion9.1.0/version/dependency!-- skywalking-trace ↑ --!-- skywalking-logback skyWalking中的traceId记录到logback日志 ↓ --dependencygroupIdorg.apache.skywalking/groupIdartifactIdapm-toolkit-logback-1.x/artifactIdversion9.1.0/version/dependency!-- skywalking-logback ↑ --4.1 resources文件夹下创建 logback-spring.xml文件
?xml version1.0 encodingUTF-8?
configuration!-- 读取application.yml中的日志配置 --springProperty scopecontext nameLOG_PATH sourcelogging.file.path/springProperty scopecontext nameLOG_NAME sourcelogging.file.log-name/springProperty scopecontext nameMAX_HISTORY sourcelogging.file.days/!-- 定义控制台输出格式 --appender nameCONSOLE classch.qos.logback.core.ConsoleAppenderencoder classch.qos.logback.core.encoder.LayoutWrappingEncoderlayout classorg.apache.skywalking.apm.toolkit.log.logback.v1.x.mdc.TraceIdMDCPatternLogbackLayoutpattern%d{yyyy-MM-dd HH:mm:ss.SSS} [%X{tid}] [%thread] %-5level %logger{50} - %msg%n/pattern/layout/encoder/appender!--skywalking grpc 日志收集--appender nameSKYWALKING classorg.apache.skywalking.apm.toolkit.log.logback.v1.x.log.GRPCLogClientAppenderencoder classch.qos.logback.core.encoder.LayoutWrappingEncoderlayout classorg.apache.skywalking.apm.toolkit.log.logback.v1.x.mdc.TraceIdMDCPatternLogbackLayoutPattern%d{yyyy-MM-dd HH:mm:ss.SSS} [%X{tid}] [%thread] %-5level %logger{50} -%msg%n/Pattern/layout/encoder/appender!-- 定义每天生成一个日志文件并归档生成压缩包 --appender nameFILE classch.qos.logback.core.rolling.RollingFileAppenderfile./${LOG_NAME}.log/filerollingPolicy classch.qos.logback.core.rolling.TimeBasedRollingPolicy!-- 每天生成一个日志文件 --fileNamePattern${LOG_PATH}/${LOG_NAME}.%d{yyyy-MM-dd}.log/fileNamePattern!-- 最多保留指定天数的日志文件 --maxHistory${MAX_HISTORY}/maxHistory/rollingPolicyencoder classch.qos.logback.core.encoder.LayoutWrappingEncoderlayout classorg.apache.skywalking.apm.toolkit.log.logback.v1.x.mdc.TraceIdMDCPatternLogbackLayoutPattern%d{yyyy-MM-dd HH:mm:ss.SSS} [%X{tid}] [%thread] %-5level %logger{50} -%msg%n/Pattern/layout/encoder/appender!-- 日志级别设置 --root levelINFOappender-ref refCONSOLE/appender-ref refSKYWALKING/appender-ref refFILE//root
/configuration
4.2 application.yml 文件中增加
# 日志配置
logging:file:# 日志生成的目录path: ./log# 日志文件名称log-name: log# 日志文件保留天数days: 3level:ROOT: info# com.xhs 包名称 com.xhs: info4.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-skywalkingservice names 名称
-Dskywalking.agent.service_namexhs1.0::spring-boot-skywalking
# 127.0.0.1 skywalking apm 服务地址
-Dskywalking.collector.backend_service127.0.0.1:11800linux环境下需要把 apache-skywalking-java-agent-9.2.0.tgz上传到服务器解压然后在启动命令后面加上上面的三个参数 #!/bin/bash# jar包名称
JAR_FILEspring-boot-skywalking.jar
# pid 名称
PID_FILEspring-boot-skywalking.pid
# skywalking-agent jar包地址
SKYWALKING_AGENT_URL/root/skywalking-agent/skywalking-agent.jar
# skywalking SERVICE_NAME
SKYWALKING_SERVICE_NAMExhs1.0::spring-boot-skywalking
# skywalking SERVICE_NAME
SKYWALKING_BACKEND_SERVICE127.0.0.1:11800start() {if [ -f $PID_FILE ]; thenecho 应用程序已在运行,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 21 echo $! $PID_FILEecho 应用程序已成功启动,PID: $(cat $PID_FILE) ..........fi
}stop() {if [ -f $PID_FILE ]; thenkill -9 $(cat $PID_FILE)rm $PID_FILEecho 应用程序已成功停止..........elseecho 应用程序未运行..........fi
}restart() {echo 正在重启..........stopstartecho 重启成功..........
}case $1 instart)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