使用 Jolokia 监控同一 Tomcat 服务器上 webapp 的 JMX 端点
Use Jolokia to monitor JMX endpoint of webapp on same Tomcat server
Jolokia 对我来说是未知领域,在阅读文档后,我仍然不确定它是否适用于我想到的场景。
设置:
- Tomcat应用服务器(版本从6.x到7.x),通常在Windows平台上,偶尔有Linux的味道。
- 部署第三方 Java Web 应用程序 (SAP BusinessObjects),启用 JMX 监控(可通过 RMI 访问)。
可能的陷阱:
- 要监视的 Java Web 应用程序是商业和封闭源代码,因此无法修改。唯一可以更改的是 JMX 端口号
- JMX 端点是自定义端点,因此不是默认
jmxrmi
端点。
- JMX 连接需要身份验证。
目标:
我想做的是将 Jolokia WAR 文件部署到 Tomcat 服务器上,然后对其进行配置,以便我可以从其他 Web 应用程序读取 MBean 属性。
我会使用 Python(版本 3)和 Requests HTTP 库自己编写客户端代码。
我一直在阅读 Jolokia 文档(同样,此时我完全是新手),但无法弄清楚这是否可行(因为我似乎无法找到在哪里输入 JMX/RMI url 或身份验证信息)。
问题:
- 我可以使用 WAR 代理进行此设置吗?
- 如果不是,能否请您解释一下原因(这样我就能理解,不是因为我不相信你)。还有,有没有更适合这种场景的agent?
- 如果是,你能给我指出正确的方向吗?如何将 Jolokia 配置到要连接的 Web 应用程序?
首先,Jolokia 完全通过了 JSR-160 连接器,因此不需要任何 JMX/RMI 身份验证。 Jolokia 的全部目的是提供 HTTP/JSON 到 internal JMX 子系统的桥梁。根据代理的不同,您可以很容易地保护 Jolokia。对于 WAR 代理,保护与任何 Java EE 网络应用程序相同:为 tomcat(例如 tomcat-users.xml
)设置一些角色和用户,并在中引用角色jolokia.war
的 /WEB-INF/web.xml
.
中的安全限制
针对您的问题:
是的,你可以。如果您没有任何特定的身份验证需求,只需将 jolokia.war 放入 tomcat 的 /webapps
目录中。我建议在添加安全性之前先尝试这个。要卸载代理,只需删除 war.
作为替代方案,您还可以使用 JVM 代理,它会在额外的端口(默认值:8778)上打开自己的 HTTP 服务器。 reference manual
中有更多相关信息
不需要专门连接到 Web 应用程序,因为 MBean 是全局注册的,并且可以从 JVM 中的任何位置访问。 Web 应用程序当然应该 select 小心它公开的管理信息。因此,不需要额外的步骤,您可以直接访问 WEB 应用程序的 MBean(除非它在 Java 安全性方面做了一些不寻常的事情,但我不这么认为)。
要测试安装,只需使用浏览器和上下文 /jolokia
(例如“http://localhost:8080/jolokia”)连接到 Tomcat。您应该看到有关代理本身的版本信息。
下一步将是探索 JMX 命名空间,或者使用浏览器(和操作 "list",就像 http://localhost:8080/jolokia/list , but that's tedious) or with a client like j4psh or hawt.io 一样。希望您会找到您正在寻找的 Web 应用程序的 MBean。
Jolokia 对我来说是未知领域,在阅读文档后,我仍然不确定它是否适用于我想到的场景。
设置:
- Tomcat应用服务器(版本从6.x到7.x),通常在Windows平台上,偶尔有Linux的味道。
- 部署第三方 Java Web 应用程序 (SAP BusinessObjects),启用 JMX 监控(可通过 RMI 访问)。
可能的陷阱:
- 要监视的 Java Web 应用程序是商业和封闭源代码,因此无法修改。唯一可以更改的是 JMX 端口号
- JMX 端点是自定义端点,因此不是默认
jmxrmi
端点。 - JMX 连接需要身份验证。
目标:
我想做的是将 Jolokia WAR 文件部署到 Tomcat 服务器上,然后对其进行配置,以便我可以从其他 Web 应用程序读取 MBean 属性。
我会使用 Python(版本 3)和 Requests HTTP 库自己编写客户端代码。
我一直在阅读 Jolokia 文档(同样,此时我完全是新手),但无法弄清楚这是否可行(因为我似乎无法找到在哪里输入 JMX/RMI url 或身份验证信息)。
问题:
- 我可以使用 WAR 代理进行此设置吗?
- 如果不是,能否请您解释一下原因(这样我就能理解,不是因为我不相信你)。还有,有没有更适合这种场景的agent?
- 如果是,你能给我指出正确的方向吗?如何将 Jolokia 配置到要连接的 Web 应用程序?
首先,Jolokia 完全通过了 JSR-160 连接器,因此不需要任何 JMX/RMI 身份验证。 Jolokia 的全部目的是提供 HTTP/JSON 到 internal JMX 子系统的桥梁。根据代理的不同,您可以很容易地保护 Jolokia。对于 WAR 代理,保护与任何 Java EE 网络应用程序相同:为 tomcat(例如 tomcat-users.xml
)设置一些角色和用户,并在中引用角色jolokia.war
的 /WEB-INF/web.xml
.
针对您的问题:
是的,你可以。如果您没有任何特定的身份验证需求,只需将 jolokia.war 放入 tomcat 的
/webapps
目录中。我建议在添加安全性之前先尝试这个。要卸载代理,只需删除 war.作为替代方案,您还可以使用 JVM 代理,它会在额外的端口(默认值:8778)上打开自己的 HTTP 服务器。 reference manual
中有更多相关信息
不需要专门连接到 Web 应用程序,因为 MBean 是全局注册的,并且可以从 JVM 中的任何位置访问。 Web 应用程序当然应该 select 小心它公开的管理信息。因此,不需要额外的步骤,您可以直接访问 WEB 应用程序的 MBean(除非它在 Java 安全性方面做了一些不寻常的事情,但我不这么认为)。
要测试安装,只需使用浏览器和上下文 /jolokia
(例如“http://localhost:8080/jolokia”)连接到 Tomcat。您应该看到有关代理本身的版本信息。
下一步将是探索 JMX 命名空间,或者使用浏览器(和操作 "list",就像 http://localhost:8080/jolokia/list , but that's tedious) or with a client like j4psh or hawt.io 一样。希望您会找到您正在寻找的 Web 应用程序的 MBean。