手把手教你搭建MyPer4J、Grafana、InfluxDB实时监控系统
每天给大家带来网站工具、安卓软件、iOS软件、开源社区项目等黑科技!
如果你们有什么好的建议,也可以在后台留言。
创作不易,希望大家给一点鼓励,把公众号设置为"星标",点下文章"在看",谢谢大家!目前佛系更新,望多多支持~
Myperf4J
、Grafana
和Influxdb
的整合方案,采用MyPerf4J
作为Java
探针,InfluxDB
作为数据存储端,Grafana
作为数据展示端,将三个工具进行智能化整合,实时监控所有的指标数据,帮助团队更好地发现系统性能问题。无论您是团队负责人、测试工程师、运维工程师或其他技术人员,都可以通过本文的方案,轻松打造智能化性能测试监控平台。
JVM监控效果图
✨实现原理
🧱软件版本
平台:Windows10
JDK 版本1.8
MyPerf4J版本3.3.0
Grafana版本grafana-enterprise-10.1.1.windows-amd64
Influxdb版本influxdb2-2.7.1-windows-amd64
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
进入数据检索页面
① 用户名和组织名
② 数据管理器
③ Buckets 相当于数据库(初始化时我们填写的为
MyPerf4J
)④ measurements 相当于数据表
⑤ fields 相当于字段
⑥ influxdb自带的chart图表显示工具,可以将选中的数据通过图表显示出来
点击Load Data
- Buckets
查看数据库
至此,InfluxDB安装配置完成!
2、安装Grafana
Grafana是一个通用、跨平台的可视化工具。可以做数据监控和数据统计,带有告警功能。
Grafana提供了丰富的可视化展示方式,包括快速灵活的客户端图表,拥有不同方式的可视化指标、日志面板插件、仪表盘插件、热图、折线图等。
官网:https://grafana.com/
官网下载:https://docs.influxdata.com/influxdb/v2/install/
Grafana安装包官网下载
选择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
选项卡并点击进入到如下页面,点击Add new data source
,添加数据源
Name:填写数据源名称
Query Language:选择 Flux
点击Save & test
,弹出下图所示的窗口,说明grafana与InfluxDB连接成功!
导入InfluxDB Dashboards
JVM Dashboard文件、Method Dashboard文件下载地址:
https://www.123pan.com/s/yYD5Vv-ml7Vv.html
分别导入JVM Dashboard文件、Method Dashboard文件
InfluxDB选择我们刚才配置的数据源 InfluxDB-演示数据库
导入成功显示如下页面
① 填写图表名称 Name
② 选择刚才导入的 dashboard
③ 点击save保存
Start playlist
查看JVM监测效果OK,Grafana安装配置完成!
🚢项目集成MyPerf4J
1、下载
下载并解压 MyPerf4J-ASM.zip
阅读解压出的
README
文件修改解压出的
MyPerf4J.properties
配置文件中app_name
、metrics.log.xxx
、filter.packages.include
的配置值
# MyPerf4J 所有配置请参考:https://github.com/LinShunKang/MyPerf4J/wiki/%E9%85%8D%E7%BD%AE
# 配置监控应用的名称
app_name = mig-demo
# 是否开启 debug 模式,可配置为 true/false
debug = 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.log
metrics.log.class_loading = D:/java/MyPerf4J-ASM/logs/metrics.log
metrics.log.gc = D:/java/MyPerf4J-ASM/logs/metrics.log
metrics.log.memory = D:/java/MyPerf4J-ASM/logs/metrics.log
metrics.log.buff_pool = D:/java/MyPerf4J-ASM/logs/metrics.log
metrics.log.thread = D:/java/MyPerf4J-ASM/logs/metrics.log
metrics.log.file_desc = D:/java/MyPerf4J-ASM/logs/metrics.log
metrics.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,最大 600s
metrics.time_slice.method = 10000
# 配置 JVM 指标采集的时间片,单位为ms,最小1s,最大600s
metrics.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.1
influxdb.orgName = orgnation_name
influxdb.host = 127.0.0.1
influxdb.port = 8086
influxdb.database = MyPerf4J
influxdb.username = admin
influxdb.password = admin123
#AuLiKTR8pWKyW959upkssmHoPRloY0SlR99MHYCHOBpEgo2UaNnFxaGCFJsniBRMzmYR4Zni7l_nCUGl-a63bg==
# 配置超时时间,单位:ms
influxdb.conn_timeout = 3000
influxdb.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/false
filter.methods.exclude_private = false
# 配置需要排除的 ClassLoader,可配置多个ClassLoader,用英文';'分隔
filter.class_loaders.exclude =
# 配置 Recorder 模式,可配置为 accurate/rough
recorder.mode = ACCURATE
# 配置 Recorders 转盘的数量
recorders.backup_count = 3
# 指定通用的方法执行时间阈值,单位为 ms
recorder.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.exporter
为http.influxdb
配置
influxdb.host
、influxdb.port
、influxdb.database
等配置项
4、运行项目
如果 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作为Java探针,可以无入侵的收集应用性能数据,对系统影响很小。
InfluxDB时序数据库可以高效存储和查询时间序列数据。
Grafana提供了强大的图表展示能力,可以通过可视化的方式查看性能数据。
通过这种集成,可以构建一个实时的性能监控平台,发现系统瓶颈。
平台可以按需扩展,添加更多的监控指标。
不同的团队都可以获益,比如测试、运维等。
👨🎓聊一聊
公众号推送改版,务必点击【爱编程爱技术】右上角【设为星标🌟】,这样才不会错过推送。
如果侵犯了您的权益,请点击菜单栏联系公众号,一经核实,我们会在最短的时间内删除!感谢理解!
该系列软件本人亲测可用!
软件获取
IntelliJ Idea2023.1全家桶破解激活教程 附:破解补丁(windows/mac/linux)