非SpringBoot项目中如何将Micrometer采集的指标发布到JMX
非Spring Boot应用将Micrometer指标发布到JMX实现方案
核心逻辑
Spring Boot会自动完成JmxMeterRegistry的装配和注册,普通Java应用需要手动将JMX注册表绑定到Micrometer的指标体系中,才能把采集到的指标导出到JMX。
具体实现步骤
1. 初始化JmxMeterRegistry并绑定到指标体系
在应用启动入口、所有指标注册之前执行如下初始化代码:
import io.micrometer.core.instrument.Clock; import io.micrometer.core.instrument.Metrics; import io.micrometer.jmx.JmxConfig; import io.micrometer.jmx.JmxMeterRegistry; // 使用默认配置初始化JMX注册表 JmxMeterRegistry jmxRegistry = new JmxMeterRegistry(JmxConfig.DEFAULT, Clock.SYSTEM); // 绑定到全局复合注册表,之前/之后注册到Metrics.globalRegistry的指标都会自动导出到JMX Metrics.addRegistry(jmxRegistry);
如果需要自定义JMX配置(比如修改MBean的域名、调整数据上报频率),可以自定义JmxConfig实现:
JmxConfig customConfig = new JmxConfig() { @Override public String get(String key) { // 自定义MBean域名,方便在JConsole中分类查找 if ("jmx.domain".equals(key)) { return "com.your.business.metrics"; } // 未自定义的配置走默认值 return null; } }; JmxMeterRegistry customJmxRegistry = new JmxMeterRegistry(customConfig, Clock.SYSTEM); Metrics.addRegistry(customJmxRegistry);
2. 正常使用已定义的Timer指标
按原有逻辑记录指标即可,示例:
// 记录业务操作耗时 timer.record(() -> { // 你的业务逻辑代码 });
3. JConsole查看指标
启动应用后打开JConsole,选择对应Java进程,切换到「MBean」标签页:
- 使用默认配置的话,展开
io.micrometer域名下的节点 - 自定义域名的话展开你配置的对应域名节点
即可找到你定义的nameTimer的所有指标,包括你配置的0.5、0.75、0.95等分位数数据。
常见问题排查
- 要是JConsole找不到对应MBean,先确认JmxMeterRegistry的初始化代码是否在指标注册之前执行
- 如果运行时报类缺失错误,检查
micrometer-core和micrometer-registry-jmx的依赖版本是否一致
内容的提问来源于stack exchange,提问作者prix
相关产品推荐
相关产品推荐

