对于熟悉或者使用过 Prometheus 监控的,应该都会接触到一个插件,它就是 jmx_exporter。JMX Exporter 是一个收集器,通过它我们可以对Tomcat、WebLogic中间件的 JMX Mbean 的值进行抓取,进而实现对其 JVM 内存使用情况、GC情况,以及部分Tomcat、WebLogic自有的关键指标的运行情况。
下面就是 jmx_exporter 版本的 Github 发布页面:
https://github.com/prometheus/jmx_exporter/releases
我这边最早接触 jmx_exporter 是在 2019 年,当时因为客户现场开始着手做自动化监控的工具选型,所以就开始在网上查找相关的监控工具。那几年 zabbix 可谓炙手可热,但是 zabbix 上手还是需要一定的技术门槛,另外 zabbix 想要做好,还得需要一个专业的开发团队去进行二次开发。经过综合考量, Prometheus 于是就进入视野了,然后就接触到 jmx_exporter 这个看来起来“身材小巧”却性能强悍的工具了。当时的我使用的应该还是 0.14.0 这些个早期版本,后来随着JDK版本逐渐从1.6升级到1.7、1.8,jmx_exporter 的版本也逐渐升级到了 0.19.0。然而后续因为一些原因就没有再升级版本了,一个是开发厂商使用的主流JDK版本还是在1.7、1.8版本,使用 JDK11 和 JDK17 很少。另外一个原因,是当时有段时间,0.19.0 不能兼容 JDK17 这些新版本,最主要的原因,好像是从0.20版本开始,jmx_exporter 的 metrics 函数发生了较大的改动,这个对于已编写好的监控 dashboard 影响会比较大,很多东西要改,同时还要兼容老版本插件的 metrics 函数。
时至 2025 年岁末,终于有时间来研究下 0.19.0 版本和最新的 1.5.0 版本 jmx_exporter 插件的 metrcis 函数(左边为 0.19 版本的,右边为 1.5 版本的)差异了。个人感觉最大的差异,就是新版统一了 metrics 函数的命名,把 buffers / bytes 这样的单词放到函数的后面了。
差异1:这个差异并不明显,看起来就是把之前函数里面无用的逗号给去掉了
| jvm_buffer_pool_capacity_bytes{pool="direct",} 16384.0 jvm_buffer_pool_capacity_bytes{pool="mapped",} 0.0 jvm_buffer_pool_used_buffers{pool="direct",} 2.0 jvm_buffer_pool_used_buffers{pool="mapped",} 0.0 jvm_buffer_pool_used_bytes{pool="direct",} 16384.0 jvm_buffer_pool_used_bytes{pool="mapped",} 0.0 | jvm_buffer_pool_capacity_bytes{pool="direct"} 16384.0 jvm_buffer_pool_capacity_bytes{pool="mapped"} 0.0 jvm_buffer_pool_used_buffers{pool="direct"} 2.0 jvm_buffer_pool_used_buffers{pool="mapped"} 0.0 jvm_buffer_pool_used_bytes{pool="direct"} 16384.0 jvm_buffer_pool_used_bytes{pool="mapped"} 0.0 |
差异2:新版统一了 metrics 函数的命名,把 buffers / bytes 这样的单词放到后面了
|
jvm_memory_bytes_used{area="heap",} 3.5801472E7 | jvm_memory_max_bytes{area="heap"} 2.147483648E9 jvm_memory_max_bytes{area="nonheap"} 2.39075328E9 |
差异3:Tomcat版本的metrics函数改的怪怪的~
| tomcat_serverinfo{serverinfo="Apache Tomcat/10.1.49",} 1.0 | tomcat_serverinfo_total{serverinfo="Apache Tomcat/10.1.49"} 1.0 |
差异4:JVM版本信息函数的修改
| jvm_info{runtime="Java(TM) SE Runtime Environment",vendor="Oracle Corporation",version="11.0.29+8-LTS-387",} 1.0 | jvm_runtime_info{runtime="Java(TM) SE Runtime Environment",vendor="Oracle Corporation",version="11.0.29+8-LTS-387"} 1 |
差异5:这种应该就是为了解决本末倒置、先来后到的问题的
| jmx_exporter_build_info{version="0.19.0",name="jmx_prometheus_javaagent",} 1.0 | jmx_exporter_build_info{name="jmx_prometheus_javaagent",version="1.5.0"} 1 |
1574

被折叠的 条评论
为什么被折叠?



