在CentOS上使用JMeter进行系统监控的可选方案
- 推荐两种落地方式:
- 方案一:JMeter + InfluxDB 1.x + Grafana(实时写入与可视化,适合压测过程中的指标趋势与大盘展示)。
- 方案二:JMeter + ServerAgent + PerfMon 监听器(轻量,直接采集被测服务器的 CPU、内存、磁盘、网络 等)。
- 可选扩展:JMeter + Prometheus + Grafana(以 Pull 方式暴露指标,适合与现有 Prometheus 体系融合)。
方案一 JMeter + InfluxDB 1.x + Grafana 实时监控
- 组件与端口
- InfluxDB 1.x:用于存储压测时序数据,开放写入端口 2003(Graphite 兼容写入)与查询端口 8086(Grafana 数据源)。
- Grafana:可视化展示,默认端口 3000。
- 安装与启动(以 CentOS 7 为例)
- InfluxDB 1.7(RPM 安装示例):
- 安装:yum install -y https://dl.influxdata.com/influxdb/releases/influxdb-1.7.9.x86_64.rpm
- 编辑配置 /etc/influxdb/influxdb.conf:
- [[graphite]] enabled = true;database = “jmeter”;bind-address = “:2003”
- [http] enabled = true;bind-address = “:8086”
- 启动:systemctl start influxdb(或 influxd 前台调试)
- 建库与用户:influx → create database jmeter;CREATE USER “admin” WITH PASSWORD ‘admin’ WITH ALL PRIVILEGES
- Grafana:
- 安装:yum install -y https://dl.grafana.com/oss/release/grafana-6.4.3-1.x86_64.rpm
- 启动:systemctl start grafana-server;访问 http://服务器IP:3000(默认账号/密码 admin/admin)
- JMeter 配置
- 在测试计划中添加监听器:Add → Listener → Backend Listener
- 选择 Backend Listener 实现:InfluxdbBackendListenerClient
- 关键参数:influxdbUrl=http://InfluxDB_IP:8086/write?db=jmeter;testTitle=自定义名称
- Grafana 可视化
- 添加数据源:Type=InfluxDB;URL=http://InfluxDB_IP:8086;Database=jmeter;User/Password=admin/admin
- 导入面板:Grafana 官方模板库搜索 “JMeter”,常用模板 ID:5496(Apache JMeter Dashboard using Core InfluxdbBackendListenerClient)
- 验证
- 执行压测后,在 InfluxDB 中执行:use jmeter;select * from jmeter limit 10;确认有数据写入
- Grafana 面板应实时刷新响应时间、吞吐量、错误率、活跃线程等指标。
方案二 JMeter + ServerAgent 监控被测服务器资源
- 适用场景
- 需要直接观察被测服务器(应用/数据库所在机器)的 CPU、内存、磁盘 IO、网络 IO 等资源曲线。
- 部署步骤
- 在被测服务器安装 JDK(ServerAgent 依赖 Java)
- 下载并解压 ServerAgent-2.2.x 到 /opt/ServerAgent
- 启动:cd /opt/ServerAgent;chmod +x startAgent.sh;./startAgent.sh(默认 TCP/UDP 4444)
- 如需自定义端口:./startAgent.sh --tcp-port 7081 --udp-port 7082
- JMeter 配置
- 安装插件管理器:将 plugins-manager.jar 放入 JMeter 的 lib/ext,重启 JMeter
- 通过 Plugins Manager 安装 PerfMon (Servers Performance Monitoring)
- 在测试计划中添加监听器:Add → Listener → PerfMon Metrics Collector
- 添加要监控的主机与指标(Host/IP、Port=4444、CPU、Memory、Disk I/O、Network I/O 等)
- 防火墙与连通性
- 开放被测服务器的 4444(或自定义)端口;在 JMeter 所在机器测试:telnet 被测IP 4444
- 观察
- 运行压测后,PerfMon 监听器将实时绘制各指标曲线,便于定位瓶颈。
可选扩展 JMeter + Prometheus + Grafana
- 思路
- 使用 jmeter-prometheus-plugin 在 JMeter 中暴露 /metrics 端点(Pull 模型),由 Prometheus 抓取,再在 Grafana 展示。
- 关键步骤
- 下载并放置 jmeter-prometheus-plugin 的 JAR 到 JMeter 的 lib/ext
- 在测试计划中添加监听器:Prometheus Listener(可配置指标与标签)
- 启动 JMeter 后确认指标可访问:http://JMeter_IP:9270/metrics(默认端口 9270)
- Prometheus 配置抓取 job(targets 指向 JMeter 的 /metrics)
- Grafana 添加 Prometheus 数据源并导入 JMeter 面板模板
- 适用
- 已有 Prometheus 监控体系,希望统一指标采集与告警策略。
防火墙与网络要点
- 常见端口与用途
- 2003/TCP:JMeter → InfluxDB(Graphite 写入)
- 8086/TCP:Grafana → InfluxDB(查询)
- 3000/TCP:浏览器 → Grafana
- 4444/TCP+UDP:JMeter → ServerAgent(资源采集)
- (可选)9270/TCP:Prometheus → JMeter(/metrics)
- 快速放行(firewalld)
- firewall-cmd --permanent --add-port={2003,8086,3000,4444}/tcp
- firewall-cmd --permanent --add-port=4444/udp
- firewall-cmd --reload
- 云服务器还需在 安全组 放行对应端口。
常见问题与排错
- InfluxDB 写入失败
- 核对 influxdbUrl=http://IP:8086/write?db=jmeter;确保 InfluxDB 已启动且数据库 jmeter 存在;在 InfluxDB 中执行 show measurements 验证
- Grafana 无法显示数据
- 数据源 Test 是否通过;Database 名、用户名/密码是否正确;面板中 Measurement 是否选择 jmeter
- ServerAgent 连不通
- 被测机防火墙/安全组是否放行 4444;netstat -anp | grep 4444 检查监听;必要时改用自定义端口并同步修改 JMeter 配置
- JMeter 分布式压测配合监控
- 多台 Slave 也需部署 ServerAgent;Master 的 jmeter.properties 中 remote_hosts 配置所有 Slave IP:端口。