在本文中,我们学习了如何将 Jolokia 与 Spring Boot 集成。首先,我们了解了初始设置和一些基本命令。
接下来,我们探讨了如何保护各种 MBean 的访问和操作,即通过限制 IP 地址、将命令列入白名单以及允许或拒绝某些 MBean 及其属性/操作。
监控 Java 应用程序的性能和稳定性是一种常见的做法。Spring Boot通过Actuators提供这种监控功能。但是,我们可能需要更细粒度的控制或轻量级的方法来实现相同的目的。
J olokia帮助我们通过 API 端点监控应用程序,同时提供批量操作和安全机制等功能。
在本教程中,我们将研究如何将 Jolokia 集成到 Spring Boot 应用程序中。
我们现在来看看在我们的应用程序中启用 Jolokia 所需的步骤。
依赖关系
首先,我们需要添加Jolokia依赖项才能使用 Jolokia,它会添加传递依赖项和服务库:
<dependency> |
启用 Jolokia
默认情况下,Spring Boot Actuator 仅公开有限的端点。要启用 Jolokia,我们需要在应用程序的属性文件中进行配置:
management.endpoints.web.exposure.include=jolokia |
现在,添加了依赖项并配置了应用程序,当我们启动 Spring Boot 应用程序时就可以访问 Jolokia。
访问 Jolokia
Jolokia 提供了几个命令来完成各种任务:
- read:读取 MBean 属性
- write:设置 MBean 属性
- exec:在 MBean 上执行操作
- list:列出可用的 MBean 及其属性和操作
- search:搜索 MBean
- version:版本和服务器信息
- notification:订阅并接收通知
version 命令
让我们导航到以下端点:
http://localhost:8080/actuator/jolokia/version
我们可以看到,我们获得了一些有关版本的信息,例如它是否安全,是否有代理等等。
list命令
现在,让我们通过执行list命令来获取所有可用 MBean 的列表:
http://localhost:8080/actuator/jolokia/list
我们可以看到可用 bean 的列表,以及每个 bean 上允许的操作
读取命令
我们将尝试使用读取命令获取有关堆内存使用情况的信息:
http://localhost:8080/actuator/jolokia/read/java.lang:type=Memory/HeapMemoryUsage
正如我们在响应中看到的,HeapMemoryUsage属性的不同值是可见的.
exec命令
让我们通过执行exec命令来启动垃圾收集:
http://localhost:8080/actuator/jolokia/exec/java.lang:type=Memory/gc
我们收到了200 状态代码,这意味着垃圾收集命令已被接受.
获取信息或对任何公开的 MBean 发起操作都很容易。但是,我们需要确保只有少数具有访问权限的人才能执行预期的操作。
保护 Jolokia
正如我们所观察到的,Jolokia 默认公开所有 JMX 资源。这肯定会带来问题,因为所有用户都被允许执行可能危害应用程序的所有操作。为了避免这种情况,我们需要保护端点。
禁用 Jolokia 端点
在生产服务器上,我们可以通过在应用程序属性中设置以下内容来完全禁用 Jolokia:
management.endpoint.jolokia.enabled=false
使用安全规则限制访问
我们可以通过创建jolokia-access.xml文件并将其放在 classpath 中来配置安全规则。
让我们创建一个,以便 Jolokia 访问由用户的 IP 地址保护:
<restrict> |
当我们尝试访问 Jolokia 端点时,我们得到了预期的错误。
接下来,我们将尝试限制某些命令或操作。例如,我们仅允许读取和列出命令:
<commands> |
现在,让我们尝试 POST我们之前尝试过的垃圾收集的exec命令。
我们可以看到,由于我们只允许读取和列出操作,因此exec命令是被禁止的。
最后,我们还可以允许或拒绝某些 MBean 操作,这些操作甚至可以覆盖命令 部分中的条目。
<allow> |
我们已允许对Memory MBean 执行gc操作。此外,在拒绝部分,我们已拒绝FlightRecorder MBean 上的所有属性和操作。