自学内容网 自学内容网

JMeter与大模型融合应用之JMeter日志自动检测错误并机器人发送钉钉信息

JMeter与大模型融合应用之JMeter日志自动检测错误并机器人发送钉钉信息

业务框架

我们需要实现的基本业务框架如下
在这里插入图片描述
需求描述
我们目前要在JMeter上实现如下功能:
在这里插入图片描述
特性1:定时任务自动轮巡检测jmeter.log日志中错在ERROR的报错信息
特性2:针对ERROR报错信息自动进行捕获,并且把错误信息发送给后端大模型
特性3:大模型针对问题进行分析,并且给出问题原因和解决方案
特性4:问题原因和解决方案显示在jmeter的日志
特性5:问题原因和解决方案同时通过DingTalk机器人同步

业务实现

jmeter.log日志读取

第一步:首先我们需要读取jmeter.log日志的内容,这样才能够获取我们的日志信息,我们可以利用JMeter自带的JMeterUtils.getJMeterHome()方法后去对应jmeter.log的日志路径。
第二步:编写我们的日志读取方法,我们这里以获取jmeter最新一个错误为例

public static String readLastErrors(){
   
        List<String> errors = new ArrayList<>();
        try (BufferedReader br = new BufferedReader(new FileReader(JMeterUtils.getJMeterHome() + "\\bin\\jmeter.log"))) {
   
            // 读取文件中的所有行
            List<String> lines = new ArrayList<>();
            String line;
            while ((line = br.readLine()) != null) {
   
                lines.add(line);
            }

            // 获取最后错误信息
            int numLines = lines.size();
            for (int i = 0; i < numLines; i++) {
   
                String currentLine = lines.get(i);
                if(currentLine.length() < 24)
                    continue;
                currentLine = currentLine.substring(24);
                boolean errorLine = isErrorLine(currentLine);
                if (errorLine) {
   
                    errors.add(currentLine);
                }
            }
        } catch (IOException e) {
   
            e.printStackTrace();
        }
        if (errors.isEmpty()){
   
            return "";
        }else{
   
            return errors.get(errors.size()-1);
        }
    }

第二步:判断每一行是否有报错信息

 public static boolean isErrorLine(String line) {
   
        // 根据您的日志格式,您可能需要自定义此方法以判断某行是否是错误信息。
        // 示例中,只检查包含"ERROR"关键字的行。
        line = line.substring(0,5);
        if (line.equals("ERROR"))
        {
   
            return true;
        }else{
   
            return false;
        }
    }

第三步:当判断有报错信息时候,组装提示词,后续提给大模型

public String prompt(String error){
        String prompt = String.format("你是一个资深的java开发工程师,你在java错误问题定位非常出色。当前有如下错误信息内容:%s,请你根据你的专业知识输出符合如下格式内容。问题原因:输出问题原因解决方案:输出解决方案如下【】中的内容为参考例子:【问题原因:1.参数配置错误2.参数超过限制。解决方案:1.输入正确的参数,如a 2.输入正确范围内的参数,如不能输入b】",error.replaceAll("[\\x00-\\x1F\\x7F-\\x9F]", ""));
        return prompt;
    }

这样我们就编写完成日志读取和组装提示词相关代码,完整代码如下

import org.apache.jmeter.util.JMeterUtils;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class ReadJMeterLog {
    public static String readLastErrors(){
        List<String> errors = new ArrayList<>();
        try (BufferedReader br = new BufferedReader(new FileReader(JMeterUtils.getJMeterHome() + "\\bin\\jmeter.log"))) {
//        try (BufferedReader br = new BufferedReader(new FileReader("D:\\JMeterOriginCode\\apache-jmeter-5.1\\jmeter.log"))) {
            // 读取文件中的所有行
            List<String> lines = new ArrayList<>();
            String line;
            while ((line = br.readLine()) != null) {
                lines.add(line);
            }

            // 获取最后错误信息
            int numLines = lines.size();
            for (int i = 0; i < numLines; i++) {
                String currentLine = lines.get(i);
                if(currentLine.length() < 24)
             

原文地址:https://blog.csdn.net/u012151594/article/details/142551965

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!