java - 使用 Jolokia 监控同一 Tomcat 服务器上 webapp 的 JMX 端点

标签 java python tomcat jmx jolokia

Jolokia对我来说是未知领域,在阅读文档后,我仍然不确定它是否适用于我想到的场景。

设置:

  • Tomcat 应用服务器(版本范围从 6.x 到 7.x),通常在 Windows 平台上,偶尔也有 Linux 版本。
  • 部署启用了 JMX 监控的第三方 Java 网络应用程序 (SAP BusinessObjects)(可通过 RMI 访问)。

可能的问题:

  • 要监控的 Java 网络应用程序是商业和封闭源代码,因此无法修改。唯一可以更改的是 JMX 端口号
  • JMX 端点是自定义端点,因此不是默认的 jmxrmi 端点。
  • JMX 连接需要身份验证。

目标:

我想做的是将 Jolokia WAR 文件部署到 Tomcat 服务器上,然后对其进行配置,以便我可以从其他 Web 应用程序读取 MBean 属性。

我会使用 Python(第 3 版)和 Requests 自己编写客户端代码HTTP 库。

我一直在通读 Jolokia 文档(同样,此时我完全是新手),但无法弄清楚这是否可行(因为我似乎无法找到在哪里输入 JMX/RMI url 或身份验证信息)。

问题:

  1. 我可以为这个设置使用 WAR 代理吗?
  2. 如果不是,你能解释一下原因吗(所以我能理解,不是因为我不相信你)。另外,是否还有其他代理更适合这种情况?
  3. 如果是,您能否为我指明正确的方向,如何将 Jolokia 配置为要连接到的 Web 应用程序?

最佳答案

首先,Jolokia 完全通过了 JSR-160 连接器,因此不需要任何 JMX/RMI 身份验证。 Jolokia 的全部目的是通过 HTTP/JSON 为内部 JMX 子系统提供一个桥梁。根据代理的不同,您可以很容易地保护 Jolokia。对于 WAR 代理,保护与任何 Java EE Web 应用程序相同:为 tomcat 设置一些角色和用户(例如,在 tomcat-users.xml 中)并在安全约束中引用角色jolokia.war/WEB-INF/web.xml

您的问题:

  1. 是的,你可以。如果您没有任何特定的身份验证需求,只需将 jolokia.war 放入 tomcat 的 /webapps 目录中。我建议在添加安全性之前先尝试这个。要卸载代理,只需删除 war 即可。

  2. 作为替代方案,您还可以使用 JVM 代理,它会在额外的端口(默认值:8778)上打开自己的 HTTP 服务器。更多信息请参见 reference manual

  3. 不需要专门连接到 Web 应用程序,因为 MBean 已在全局注册并且可以从 JVM 中的任何位置访问。 Web 应用程序当然应该仔细选择它公开的管理信息。因此,不需要额外的步骤,您可以直接访问 WEB 应用程序的 MBean(除非它在 ​​Java 安全性方面做了一些不寻常的事情,但我不这么认为)。

要测试安装,只需使用浏览器和上下文 /jolokia(例如“http://localhost:8080/jolokia”)连接到 Tomcat。您应该看到有关代理本身的版本信息。

下一步将是探索 JMX namespace ,要么使用浏览器(和操作“列表”,如 http://localhost:8080/jolokia/list ,但这很乏味),要么使用客户端,如 j4pshhawt.io .希望您会找到您正在寻找的 Web 应用程序的 MBean。

关于java - 使用 Jolokia 监控同一 Tomcat 服务器上 webapp 的 JMX 端点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29116942/

相关文章:

java - 为什么 CTE 查询在 Hibernate 中不起作用?

java - Spring io @Autowired : The blank final field may not have been initialized

Python "Error ' dict' 对象没有属性 'load' "

maven - 不能做 mvn tomcat :deploy because of http response 405

tomcat - 带有 httpOnly 标志的 session cookie

java - 在 java 路径上找不到 Tomcat native 库

java - 当我将 GridBagLayout 添加到 JFrame 时,它​​不起作用

java - 如何在 Java 中查找 Chrome 下载路径

python - 如何从Python中的字典列表中合并字典?

python - 确定 TreeView 行的高度