性能监控之JMeter分布式压测轻量日志解决方案

简介: 【8月更文挑战第11天】性能监控之JMeter分布式压测轻量日志解决方案

一、引言

在前文中我们已经介绍了使用JMeter非GUI模式进行压测的时候,我们可以使用[InfluxDB+Grafana]进行实时性能测试结果监控,也可以用[Tegraf+InfluxDB+Grafana]进行实现服务器性能监控。尽管Grafana看板可以显示事务执行的请求数和失败率。但是我们也想知道它失败的原因。

image.png

并不是所有的HTTP请求失败都是500引起的,有时候也可能是200,响应断言只是检查响应数据是否存在给定的字符串,如果不满足那么就是请求失败。但是这段时间我们实际的响应数据是什么?要知道在性能测试期间调试应用可是非常重要的。 我们经常使用阿里云或者物理机集群来压测,即使我们将响应数据记录在日志里面,我们也可能无法立即获取数据。我们只能等待压测结束去ssh/ftp访问主机去检查日志。我们不能像性能测试结果一样使用InfluxDB收集这些大量的非结构文本数据。因为InfluxDB作为时序数据库并不是为检索文本设计的。

其中一个简单的轻量日志解决方案就是使用ElasticSearch+FileBeats+Kibana去收集分析错误响应数据。

二、背景

1、Filebeat

Filebeat是ELK协议栈的新成员,一个轻量级开源日志文件数据搜集器,用GO语言实现。 Filebeat安装在服务器上做为代理监视日志目录或者特定的日志文件,要么将日志转发到Logstash进行解析,要么直接发送到ElasticSearch进行索引。 Filebeat文档完善,配置简单,天然支持ELK,为Apache,Nginx,System,MySQL等服务产生的日志提供默认配置,采集,分析和展示一条龙。

如下所示,Filebeat的配置简单易懂

filebeat:
spool_size: 1024                                    # 最大可以攒够 1024 条数据一起发送出去
idle_timeout: "5s"                                  # 否则每 5 秒钟也得发送一次
registry_file: "registry"                           # 文件读取位置记录文件,会放在当前工作目录下。
config_dir: "path/to/configs/contains/many/yaml"    # 如果配置过长,可以通过目录加载方式拆分配置
prospectors:                                        # 有相同配置参数的可以归类为一个 prospector
   -
       fields:
           log_source: "sample"                    # 类似logstash的 add_fields,此处的"log_source"用来标识该日志来源于哪个项目
       paths:
           - /var/log/system.log                   # 指明读取文件的位置
           - /var/log/wifi.log
       include_lines: ["^ERR", "^WARN"]            # 只发送包含这些字样的日志
       exclude_lines: ["^OK"]                      # 不发送包含这些字样的日志
   -
       document_type: "apache"                     # 定义写入ES时的 _type 值
       ignore_older: "24h"                         # 超过24小时没更新内容的文件不再监听。
       scan_frequency: "10s"                       # 每10秒钟扫描一次目录,更新通配符匹配上的文件列表
       tail_files: false                           # 是否从文件末尾开始读取
       harvester_buffer_size: 16384                # 实际读取文件时,每次读取16384字节
       backoff: "1s"                               # 每1秒检测一次文件是否有新的一行内容需要读取
       paths:
           - "/var/log/apache/*"                   # 可以使用通配符
       exclude_files: ["/var/log/apache/error.log"]
   -
       input_type: "stdin"                         # 除了 "log",还有 "stdin"
       multiline:                                  # 多行合并
           pattern: '^[[:space:]]'
           negate: false
           match: after
output.elasticsearch:
 hosts: ["127.0.0.1:9200"]                     # The elasticsearch host

Filebeat 发送的日志,会包含以下字段:

  • beat.hostname:beat运行的主机名
  • beat.name:shipper配置段设置的name,如果没设置,等于beat.hostname
  • @timestamp:读取到该行内容的时间
  • type 通过:document_type设定的内容
  • input_type:来自"log"还是"stdin"
  • source:具体的文件名全路径
  • offset:该行日志的起始偏移量
  • message:日志内容
  • fields:添加的其他固定字段都存在这个对象里面

2、Elasticsearch

Elasticsearch是一个开源的高扩展的分布式全文检索引擎,它可以近乎实时的存储、检索数据;本身扩展性很好,可以扩展到上百台服务器。Elasticsearch强在全文搜索,InfluxDB擅长时序数据,所以还是具体需求具体分析。如果需要保存日志并经常查询的,Elasticsearch比较合适,比如我们的JMeter log。如果只依赖日志做状态展示,偶尔查询,InfluxDB比较合适。

3、Kibana

Kibana 是一个开源的分析和可视化平台,旨在与 Elasticsearch 合作。Kibana 提供搜索、查看和与存储在 Elasticsearch 索引中的数据进行交互的功能。用户可以轻松地执行高级数据分析,并在各种图表、表格和地图中可视化数据。Fibana在图表展示上没有Grafana美观,但Kibana从Elasticsearch中检索日志非常方便。

三、整体架构

image.png

四、日志采集架构

image.png

五、安装及配置

1、下载及配置ElasticSearch

可以直接参考官网的教程,此处就不重复造轮子了
官网教程地址:https://www.elastic.co/downloads/elasticsearch

安装完成后,确认可以通过使用http://elasticsearch-host-ip:9200访问elasticsearch

2、下载及配置Kibana

参考官网教程: https://www.elastic.co/downloads/kibana
更新 config/kibana.yml配置文件以获取elasticsearch数据
运行kibana.bat/.sh确保可以使用http://kibana-host-ip:5601访问kibana主页

3、下载及配置FileBeat

参考官网教程 https://www.elastic.co/downloads/beats/filebeat
我们需要为每个压力机部署一个FileBeat节点,FileBeat主要负责收集日志数据,并发送给elasticsearch存储。

更新filebeat.yml文件

filebeat.inputs:
- type: log
 enabled: true
 paths:
   - D:\BaiduNetdiskDownload\jmeter\apache-jmeter-4.0\bin\jmeter.log
 multiline.pattern: ^[0-9]{
   
   4}-[0-9]{
   
   2}-[0-9]{
   
   2}
 multiline.negate: true
 multiline.match: after
output.elasticsearch:
 hosts: ["127.0.0.1:9200"]

默认情况下,FileBeat将日志文件中的每一行记录为单独的日志条目。有时JMeter异常可能跨越多行。所以我们需要使用多行模式配置filebeat.yml。
image.png
JMeter.log每个日志条目都带有其时间戳(yyyy-MM-dd)。所以,我们可以将模式配置为从时间戳开始截取,如果没有时间戳,FileBeat可以根据配置将该行附加到上一行。

启动FileBeat后将开始监视日志文件,每当更新日志文件时,数据将被发送到ElasticSearch存储。

六、JMeter日志采集

我们创建了一个非常简单的测试,如下所示,只有有Debug Sampler,使用BeanShell Assertion监听在发生任何错误时在日志文件中写入返回数据。
image.png
压测开始后,FileBeat将开始收集从日志文件中的信息,并转发到ElasticSearch存储,我们可以通过Kibana检索详细日志。
image.png
如果我们点击小箭头展开细节,下面的消息部分将显示我们感兴趣的日志详细内容。
image.png

七、小结

除了实时性能测试结果和实时性能数据外,我们还能够实时收集失败请求的响应数据。当我们在长时间运行的分布式负载测试时,上述设置非常有用。当请求事务突然失败时,此设置可帮助我们检查响应数据以便了解应用的情况和测试工具行为。

本文只抛砖引玉,大家有兴趣的话,可以参照教程深入实践。

相关资料:

相关实践学习
以电商场景为例搭建AI语义搜索应用
本实验旨在通过阿里云Elasticsearch结合阿里云搜索开发工作台AI模型服务,构建一个高效、精准的语义搜索系统,模拟电商场景,深入理解AI搜索技术原理并掌握其实现过程。
ElasticSearch 最新快速入门教程
本课程由千锋教育提供。全文搜索的需求非常大。而开源的解决办法Elasricsearch(Elastic)就是一个非常好的工具。目前是全文搜索引擎的首选。本系列教程由浅入深讲解了在CentOS7系统下如何搭建ElasticSearch,如何使用Kibana实现各种方式的搜索并详细分析了搜索的原理,最后讲解了在Java应用中如何集成ElasticSearch并实现搜索。  
目录
相关文章
|
11月前
|
Rust Java 测试技术
还在用 Jmeter 做压测?试试 oha 吧!你会毫不犹豫的爱上它!
在 Web 服务与 API 性能测试中,选择合适的工具至关重要。本文介绍基于 Rust 的高效性能测试工具 **OHA**,并与经典工具 **JMeter** 对比。OHA 以其高性能、低资源占用和简洁易用的特点脱颖而出,适合高并发场景下的快速测试。而 JMeter 功能丰富、支持多协议,适合复杂测试需求。两者各有优势,选择需根据具体场景决定。OHA 安装简单,命令行操作便捷,是性能测试的新利器。
578 0
还在用 Jmeter 做压测?试试 oha 吧!你会毫不犹豫的爱上它!
|
运维 监控 虚拟化
除了实时性能监控,Hyper-V还支持日志记录和警报功能你知道吗?
Hyper-V不仅支持实时性能监控,还具备强大的日志记录和警报功能。通过事件查看器可访问详细的日志文件,涵盖虚拟机管理、配置及Hypervisor事件,帮助故障排查和性能分析。警报功能支持预定义和自定义规则,可通过多种方式通知管理员,确保及时响应问题,保障虚拟化环境的稳定运行。
|
缓存 Java 测试技术
谷粒商城笔记+踩坑(11)——性能压测和调优,JMeter压力测试+jvisualvm监控性能+资源动静分离+修改堆内存
使用JMeter对项目各个接口进行压力测试,并对前端进行动静分离优化,优化三级分类查询接口的性能
952 10
谷粒商城笔记+踩坑(11)——性能压测和调优,JMeter压力测试+jvisualvm监控性能+资源动静分离+修改堆内存
|
存储 运维 数据可视化
如何为微服务实现分布式日志记录
如何为微服务实现分布式日志记录
987 1
|
存储 数据采集 分布式计算
Hadoop-17 Flume 介绍与环境配置 实机云服务器测试 分布式日志信息收集 海量数据 实时采集引擎 Source Channel Sink 串行复制负载均衡
Hadoop-17 Flume 介绍与环境配置 实机云服务器测试 分布式日志信息收集 海量数据 实时采集引擎 Source Channel Sink 串行复制负载均衡
344 1
|
运维 NoSQL Java
SpringBoot接入轻量级分布式日志框架GrayLog技术分享
在当今的软件开发环境中,日志管理扮演着至关重要的角色,尤其是在微服务架构下,分布式日志的统一收集、分析和展示成为了开发者和运维人员必须面对的问题。GrayLog作为一个轻量级的分布式日志框架,以其简洁、高效和易部署的特性,逐渐受到广大开发者的青睐。本文将详细介绍如何在SpringBoot项目中接入GrayLog,以实现日志的集中管理和分析。
1340 1
|
消息中间件 JSON 自然语言处理
Python多进程日志以及分布式日志的实现方式
python日志模块logging支持多线程,但是在多进程下写入日志文件容易出现下面的问题: PermissionError: [WinError 32] 另一个程序正在使用此文件,进程无法访问。 也就是日志文件被占用的情况,原因是多个进程的文件handler对日志文件进行操作产生的。
|
监控 Java Linux
性能监控之 nmon ant 简单分布式管理
【8月更文挑战第12天】性能监控之 nmon ant 简单分布式管理
261 0
性能监控之 nmon ant 简单分布式管理
|
监控 安全 Apache
什么是Apache日志?为什么Apache日志分析很重要?
Apache是全球广泛使用的Web服务器软件,支持超过30%的活跃网站。它通过接收和处理HTTP请求,与后端服务器通信,返回响应并记录日志,确保网页请求的快速准确处理。Apache日志分为访问日志和错误日志,对提升用户体验、保障安全及优化性能至关重要。EventLog Analyzer等工具可有效管理和分析这些日志,增强Web服务的安全性和可靠性。
599 9