将Jolokia与Spring Boot集成

2025/03/21

1. 概述

监控Java应用程序的性能和稳定性是一种常见的做法。Spring Boot通过Actuators提供这种监控功能,但是,我们可能需要更细粒度的控制或轻量级的方法来实现相同的目的。

Jolokia帮助我们通过API端点监控应用程序,同时提供批量操作和安全机制等功能

在本教程中,我们将研究如何将Jolokia集成到Spring Boot应用程序中。

2. 设置

现在来看看在我们的应用程序中启用Jolokia所需的步骤。

2.1 依赖

首先,我们需要添加Jolokia依赖才能使用Jolokia,它会添加传递依赖和服务库:

<dependency>
    <groupId>org.jolokia</groupId>
    <artifactId>jolokia-support-spring</artifactId>
    <version>2.2.1</version>
</dependency>

2.2 启用Jolokia

默认情况下,Spring BootActuator仅公开有限的端点。要启用Jolokia,我们需要在应用程序的属性文件中进行配置

management.endpoints.web.exposure.include=jolokia

现在,添加了依赖并配置了应用程序,当我们启动Spring Boot应用程序时就可以访问Jolokia。

3. 访问Jolokia

Jolokia提供了几个命令来完成各种任务

  • read:读取MBean属性
  • write:设置MBean属性
  • exec:在MBean上执行操作
  • list:列出可用的MBean及其属性和操作
  • search:搜索MBean
  • version:版本和服务器信息
  • notification:订阅并接收通知

接下来,让我们看看其中一些命令。

3.1 version命令

让我们导航到以下端点:

http://localhost:8080/actuator/jolokia/version

我们应该得到以下响应:

我们可以看到,我们得到了一些有关版本的信息,例如它是否安全,是否有代理等等。

3.2 list命令

现在,让我们通过执行list命令来获取所有可用MBean的列表

http://localhost:8080/actuator/jolokia/list

我们可以看到可用Bean的列表,以及每个Bean上允许的操作:

3.3 read命令

我们将尝试使用read命令获取有关堆内存使用情况的信息

http://localhost:8080/actuator/jolokia/read/java.lang:type=Memory/HeapMemoryUsage

正如我们在响应中看到的,HeapMemoryUsage属性的不同值是可见的:

3.4 exec命令

让我们通过执行exec命令来启动垃圾收集

http://localhost:8080/actuator/jolokia/exec/java.lang:type=Memory/gc

我们收到了200状态码,这意味着垃圾收集命令已被接受:

获取信息或对任何公开的MBean发起操作都很容易,但是,我们需要确保只有少数具有访问权限的人才能执行预期的操作

4. 保护Jolokia

正如我们所观察到的,Jolokia默认公开所有JMX资源。这肯定会带来问题,因为所有用户都被允许执行可能危害应用程序的所有操作。为了避免这种情况,我们需要保护端点。

4.1 禁用Jolokia端点

在生产服务器上,我们可以通过在应用程序属性中设置以下内容来完全禁用Jolokia:

management.endpoint.jolokia.enabled=false

4.2 使用安全规则限制访问

我们可以通过创建jolokia-access.xml文件并将其放在类路径中来配置安全规则

让我们创建一个,以便Jolokia访问由用户的IP地址保护:

<restrict>
    <remote>
        <host>127.0.0.1</host>
    </remote>
</restrict>

当我们尝试访问Jolokia端点时,我们得到了预期的错误:

接下来,我们将尝试限制某些命令或操作。例如,我们仅允许read和list命令:

<commands>
    <command>read</command>
    <command>list</command>
</commands>

现在,让我们尝试调用之前尝试过的垃圾收集的exec命令:

可以看到,由于我们只允许read和list操作,因此exec命令是被禁止的。

最后,我们还可以允许或拒绝某些MBean操作,这些操作甚至可以覆盖commands部分中的条目。

<allow>
    <mbean>
        <name>java.lang:type=Memory</name>
        <operation>gc</operation>
    </mbean>
</allow>

<deny>
<mbean>
    <name>jdk.management.jfr:type=FlightRecorder</name>
    <attribute>*</attribute>
    <operation>*</operation>
</mbean>
</deny>

我们已允许对Memory MBean执行gc操作。此外,在deny部分,我们已拒绝FlightRecorder MBean上的所有属性和操作。

5. 总结

在本文中,我们学习了如何将Jolokia与Spring Boot集成。首先,我们了解了初始设置和一些基本命令。

接下来,我们探讨了如何保护各种MBean的访问和操作,即通过限制IP地址、将命令列入白名单以及允许或拒绝某些MBean及其属性/操作。

Show Disqus Comments

Post Directory

扫码关注公众号:Taketoday
发送 290992
即可立即永久解锁本站全部文章