当前位置: 首页 > news >正文

jmeter采集ELK平台海量业务日志( 采用Scroll)

        由于性能测试需要,需采集某业务系统海量日志(百万以上)来使用。但Elasticsearch的结果分页size单次最大为10000(运维同事为保证ES安全)。为了能够快速采集ELK平台业务日志,可以使用以下2种方式采集:

1)结果分页方式:

        通过使用 from 和 size 参数来完成。 from 参数定义了您要提取的第一个结果的偏移量。 size 参数允许您配置要返回的最大匹配数。虽然 from 和 size 可以设置为请求参数,但它们也可以在搜索正文中设置。from 默认值为 0,size 默认为 10。

注意 from + size 不能超过 index.max_result_window 索引设置,默认为 10,000

2)滚动方式(Scroll,类似于游标):

        可以用于从单个搜索请求中检索大量结果(甚至是所有结果),与在传统数据库上使用游标的方式大致相同。滚动不是用于实时用户请求,而是用于处理大量数据,例如,以便将一个索引的内容重新索引到具有不同配置的新索引中。

综合考虑,滚动方式对于采集数据更方便实用,且不用关注from的值及不受size 10000的限制。

主流程图:

ELK日志平台业务日志:

以下为使用 jmeter 工具的详细实例:

Jmeter脚本全貌:

下面开始详细分段说明:

  1. BeanShell PreProcessor前置处理器。用来获取起止时间戳。如下图:

BeanShell 代码

import java.util.*;

long current = System.currentTimeMillis();//当前时间毫秒数
long todaySatartMillis = current / (1000 * 3600 * 24) * (1000 * 3600 * 24) - TimeZone.getDefault().getRawOffset();//今天零点零分零秒的毫秒数
long before = todaySatartMillis + 9 * 60 * 60 * 1000;
long end = before + 3 * 60 * 60 * 1000;
String startTime = Long.toString((before));
String endTime = Long.toString((end));
vars.put("start",startTime);
vars.put("end",endTime);
log.info("开始时间:"+startTime+", 结束时间:"+endTime);

2. 线程组

1)线程组下 HTTP请求插件中参数设置(非常重要)

如下图所示

查询条件信息

_sourcethrift.params
qthrift.Uri:"/keyWordsSearchService/1.0.0/autoSuggest" AND @timestamp:[${start} TO ${end}]
size1000
scroll1m

2)JSON提取器。

 用来按条件获取HTTP请求后返回结果中_scroll_id字段的值,因为下次请求的入参需要_scroll_id字段的值。如下图。

3)使用迭代器循环调用日志采集http请求插件。

http请求插件下,需要创建2个JSON 提取器,如下图所示:

JSON提取器一

JSON提取器二

获取 json中 htis节点值。

4)迭代器下创建BeanShell Sampler。用来对返回结果值(hits节点)加工处理后,存入指定目录下文件。

Beanshell 代码如下:

import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.JSONArray;
import org.apache.commons.lang.StringUtils;
import java.io.*;
import java.io.File;/*** 写入文件
*/
public class WriteFile{public  void  writeFile(String str, File fileName){if((str!=null || !str.trim().equals("")) && fileName!=null ) {try {FileOutputStream fos = new FileOutputStream(fileName,true);Writer w = new OutputStreamWriter(fos,"UTF-8");try {str = str.replaceAll("%(?![0-9a-fA-F]{2})", "%25");str = str.replaceAll("\\+", "%2B");w.write(java.net.URLDecoder.decode(str, "UTF-8"));w.flush();w.close();fos.close();} catch (IOException e) {e.printStackTrace();}} catch (FileNotFoundException e) {e.printStackTrace();} catch (UnsupportedEncodingException e) {e.printStackTrace();}}}
}String strDocs = vars.get("returnJson");
String cityIds = vars.get("cityId");
//System.out.println(strDocs);
JSONObject jsonObject = JSONObject.parseObject(strDocs);
JSONArray hitsArray = jsonObject.getJSONArray("hits");//文件路径及文件名称
String filePath = "D:/FullLinkData/nlp/autoSuggest.csv";File fileName = new File(filePath);
StringBuffer sb = new StringBuffer();
WriteFile wr = new WriteFile();String request = null;
String requestStr = null;
for(int i = 0;i< hitsArray.size();i++){request = hitsArray.getJSONObject(i).getJSONObject("_source").getString("thrift.params");requestStr = org.apache.commons.lang.StringUtils.strip(request, "[]");//去除[]*/JSONObject jo = JSONObject.parseObject(requestStr);jo.put("version",2);if(jo!=null){sb.append(jo.toJSONString()+"\r\n");//post请求 换行}
}
wr.writeFile(sb.toString(),fileName);//写入文件

最后,运行后,生成文件如下,采集速度杠杠滴!(敏感信息已处理)

参考:Scroll - Elasticsearch 高手之路

手工整理不易,如转载请注明出处~~ 

http://www.lryc.cn/news/168075.html

相关文章:

  • React 全栈体系(五)
  • 动态规划——状态机模型
  • 合宙Air724UG LuatOS-Air LVGL API控件-图片(Gif)
  • 【C语言】指针和数组笔试题解析(2)
  • 3.3 DLL注入:突破会话0强力注入
  • C语言 —— 初步入门知识(内存、指针、结构体)
  • PHP8中字符串与数组的转换-PHP8知识详解
  • Wordtune:文本编辑工具
  • notifyIcon动态图标
  • 2023年墨西哥 SP/BMV IPC 研究报告
  • JWT生成与解析/JWT令牌前端存储
  • [交互]前端展示服务端获取的图片
  • LeetCode2.两数相加
  • Linux编译过程与交叉编译
  • MediaPipe+OpenCV 实现实时手势识别(附Python源码)
  • 为什么选择C/C++内存检测工具AddressSanitizer?如何使用AddressSanitizer?
  • 获取vue当前页面url问号后面的参数
  • Linux编程之线程池的设计与实现
  • stm32---定时器输入捕获
  • 打造生产级Llama大模型服务
  • Acwing 828. 模拟栈
  • 初识Docker
  • HTTPS Tomcat Servlet 博客系统 软件测试的概念 Linux
  • ​云南财经大学《乡村振兴战略下传统村落文化旅游设计》许少辉八一著作
  • shopee——排序模型AUC还能涨吗?
  • 长城网络靶场第三题
  • Java“牵手”虾皮商品列表页数据采集+虾皮商品价格数据排序,虾皮API接口申请指南
  • Pyspark综合案例(pyspark安装和java运行环境配置)
  • 虚拟机突然无法访问外部网络的现象集合
  • 国庆中秋特辑(一)浪漫祝福方式 用循环神经网络(RNN)或长短时记忆网络(LSTM)生成祝福诗词