网站首页点击中文英文链接 翻译成对应的语言 怎么做,成品网站源码免费分享,网店铺装修设计,wordpress 手机适应JMeter与大模型融合应用之JMeter日志分析服务化
引言
在当今的互联网时代,网站和应用程序的性能直接影响到用户的体验和业务的成功。为了保证系统的稳定性和高效性,性能测试成为了软件开发过程中的一个重要环节。在这其中,Apache JMeter作为一款开源的性能测试工具,凭借其…JMeter与大模型融合应用之JMeter日志分析服务化
引言
在当今的互联网时代,网站和应用程序的性能直接影响到用户的体验和业务的成功。为了保证系统的稳定性和高效性,性能测试成为了软件开发过程中的一个重要环节。在这其中,Apache JMeter作为一款开源的性能测试工具,凭借其强大的功能和灵活性,被广泛应用于各类性能测试项目中。本文将围绕JMeter日志分析服务化展开讨论。
JMeter.log日志的重要性
在JMeter进行性能测试的过程中,生成的日志文件(JMeter.log)是分析测试结果的重要依据。该日志文件记录了测试执行的详细信息,包括: 1.各种事件的时间戳 2.测试计划的开始和结束 3.错误信息和警告 4.性能指标的实时数据 通过对JMeter.log日志的分析,可以帮助测试人员和开发团队快速定位问题,优化性能。
为何服务化
大家都知道JMeter是一个本地的工具,为何我们需要服务化一个JMeter日志分析服务呢?小编这边的主要理由如下: 小编的应用场景中JMeter不仅仅是一个工具,在应用工具时候,JMeter仅仅作为一个调试的一种手段,我们跟很多外部的平台一样,由于JMeter的开源,所以很多时候我们将JMeter从工具化转向平台华,并结合现在大模型的优势,将JMeter中发现的错误日志丢给大模型进行智能分析,给出错误原因和解决方案,辅助我们性能测试工程师做更好的决策。
服务开发
本项目由于开发周期比较紧,部分代码应用不是特别规范,但是功能流程都是可以使用的,供大家参考,大家可以根据自己的实际情况进行优化
技术栈
SpringBootMavenMinIOQwen大模型hutools代码框架
我们的开发框架结构如下: 接下来,我们具体各个功能进行一一介绍。
Maven配置
首先我们整体看下我们的pom.xml引用的文件信息如下
?xml version="1.0" encoding="UTF-8"?
project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"modelVersion4.0.0/modelVersionparentgroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-parent/artifactIdversion2.4.5/versionrelativePath//parentpropertiesjava.version1.8/java.version/propertiesgroupIdllm_analysis/groupIdartifactIdcom.demo/artifactIdversion1.0-SNAPSHOT/versiondependenciesdependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependency!--Json格式消息--dependencygroupIdcom.alibaba/groupIdartifactIdfastjson/artifactIdversion1.2.76/version/dependencydependencygroupIdcn.hutool/groupIdartifactIdhutool-all/artifactIdversion5.6.3/version/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-test/artifactIdscopetest/scope/dependencydependencygroupIdio.minio/groupIdartifactIdminio/artifactIdversion8.3.9/version !-- 请使用最新版本 --/dependency!-- https://mvnrepository.com/artifact/com.squareup.okhttp3/okhttp --dependencygroupIdcom.squareup.okhttp3/groupIdartifactIdokhttp/artifactIdversion4.12.0/version/dependencydependencygroupIdio.springfox/groupIdartifactIdspringfox-swagger2/artifactIdversion2.9.2/version/dependencydependencygroupIdio.springfox/groupIdartifactIdspringfox-swagger-ui/artifactIdversion2.9.2/version/dependency!-- https://mvnrepository.com/artifact/io.jsonwebtoken/jjwt --dependencygroupIdio.jsonwebtoken/groupIdartifactIdjjwt/artifactIdversion0.9.1/version/dependency/dependenciesbuildpluginsplugingroupIdorg.springframework.boot/groupIdartifactIdspring-boot-maven-plugin/artifactId/plugin/plugins/build/projectresources
application.properties配置
这里配置比较简单,具体如下
server.port=8099logback.xml配置
日志格式配置如下
?xml version="1.0" encoding="UTF-8"?
!-- 日志级别从低到高分为TRACE DEBUG INFO WARN ERROR FATAL,如果设置为WARN,则低于WARN的信息都不会输出 --
!-- scan:当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true --
!-- scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。 --
!-- debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。 --
configuration scan="true" scanPeriod="10 seconds"!--include resource="org/springframework/boot/logging/logback/base.xml" /--contextNamelogback/contextName!-- name的值是变量的名称,value的值时变量定义的值。通过定义的值会被插入到logger上下文中。定义变量后,可以使“${}”来使用变量。 --!-- 路径名称 此处写相对路径logs,表示日志保存在工程当前路径的logs文件夹中--property name="log.path" value="logs"/!-- 彩色日志 --!-- 彩色日志依赖的渲染类 没搞定,日志貌似没彩色--conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter"/conversionRule conversionWord="wex"converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter"/conversionRule conversionWord="wEx"converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter"/!-- 彩色日志格式 --property name="CONSOLE_LOG_PATTERN"value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/!--输出到控制台--appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"!--此日志appender是为开发使用,只配置最底级别,控制台输出的日志级别是大于或等于此级别的日志信息--filter class="ch.qos.logback.classic.filter.ThresholdFilter"leveldebug/level/filterencoderPattern${CONSOLE_LOG_PATTERN}/Pattern!-- 设置字符集 --charsetUTF-8/charset/encoder/appender!--输出到文件--!-- 时间滚动输出 level为 DEBUG 日志 --appender name="DEBUG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"!-- 正在记录的日志文件的路径及文件名 --file${log.path}/log_debug.log/file!--日志文件输出格式--encoderpattern%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n/patterncharsetUTF-8/charset !-- 设置字符集 --/encoder!-- 日志记录器的滚动策略,按日期,按大小记录 --rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"!-- 日志归档 --fileNamePattern${log.path}/debug/log-debug-%d{yyyy-MM-dd}.%i.log/fileNamePatterntimeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"maxFileSize100MB/maxFileSize/timeBasedFileNamingAndTriggeringPolicy!--日志文件保留天数--maxHistory15/maxHistory/rollingPolicy!-- 此日志文件只记录debug级别的 --filter class="ch.qos.logback.classic.filter.LevelFilter"leveldebug/levelonMatchACCEPT/onMatchonMismatchDENY/onMismatch/filter/appender!-- 时间滚动输出 level为 INFO 日志 --appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"!-- 正在记录的日志文件的路径及文件名 --file${log.path}/log_info.log/file!--日志文件输出格式--encoderpattern%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n/patterncharsetUTF-8/charset/encoder!-- 日志记录器的滚动策略,按日期,按大小记录 --rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"!-- 每天日志归档路径以及格式 --fileNamePattern${log.path}/info/log-info-%d{yyyy-MM-dd}.%i.log/fileNamePatterntimeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"maxFileSize100MB/maxFileSize/timeBasedFileNamingAndTriggeringPolicy!--日志文件保留天数--maxHistory15/maxHistory/rollingPolicy!-- 此日志文件只记录info级别的 --filter class="ch.qos.logback.classic.filter.LevelFilter"levelinfo/levelonMatchACCEPT/onMatchonMismatchDENY/onMismatch/filter/appender!-- 时间滚动输出 level为 WARN 日志 --appender name="WARN_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"!-- 正在记录的日志文件的路径及文件名 --file${log.path}/log_warn.log/file!--日志文件输出格式--encoderpattern%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n/patterncharsetUTF-8/charset !-- 此处设置字符集 --/encoder!-- 日志记录器的滚动策略,按日期,按大小记录 --rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"fileNamePattern${log.path}/warn/log-warn-%d{yyyy-MM-dd}.%i.log/fileNamePatterntimeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"maxFileSize100MB/maxFileSize/timeBasedFileNamingAndTriggeringPolicy!--日志文件保留天数--maxHistory15/maxHistory/rollingPolicy!-- 此日志文件只记录warn级别的 --filter class="ch.qos.logback.classic.filter.LevelFilter"levelwarn/levelonMatchACCEPT/onMatchonMismatchDENY/onMismatch/filter/appender!-- 时间滚动输出 level为 ERROR 日志 --appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"!-- 正在记录的日志文件的路径及文件名 --file${log.path}/log_error.log/file!--日志文件输出格式--