当前位置: 首页 > news >正文

Spring Boot JMX与Jolokia监控实战

你贴出的这段文档是关于 Spring Boot Actuator 如何通过 JMX 和 Jolokia 实现监控与管理 的内容。

我们可以把它理解为:除了 HTTP 接口(如 /actuator/health),Spring Boot 还支持使用 Java 标准的 JMX 机制 来暴露应用的运行时信息。这对于传统运维、本地调试、或与企业级监控系统集成非常有用。


🧩 一、什么是 JMX?

JMX(Java Management Extensions) 是 Java 提供的一套标准 API,用于:

  • 监控 JVM 状态(内存、线程、GC)
  • 管理应用组件(启停服务、调整参数)
  • 暴露 MBean(Managed Bean)

✅ 类比:HTTP 是“Web 方式”看应用状态;JMX 是“Java 原生方式”看状态。


🔌 二、Spring Boot 如何使用 JMX?

默认情况下,JMX 是 关闭的,你需要手动开启:

# application.properties
spring.jmx.enabled=true

开启后,Spring Boot 会自动将所有 Actuator 端点 转换为 JMX MBeans,并注册到 MBean Server 中。

默认 MBean 命名规则:

org.springframework.boot:type=Endpoint,name=Health
org.springframework.boot:type=Endpoint,name=Info
org.springframework.boot:type=Endpoint,name=Metrics

🔹 域名(domain):org.springframework.boot
🔹 类型:type=Endpoint
🔹 名称:由端点 ID 决定(如 name=Health


🛠️ 三、6.4.1 自定义 MBean 名称

问题 1:多个 Spring 容器导致 MBean 名称冲突

如果你的应用中有多个 ApplicationContext(比如在大型项目或插件化架构中),它们可能会尝试注册相同的 MBean 名称,导致冲突。

解决方案:启用唯一名称
spring.jmx.unique-names=true

✅ 效果:Spring Boot 会在名称后加后缀(如 -1, -2)确保唯一性。


问题 2:想自定义 MBean 的“域名”(domain)

默认是 org.springframework.boot,你可以改成自己的命名空间:

management.endpoints.jmx.domain=com.example.myapp

✅ 效果:MBean 变成:

com.example.myapp:type=Endpoint,name=Health

🎯 用途:便于在 JConsole 或运维平台中识别你的应用。


🔒 四、6.4.2 关闭 JMX 端点

如果你不需要 JMX 功能,可以完全禁用:

management.endpoints.jmx.exposure.exclude=*

或者只暴露部分端点:

# 只暴露 health 和 info
management.endpoints.jmx.exposure.include=health,info

⚠️ 注意:这和 spring.jmx.enabled=false 略有不同:

  • spring.jmx.enabled=false:彻底关闭 JMX 支持
  • exposure.exclude=*:JMX 仍启用,但不把 Actuator 端点注册为 MBean

推荐使用前者来完全关闭。


🌉 五、6.4.3 使用 Jolokia:让 JMX 走 HTTP

❓ 问题:JMX 不适合远程调用

JMX 原生使用 RMI 协议,配置复杂,防火墙难通过,不适合微服务远程监控。

✅ 解决方案:Jolokia —— JMX over HTTP

Jolokia 是一个“桥接器”,它:

  • 把 JMX 的操作封装成 RESTful HTTP 接口
  • 你可以用 curl 或浏览器访问 JMX 数据
  • 支持 JSON 格式,易于解析

如何启用 Jolokia?

步骤 1:添加依赖(Maven)
<dependency><groupId>org.jolokia</groupId><artifactId>jolokia-core</artifactId>
</dependency>

Gradle 用户:

implementation 'org.jolokia:jolokia-core'
步骤 2:暴露 Jolokia 端点
management.endpoints.web.exposure.include=jolokia

或者:

management.endpoints.web.exposure.include=*
步骤 3:访问 Jolokia 端点
http://localhost:8080/actuator/jolokia

你可以用它来查询 MBean,例如:

# 查询 Health MBean
curl http://localhost:8080/actuator/jolokia/read/org.springframework.boot:type=Endpoint,name=Health

返回 JSON:

{"value": { "status": "UP" },"timestamp": 1712345678,"status": 200
}

📌 注意:Jolokia 只适用于 Servlet 环境(如 Spring MVC、Jersey),不支持 WebFlux。


⚙️ 六、自定义 Jolokia 配置

Jolokia 本身有很多配置项(如是否开启调试、跨域等),Spring Boot 允许你在 application.properties 中设置:

# 开启调试模式
management.endpoint.jolokia.config.debug=true# 允许跨域
management.endpoint.jolokia.config.allow-origin=*# 禁用 POST 请求
management.endpoint.jolokia.config.disable-http-post=false

🔹 前缀:management.endpoint.jolokia.config.
🔹 后面跟的是 Jolokia 原生的 servlet init parameters


🔌 七、禁用 Jolokia 自动配置

如果你引入了 jolokia-core,但不希望 Spring Boot 自动配置它

management.endpoint.jolokia.enabled=false

🎯 用途:你想自己手动控制 Jolokia 的行为,而不是让 Spring Boot 管。


📊 总结:JMX 与 Jolokia 对比

特性JMX(原生)Jolokia(JMX over HTTP)
协议RMI / LocalHTTP
是否默认开启spring.jmx.enabled=true 才开启✅ 添加依赖后自动启用
是否支持远程❌ 配置复杂✅ 简单,适合远程监控
是否支持 WebFlux❌ 仅支持 Servlet 环境
是否可被 curl 访问
是否适合 Prometheus 采集✅(可通过 exporter 转换)
安全性依赖 RMI 安全机制可结合 Spring Security 控制

💡 实际应用场景

场景推荐方式
本地开发调试✅ JMX + JConsole/VisualVM
生产环境远程监控✅ Jolokia + /actuator/jolokia
与企业级监控系统集成(如 IBM Tivoli)✅ 原生 JMX
微服务架构中统一采集✅ Jolokia + 自定义代理
安全要求高,禁止 HTTP 暴露✅ 原生 JMX + 内网访问

✅ 最佳实践建议

# 1. 开启 JMX(可选)
spring.jmx.enabled=true# 2. 自定义域名,避免冲突
management.endpoints.jmx.domain=com.company.product# 3. 启用唯一名称(多容器时)
spring.jmx.unique-names=true# 4. 添加 Jolokia 依赖,支持 HTTP 访问
#    <dependency>org.jolokia:jolokia-core</dependency># 5. 暴露 jolokia 端点
management.endpoints.web.exposure.include=health,info,metrics,jolokia# 6. 可选:配置 Jolokia
management.endpoint.jolokia.config.allow-origin=http://monitor.example.com
management.endpoint.jolokia.config.debug=false

🧪 小实验:用 JConsole 查看 MBean

  1. 启动你的 Spring Boot 应用(确保 spring.jmx.enabled=true
  2. 打开 JConsole(JDK 自带工具)
  3. 选择你的应用进程
  4. 切到 MBeans 标签页
  5. 展开 org.springframework.boot 或你自定义的 domain
  6. 你会看到 Endpoint 下列出了 Health, Info 等,可以点击查看或调用

这套机制让你的应用不仅可以通过 HTTP 被监控,还能通过 Java 原生方式 被管理和集成,极大提升了运维灵活性。

如果你正在做传统企业系统迁移或需要深度 JVM 监控,JMX + Jolokia 是非常强大的组合。

http://www.dtcms.com/a/521358.html

相关文章:

  • 安康做企业网站的百度推广有哪些推广方式
  • 利用模板如何制作网站做的网站 v2ex
  • wordpress主题教程seo 优化顾问
  • 给网站怎么做tag标签如何用手机做音乐网站
  • 博客类网站源码番禺建设局网站首页
  • a5创业网站建设微信小程序如何生成二维码
  • 【Linux入门】常用工具:yum、vim
  • 专注网站建设公司名称大全免费取名
  • 如何将MIB库文件转换为ZABBIX xml模板
  • 音频调试技巧分享:mediametrics::LogItem相关日志如何查看?
  • 手淘网站建设需求分析做qq链接的网站
  • 进口倾角传感器选择与优质厂家推荐双轴倾角传感器在物联网应用中的核心价值
  • 环保厅网站建设的必要性做盗版电影网站违法吗
  • 做网站的公司 经营范围主页设计
  • 东莞网上销售网站建设网站建设经
  • 从零搭建vsftpd服务器:避坑指南+实战解决方案
  • Linux 解压安装(安装tomcat)
  • 密云网站开发公司沧州做网站公司
  • 如何开发移动网站长沙关键词优化报价
  • Spring Boot与K8s集成的核心机制
  • 医药招商网站建设wordpress 商场模板
  • 正点原子RK3568学习日志19- Linux错误处理 字符驱动框架完全体
  • MySQL基本查询:从增删改查到复杂应用
  • 青海省城乡建设厅网站网站情况建设说明书
  • 沈阳制作公司网站和apphtml做静态网站
  • nginx-1.9.1.tar.gz 安装教程(详细步骤,从解压到启动)
  • 崇州 网站建设 有限公司wordpress做网站容易吗
  • 免费注册网址广东做seo的公司
  • KVM热迁移安装部署 ESXi
  • 【MRI脑网络构建专题】包含但不限于以下指标的分析