【问题标题】:Monitoring on OSGi/Equinox在 OSGi/Equinox 上监控
【发布时间】:2012-07-12 12:25:31
【问题描述】:

我们使用 Equinox 作为我们应用的运行时。 OSGi 的模块化非常棒,但是我在 JBoss 时代怀念一件事:监控设施。 JMX 是 JVM 中的监控标准,但 Equinox 似乎没有为其提供太多内置支持。

除了 Equinox Resource Monitoring 项目,该项目自 2007 年以来似乎已经过时(并且没有退出孵化期),还有哪些选择?

还有哪些其他 OSGi/Equinox 采用者用于监控基于 OSGi 的应用程序?其他 OSGi 实现呢?这对于触发迁移非常重要,例如Felix+Karaf 将提供更好的监控支持。

【问题讨论】:

    标签: java osgi monitoring jmx


    【解决方案1】:

    有几个选项可用。 Gemini Management 为框架的 JMX 监控提供了 OSGi 标准的实现。

    如果您想监控 Servlet 环境,您需要查看 Servlet 引擎提供的选项。我们在Gyrex 中包含了 Jetty,它提供了几个选项。我们还添加了一些 JMX bean 来测量平均请求时间、关于最后一个错误的信息等等。

    实现您自己的 JMX bean 实际上并不困难。您可以从代码中的任何位置调用ManagementFactory.getPlatformMBeanServer().registerMBean(...) 来注册bean。看看our service tracker implementation,它为每个注册的特定类型的服务对象注册了一个 JMX 监控 bean。

    【讨论】:

    • +1 很棒。这就是我一直在寻找的。是否支持“可管理”服务的白板注册?我想为 JMX 管理公开我的服务的某些部分(队列大小、执行时间、使用的线程数等......)。最好有一些标记 itf(例如 Manageable)并让服务将它们注册到 MBean 服务器。也许重用您的服务跟踪器 impl 并使其适用于更多 MetricSet
    • 这是英超联赛。随意重用服务跟踪器实现。从头开始也很容易。只需创建一个带有服务跟踪器(或 DS 组件)的“监控器”包,它可以跟踪您的所有服务并为它们注册 MyServiceMBean。我使用了 DynamicMBean,但如果您非常了解自己的服务,也可以使用“静态”MBean。 “MetricSet”对象我们有一个动态的指标集合。
    【解决方案2】:

    我推荐使用 Apache Karaf。您可以将它与 Felix 或 Equinox 一起使用。它提供了很多监控功能。只需启动 karaf 并连接 Jconsole。除了 JMX,它还有 Felix Web 控制台和一个很棒的命令行,也可以通过 ssh 使用。

    【讨论】:

      【解决方案3】:

      我在搜索Equinox + JMX 时发现了这个线程。由于这个线程来自 2012 年,其他人可能会在未来出现这个问题,因此是时候添加另一个适合我的解决方案了。

      您可以轻松使用Aries JMX。您可以在下面找到 Aries 文档的总结。为此添加

      • 一个简单的捆绑包

        import java.lang.management.ManagementFactory;
        import javax.management.MBeanServer;
        import org.osgi.framework.BundleActivator;
        import org.osgi.framework.BundleContext;
        
        public class Activator implements BundleActivator {
            public void start(BundleContext context) throws Exception {
                MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
                context.registerService(MBeanServer.class.getName(), mbs, null);
            }
        
            public void stop(BundleContext context) throws Exception {}
            }
        }
        
      • Aries JMX Bundle

      • Aries JMX API Bundle
      • Aries Util Bundle

      因此可以通过例如访问 Equinox Container JConsole。

      【讨论】:

        【解决方案4】:

        Apache Felix Web 控制台是一个非常强大的工具,用于监控 OSGi 容器的状态。它也可以在 Equinox 中运行。

        http://felix.apache.org/site/apache-felix-web-console.html

        【讨论】:

        • 您将如何检测您的应用程序以便可以从该控制台对其进行管理?这就是我感兴趣的事情。
        • 只需在您的 OSGi 环境中包含 webconsole 包(及其依赖项)。上面的链接描述了所有的部署/安装细节。
        • 抱歉不清楚:此 Web 控制台可让您监控 OSGi 运行时(捆绑包、配置)。我想监控我的应用程序。假设我有一个执行队列,我想监控它在生产中的长度。在 javaEE 中你会用 JMX 做这种事情,但是在 OSGi 中似乎缺乏对 JMX 的支持,那么有什么选择呢?
        • PS:我对OSGi环境的管理非常熟悉。在 Equinox 中,我使用 CLI 控制台,虽然很粗略,但让我们做 web 控制台可以做的事情(并且在云部署中更容易访问 - 你知道,运维人员喜欢 CLI :-))
        • 虽然核心 OSGi 不包含 JMX,但有一个针对 JMX 的企业 OSGi 标准,并且大多数企业 OSGi 服务器都包含 OSGi 支持。
        猜你喜欢
        • 1970-01-01
        • 2014-11-02
        • 1970-01-01
        • 2010-11-06
        • 1970-01-01
        • 2013-05-30
        • 2013-08-02
        • 1970-01-01
        • 2015-02-26
        相关资源
        最近更新 更多