使用Collectd + InfluxDB + Grafana进行JMX监控

我们已经看到使用Collectd监控CPU /内存利用率(本文)。但它没有提供所有信息来确定性能问题的瓶颈。在本文中,我们将使用Collectd Java插件来使用其JMX技术来监视和管理Java虚拟机(JVM)。

目标:

使用Java的JMX技术监视和管理Java虚拟机(JVM)。

建筑:

我们的高级架构如下所示 - 我们将监控所有应用服务器,JMeter服务器和JMeter-master的JVM。

使用Collectd + InfluxDB + Grafana进行JMX监控

JMX(Java托管扩展):

JMX是在Java 5.0发行版中引入的,用于在运行时管理/监视资源。使用JMX,我们将能够监视内存使用情况,垃圾收集,加载的类,线程数等随着时间的推移。这是性能工程中更有用的信息。更多信息在这里

使用Collectd + InfluxDB + Grafana进行JMX监控

如上图所示,使用JMX连接器,JConsole / Collectd等客户端与MBean服务器通信,以获取我们感兴趣的应用程序的度量标准。

 

JConsole的:

JConsole是一个用于监视JVM的GUI工具。它附带Java JDK。让我们看看它如何帮助我们监控JMeter。[我假设你安装了JDK]

  • 启动JMeter
  • 打开一个简单的测试计划/创建一个。
  • 转到Java JDK Home / bin文件夹
  • 启动JConsole.exe

使用Collectd + InfluxDB + Grafana进行JMX监控

  • 它将显示正在运行的Java应用程序列表。选择ApacheJMeter.jar并连接。如果出现此对话窗口,请单击“不安全连接”

使用Collectd + InfluxDB + Grafana进行JMX监控

  • 运行JMeter测试。

使用Collectd + InfluxDB + Grafana进行JMX监控

  • JConsole显示内存使用情况,线程数[ 不要与JMeter的线程数混淆 ],加载类等
  • 单个选项卡提供更多信息,如GC。

监控远程过程:

  • 当我们在上面监视本地进程(ApacheJMeter.jar)时,JConsole也可用于监视远程进程(远程进程可能是您的tomcat服务器/ JMeter-server)
  • 应为远程进程设置某些属性,以便client / JConsole可以与JMX API通信以获取信息。在启动java进程时,传递以下属性。

-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=6969
-Dcom.sun.management.jmxremote.rmi.port=6969
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false

  • 如果您正在运行docker容器,请确保还使用了以下属性。

-Djava.rmi.server.hostname=${HOST_IP}

  • 要收集jmeter-server jmx指标,我在下面设置环境变量并启动jmeter-server.sh

export JVM_ARGS="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=6969 -Dcom.sun.management.jmxremote.rmi.port=6969 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false"

  • 对于Tomcat:

CATALINA_OPTS="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=6969 -Dcom.sun.management.jmxremote.rmi.port=6969 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false"

  • 只需将上述参数传递给java进程即可启用JMX监控。
  • 现在,JConsole可以使用以下服务URL连接到远程JMX。

service:jmx:rmi:///jndi/rmi://hostname:6969/jmxrmi

 

Collectd Java插件:

JConsole是一个很好的工具。但它不保留历史数据。我们已经使用Collectd来监控我们的jmeter-servers和app服务器的CPU和内存利用率。我们可以使用Collectd的Java和JMX插件将JMX指标收集到InfluxDB中。

请先阅读本文关于collectd的用法。

我将在collectd配置文件中添加以下部分。

 

重启collectd服务。等几分钟来收集一些指标。

使用Collectd + InfluxDB + Grafana进行JMX监控

 

获得此数据后,最后一步将在Grafana中创建一个仪表板来创建图形。

使用Collectd + InfluxDB + Grafana进行JMX监控

 

摘要:

使用Collectd插件,以及CPU和内存利用率,我们还可以将JMX指标收集到InfluxDB中。使用Grafana,我们可以可视化,性能测试结果(最小值,最大值,平均响应时间,吞吐量等),JMX度量(堆内存使用,加载的类计数,线程数,GC)和其他指标,如所有的CPU和内存利用率JMeter服务器,App服务器。

 

上一篇:jmeter+influxdb+grafana性能测试监控


下一篇:时序数据库连载系列: 时序数据库一哥InfluxDB之存储机制解析