Spring boot——JMX 監控


 

前言

Spring Boot應用的健康監控一文中,我們通過Spring Boot Actuator對外暴露應用的監控信息,除了使用HTTP獲取JSON格式 的數據之外,還可以通過JMX監控應用,Spring Boot也提供了對JMX監控的支持。

JMX監控對外暴露的信息相同,不過是使用MBeans容器將應用數據封裝管理。

 

一、啟動JMX

1、Spring Boot < 2.2.X 默認是啟用JMX(Java Management Extensions)的,並且默認是公開的MBeans可以直接使用jdk自帶的jconsole(shell窗口使用命令jconsole即可)客戶端查看Mbeans.

2、使用JMX那么所有的Actuator端點(除了/heapdump)會通過MBeans進行公開的。

3、請注意 Spring Boot > 2.2.x 默認禁用 JMX 暴露,需要添加以下設置才能使其工作:
spring.jmx.enabled=true

在命令行中執行jconsole命令啟動“Java管理和監視控制台”,然后選擇org.springframework.boot節點下的Endpoint,可以看到如下信息:

4、請注意 Spring Boot > 2.2.x 默認禁用 JMX Tomcat Bean 暴露,需要添加以下設置才能使其工作:

server.tomcat.mbeanregistry.enabled=true

在命令行中執行jconsole命令啟動“Java管理和監視控制台”,然后選擇Tomcat,可以看到如下信息:

 

二、禁用JMX

如果不希望在JMX上公開端點,您可以設置management.endpoints.jmx.exposure.exclude屬性為*,如下例所示:

management.endpoints.jmx.exposure.exclude=*

如果 Spring Boot > 2.2.x 默認禁用 JMX 暴露。

 

三、訪問JMX

除了通過JMX獲取信息,也可以通過HTTP接口訪問Mbeans對象的信息,具體有以下兩種方式。

  • actuator的metrics

部分指標會暴露在actuatormetrics下面,比如:tomcat thread的相關指標、jvm的相關指標、連接池(hikaricp等)的相關指標(具體暴露哪些指標,取決於配置情況)。

1、在應用的pom文件中添加jolokia-core依賴:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

2、配置:

在application.properties文件:

# Actuator Web 訪問端口
management.endpoints.web.exposure.include=* management.endpoint.health.show-details=always management.server.port=10111 management.server.ssl.enabled=false management.server.servlet.context-path=/ spring.jmx.enabled=true server.tomcat.mbeanregistry.enabled=true management.endpoints.jmx.exposure.include=*

3、測試驗證:

  • Jolokia

Jolokia是一個JMX-http橋梁,它提供了訪問JMX bean的另一種方法,使用Jolokia,需要引入org.jolokia:jolokia-core的依賴。

1、在應用的pom文件中添加jolokia-core依賴:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

<!-- JMX monitor -->
<dependency>
     <groupId>org.jolokia</groupId>
     <artifactId>jolokia-core</artifactId>
</dependency>

2、配置:

添加依賴后,然后可以通過在management.endpoints.web.exposure.include屬性中添加Jolokia或*來公開Jolokia端點,然后,你可以使用/actuator/jolokia在你的管理HTTP服務器上訪問它。

在application.properties文件:

# Actuator Web 訪問端口
management.endpoints.web.exposure.include=*
management.endpoint.health.show-details=always
management.server.port=10111
management.server.ssl.enabled=false
management.server.servlet.context-path=/
        
spring.jmx.enabled=true
server.tomcat.mbeanregistry.enabled=true
management.endpoints.jmx.exposure.include=*

3、測試驗證:

我們在postman中訪問 http://172.16.4.40:10111/actuator/jolokia/read/Tomcat:type=ThreadPool,name=%22http-nio-8091%22/maxThreads 也可以得到對應的信息:

4、定制Jolokia:

Jolokia有許多設置,你通常通過設置servlet參數來配置它們,使用Spring Boot,你可以使用你的application.properties文件,為此,在參數前面加上management.endpoint.jolokia.config.

如下例所示:

management.endpoint.jolokia.config.debug=true

5、禁用Jolokia:

如果你使用Jolokia但不希望Spring Boot配置它,設置management.endpoint.jolokia.enabled屬性為false,如下所示:

management.endpoint.jolokia.enabled=false

 

四、其它

  • 自定義MBean的名字

可以自定義在其中暴露端點的JMX域,下面的設置顯示了application.properties中的一個示例:

management.endpoints.jmx.domain=com.example.myapp
management.endpoints.jmx.unique-names=true

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM