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

ops/2024/10/22 11:06:49/

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

业务框架

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

业务实现

jmeterlog_13">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)

http://www.ppmy.cn/ops/118963.html

相关文章

使用python进行自然语言处理的示例

程序功能 分词&#xff1a;将输入句子拆分为单词。 词性标注&#xff1a;为每个单词标注其词性。 命名实体识别&#xff1a;识别命名实体&#xff08;如人名、地名、组织等&#xff09;。 这段代码展示了如何用 nltk 进行基础的 NLP 任务&#xff0c;包括分词、词性标注和命名…

DialMAT:跨模态特征提取与对抗训练的结合

目录 一、背景介绍二、技术路线2.1 DialMAT的总体架构2.2 基于矩的对抗训练&#xff08;MAT&#xff09;2.3 跨模态并行特征提取参考文献 一、背景介绍 在智能体研究领域&#xff0c;一个重要的挑战是如何让智能体有效理解人类的语言指令并在实际环境中完成任务。尤其是在复杂环…

leetcode刷题day27|贪心算法Part01(455.分发饼干、376. 摆动序列、53. 最大子序和)

前言&#xff1a; 贪心的本质选择每一阶段的局部最优&#xff0c;从而达到全局最优。 455.分发饼干 思路&#xff1a;局部最优-大饼干喂给胃口大的&#xff0c;充分利用饼干尺寸喂饱一个&#xff1b;全局最优&#xff1a;喂饱尽可能多的小孩。可以尝试使用贪心策略&#xff0…

图解C#高级教程(一):委托

什么是委托 可以认为委托是持有一个或多个方法的对象。但它与对象不同&#xff0c;因为委托可以被执行。当执行委托时&#xff0c;委托会执行它所“持有”的方法。先看一个完整的使用示例。 // See https://aka.ms/new-console-template for more informationdelegate void M…

Python与SQL Server数据库结合导出Excel并做部分修改

Python与SQL Server数据库结合导出Excel并做部分修改 需求&#xff1a;在数据库中提取需要的字段内容&#xff1b;并根据字段内容来提取与拆分数据做为新的列最后导出到Excel文件 # -*- coding: utf-8 -*- import pandas as pd import re import pymssql import timestart_ti…

GAMES101(作业8)

作业8 题目&#xff1a; 模拟绳子动画&#xff0c;包括基于物理的&#xff0c;和非物理的&#xff0c;应该修改的函数是:rope.cpp 中的void Rope::simulateEuler(... Rope::rope(...)&#xff0c;&#xff0c;void Rope::simulateVerlet(...) 代码框架&#xff1a; main:负…

UnityHub下载任意版本的Unity包

1)先打开 // 也可以采用2直接打开 2)也可以直接打开 下载存档 (unity.com) 3)关联起来UnityHub即可

雷池 WAF 如何配置才能正确获取到源 IP

经常有大哥反馈说雷池攻击日志里显示的 IP 有问题。 这里我来讲一下为什么一些情况下雷池显示的攻击 IP 会有问题。 问题说明 默认情况下&#xff0c;雷池会通过 HTTP 连接的 Socket 套接字读取客户端 IP。在雷池作为最外层网管设备的时候这没有问题&#xff0c;雷池获取到的…