查看原文
其他

手把手教你搭建MyPer4J、Grafana、InfluxDB实时监控系统

小胡 爱编程爱技术 2023-12-13

每天给大家带来网站工具、安卓软件、iOS软件、开源社区项目等黑科技!

如果你们有什么好的建议,也可以在后台留言。

创作不易,希望大家给一点鼓励,把公众号设置为"星标",点下文章"在看",谢谢大家!目前佛系更新,望多多支持~

在实际的软件开发过程中,性能测试是一项不可或缺的环节,它可以有效的评估一个系统、应用或者软件的性能指标。然而,如何提升性能测试效率,把测试结果转化为有价值的信息,则是一个更加重要的问题。
本文提供了一个基于Myperf4JGrafanaInfluxdb的整合方案,采用MyPerf4J作为Java探针,InfluxDB作为数据存储端,Grafana作为数据展示端,将三个工具进行智能化整合,实时监控所有的指标数据,帮助团队更好地发现系统性能问题。

无论您是团队负责人、测试工程师、运维工程师或其他技术人员,都可以通过本文的方案,轻松打造智能化性能测试监控平台。

Method监控效果图

JVM监控效果

✨实现原理

通过influxdb时序数据库存储数据,再通过grafana采集influxdb数据库数据,完成监控平台展示

🧱软件版本

平台:Windows10

JDK 版本1.8

MyPerf4J版本3.3.0

Grafana版本grafana-enterprise-10.1.1.windows-amd64

Influxdb版本influxdb2-2.7.1-windows-amd64

1、安装influxdb

InfluxDB 是一种流行的开源时间序列数据库,它专门用于存储和查询时间相关的数据。

官网链接:

官网:https://portal.influxdata.com

安装手册参考:https://docs.influxdata.com/influxdb/v2/install/

  • 安装包下载(推荐使用v2.x以上版本)

#官网下载地址https://docs.influxdata.com/influxdb/v2/install/?t=Windows
  • 选择Windows

  • 下翻找到下载按钮,点击下载 InfluxDB v2 压缩包
  • 解压得到 influxd.exe 文件

  • 启动 influxd 数据库  

influxd.exe文件不能直接执行,可以在这个文件的目录下运行cmd执行

如图所示就代表启动成功,监听端口是8086,命令行阻塞,窗口没有关闭

  • 浏览器访问数据库:localhost:8086

看到如下页面,说明influxdb服务安装成功
  • 数据库初始化

点击GET STARTED,设置用户名、密码、组织机构、数据库名称

用户名:admin

密码:admin123

组织机构:orgnation_name

数据库名称(即Bucket):MyPerf4J

点击CONTINUE,复制API TOKEN,配置Grafana时用到!!!

点击QUICK START进入首页

点击Data Explorer进入数据检索页面

InfluxDB数据检索页面说明:

① 用户名和组织名

② 数据管理器

③ Buckets 相当于数据库(初始化时我们填写的为MyPerf4J

④ measurements 相当于数据表

⑤ fields 相当于字段

⑥ influxdb自带的chart图表显示工具,可以将选中的数据通过图表显示出来

点击Load Data - Buckets 查看数据库

至此,InfluxDB安装配置完成!

2、安装Grafana

Grafana是一个通用、跨平台的可视化工具。可以做数据监控和数据统计,带有告警功能。

Grafana提供了丰富的可视化展示方式,包括快速灵活的客户端图表,拥有不同方式的可视化指标、日志面板插件、仪表盘插件、热图、折线图等。

Grafana可以同时连接多种数据源,不仅适用于展示Prometheus的监控数据,也可以把时序数据库(InfluxDB)的数据转换为漂亮的图表。
官网链接:

官网:https://grafana.com/

官网下载:https://docs.influxdata.com/influxdb/v2/install/

  • Grafana安装包官网下载
https://grafana.com/grafana/download?pg=get&plcmt=selfmanaged-box1-cta1&platform=windows
  • 选择Windows,点击Download the zip file

  • 解压grafana-enterprise-10.1.1.windows-amd64.zip文件

  • 创建配置文件

具体步骤如下:

① 在conf目录里找到sample.ini文件,复制一份并改名为custom.ini

② 打开custom.ini,根据关键字http_port找到端口设置,删除前面的分号;

    说明:ini文件中分号;是注释字符,删除可以取消注释

③ 默认端口号是3000,这个端口在Windows中需要额外权限,这里修改为8087

  • 启动Grafana服务

#在bin目录打开cmd,执行如下命令grafana.exe server

  • 浏览器访问:http://localhost:8087/

默认用户名和密码都是admin

点击login,此处会让修改默认密码,直接作为演示程序写admin即可(生产环境建议填写复杂密码)

点击Submit进入主界面

  • 配置InfluxDB数据源

侧边栏点击选项

Connections- Add new connection

搜索框内输入influxdb,找到Influxdb选项卡并点击

进入到如下页面,点击Add new data source,添加数据源

Name:填写数据源名称

Query Language:选择 Flux

HTTP:填写InfluxDB地址 http://localhost:8086
Organization:orgnation_name(按实际情况填写)
Token:前面搭建InfluxDB时复制的API TOKEN
Default Bucket:MyPerf4J

点击Save & test,弹出下图所示的窗口,说明grafana与InfluxDB连接成功!

  • 导入InfluxDB Dashboards

JVM Dashboard文件、Method Dashboard文件下载地址:

https://www.123pan.com/s/yYD5Vv-ml7Vv.html

分别导入JVM Dashboard文件、Method Dashboard文件

InfluxDB选择我们刚才配置的数据源 InfluxDB-演示数据库

导入成功显示如下页面

新建Playlists
填写playlist信息:

① 填写图表名称 Name

② 选择刚才导入的 dashboard

③ 点击save保存

点击Playlists回到列表页
点击Start playlist查看JVM监测效果

OK,Grafana安装配置完成!

🚢项目集成MyPerf4J

MyPerf4J 采用 JavaAgent 配置方式,透明化接入应用,对应用代码完全没有侵入。

1、下载

  • 下载并解压 MyPerf4J-ASM.zip

  • 阅读解压出的 README 文件

  • 修改解压出的 MyPerf4J.properties 配置文件中 app_namemetrics.log.xxx、 filter.packages.include 的配置值

2、配置模板文件MyPerf4J.properties如下:
# MyPerf4J 所有配置请参考:https://github.com/LinShunKang/MyPerf4J/wiki/%E9%85%8D%E7%BD%AE
# 配置监控应用的名称app_name = mig-demo
# 是否开启 debug 模式,可配置为 true/falsedebug = true

################################################################################ Metrics Configuration ################################################################################
# 配置 MetricsExporter 类型# log.stdout: 以标准格式化结构输出到 stdout.log# log.standard: 以标准格式化结构输出到磁盘# log.influxdb: 以 InfluxDB LineProtocol 格式输出到磁盘# http.influxdb: 以 InfluxDB LineProtocol 格式发送至 InfluxDB server,需要另行增加 influxdb 的配置metrics.exporter = http.influxdb
# 配置各项监控指标日志的文件路径# 如果 metrics.exporter 配置为 log.influxdb,建议把所有的 metrics.log.* 路径配置成一样以方便 Telegraf 收集metrics.log.method =D:/java/MyPerf4J-ASM/logs/metrics.logmetrics.log.class_loading = D:/java/MyPerf4J-ASM/logs/metrics.logmetrics.log.gc = D:/java/MyPerf4J-ASM/logs/metrics.logmetrics.log.memory = D:/java/MyPerf4J-ASM/logs/metrics.logmetrics.log.buff_pool = D:/java/MyPerf4J-ASM/logs/metrics.logmetrics.log.thread = D:/java/MyPerf4J-ASM/logs/metrics.logmetrics.log.file_desc = D:/java/MyPerf4J-ASM/logs/metrics.logmetrics.log.compilation = D:/java/MyPerf4J-ASM/logs/metrics.log
# 配置日志文件滚动时间间隔,分别有 MINUTELY、HOURLY 和 DAILY 三个值metrics.log.rolling.time_unit = DAILY
# 配置历史日志文件保留个数metrics.log.reserve.count = 7
# 配置方法指标采集的时间片,单位为 ms,最小 1s,最大 600smetrics.time_slice.method = 10000
# 配置 JVM 指标采集的时间片,单位为ms,最小1s,最大600smetrics.time_slice.jvm = 10000
# 是否展示方法参数类型metrics.method.show_params = true
# 配置 Java 类的层级映射关系# 规则为:LevelA:[classNameExpA1,classNameExpA2];LevelB:[classNameExpB1,classNameExpB2];metrics.method.class_level_mapping = Filter:[*Filter];Handler:[*Handler];

################################################################################ InfluxDB Configuration ################################################################################
influxdb.version = 2.7.1influxdb.orgName = orgnation_nameinfluxdb.host = 127.0.0.1influxdb.port = 8086influxdb.database = MyPerf4Jinfluxdb.username = admininfluxdb.password = admin123
#AuLiKTR8pWKyW959upkssmHoPRloY0SlR99MHYCHOBpEgo2UaNnFxaGCFJsniBRMzmYR4Zni7l_nCUGl-a63bg==

# 配置超时时间,单位:msinfluxdb.conn_timeout = 3000influxdb.read_timeout = 5000
################################################################################ Filter Configuration ################################################################################
# 配置需要监控的package,可配置多个,用英文';'分隔# com.demo.p1 代表包含以 com.demo.p1 为前缀的所有包和类# [] 表示集合的概念:例如,com.demo.[p1,p2,p3] 代表包含以 com.demo.p1、com.demo.p2 和 com.demo.p3 为前缀的所有包和类,等价于 com.demo.p1;com.demo.p2;com.demo.p3# * 表示通配符:可以指代零个或多个字符,例如,com.*.demo.*filter.packages.include = com.migdemo;
# 配置不需要监控的package,可配置多个,用英文';'分隔filter.packages.exclude = cn.perf4j.demo.dao.DemoDAOImpl
# 配置是否排除私有方法,true/falsefilter.methods.exclude_private = false
# 配置需要排除的 ClassLoader,可配置多个ClassLoader,用英文';'分隔filter.class_loaders.exclude =
# 配置 Recorder 模式,可配置为 accurate/roughrecorder.mode = ACCURATE
# 配置 Recorders 转盘的数量recorders.backup_count = 3
# 指定通用的方法执行时间阈值,单位为 msrecorder.size.timing_arr = 1500
# 指定一个时间片内,超过方法执行时间阈值的次数,仅在 recorder.mode = accurate 时有效recorder.size.timing_map = 128

3、修改JVM启动参数

在 JVM 启动参数里加上以下两个参数

  • -javaagent:/path/to/MyPerf4J-ASM.jar

  • -DMyPerf4JPropFile=/path/to/MyPerf4J.properties

形如:java -javaagent:/path/to/MyPerf4J-ASM.jar -DMyPerf4JPropFile=/path/to/MyPerf4J.properties -jar yourApp.jar

注意:如果您使用 JDK9 及其之上的版本,请额外添加 --add-opens java.base/java.lang=ALL-UNNAMED

4、配置InfluxDB

  • MyPerf4J 默认支持使用 InfluxDB 进行数据存储

  • MyPerf4J 向用户指定的 InfluxDB 中写入 LineProtocol 格式的性能统计数据

具体步骤如下:

  • 修改 MyPerf4JPropFile 配置文件

    • 配置metrics.exporterhttp.influxdb

    • 配置influxdb.hostinfluxdb.portinfluxdb.database等配置项

4、运行项目

启动应用,监控日志输出到 /path/to/log/method_metrics.log:

如果 metrics.exporter 配置为 log.influxdb,建议把所有的 metrics.log.* 路径配置成一样以方便 Telegraf 收集

MyPerf4J Method Metrics [2020-01-01 12:49:57, 2020-01-01 12:49:58]

Method[6]                            Type        Level  TimePercent      RPS  Avg(ms)  Min(ms)  Max(ms)    StdDev    Count     TP50     TP90     TP95     TP99    TP999   TP9999

DemoServiceImpl.getId2(long)      General      Service      322.50%     6524     0.49        0        1     0.50      6524        0        1        1        1        1        1

DemoServiceImpl.getId3(long)      General      Service      296.10%     4350     0.68        0        1     0.47      4350        1        1        1        1        1        1

DemoServiceImpl.getId4(long)      General      Service      164.60%     2176     0.76        0        1     0.43      2176        1        1        1        1        1        1

DemoServiceImpl.getId1(long)      General      Service        0.00%     8704     0.00        0        0     0.00      8704        0        0        0        0        0        0

DemoDAO.getId1(long)         DynamicProxy          DAO        0.00%     2176     0.00        0        0     0.00      2176        0        0        0        0        0        0

DemoDAO.getId2()             DynamicProxy          DAO        0.00%     2176     0.00        0        0     0.00      2176        0        0        0        0        0        0


5、卸载

在 JVM 启动参数中去掉以下两个参数,重启即可卸载此工具。

  • -javaagent:/path/to/MyPerf4J-ASM.jar

  • -DMyPerf4JPropFile=/path/to/MyPerf4J.properties

6、自行构建MyPerf4J-ASM.jar

  • git clone git@github.com:LinShunKang/MyPerf4J.git

  • mvn clean package

MyPerf4J-ASM-${MyPerf4J-version}.jar 在 MyPerf4J-ASM/target/ 目录下

👨‍🎓结语

性能测试监控平台的搭建对任何团队来说都具有重要意义。使用MyPerf4J、Grafana和InfluxDB进行性能测试监控,这种整合思路能够发挥每个工具的优势,实现性能数据的全链路监控。
具体来说,优点包括:
  1. MyPerf4J作为Java探针,可以无入侵的收集应用性能数据,对系统影响很小。

  2. InfluxDB时序数据库可以高效存储和查询时间序列数据。

  3. Grafana提供了强大的图表展示能力,可以通过可视化的方式查看性能数据。

  4. 通过这种集成,可以构建一个实时的性能监控平台,发现系统瓶颈。

  5. 平台可以按需扩展,添加更多的监控指标。

  6. 不同的团队都可以获益,比如测试、运维等。
总之,这种方案充分利用了各个工具的优势,可以有效提升性能测试的智能化水平。

👨‍🎓聊一聊

  • 公众号推送改版,务必点击【爱编程爱技术】右上角【设为星标🌟】,这样才不会错过推送。

  • 如果侵犯了您的权益,请点击菜单栏联系公众号,一经核实,我们会在最短的时间内删除!感谢理解!

  • 该系列软件本人亲测可用!

软件获取


关注【爱编程爱技术】公众号,回复关键字“mig”自取
您可能喜欢:

干翻算法!118K stars 霸榜GitHub!

Java8的Stream流

Springboot内置Tomcat配置参数调优

sms4j让发送短信变的更简单

Tomcat启动流程

Spring RestTemplate上传文件

IntelliJ Idea2023.1全家桶破解激活教程 附:破解补丁(windows/mac/linux)

CodeGeeX:Tab一下,代码自动生成

httpclient上传文件

继续滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存