Java jolokia和;jmxtrans?什么时候选择一个而不是另一个?

Java jolokia和;jmxtrans?什么时候选择一个而不是另一个?,java,jmx,Java,Jmx,我正在寻找一个JMX查询工具。我遇到过jolokia和jmxtrans,它们都支持基于JSON的查询。JMXtrans拥有监控工具的编写者,我认为这在Jolokia中是缺失的。我在谷歌上搜索了一下,但是我没有得到太多的信息来比较这两者。 但我读过这两种工具的正面博客文章。如果有人之前使用过这些,请分享你的经验…我是jmxtrans的作者。在开发jmxtrans之前,我考虑过Jolokia。我选择使用jmxtrans进行开发,因为我考虑了不同的用例 乔洛基亚在《雄猫》中扮演战争角色。它与jmxtr

我正在寻找一个JMX查询工具。我遇到过jolokia和jmxtrans,它们都支持基于JSON的查询。JMXtrans拥有监控工具的编写者,我认为这在Jolokia中是缺失的。我在谷歌上搜索了一下,但是我没有得到太多的信息来比较这两者。
但我读过这两种工具的正面博客文章。如果有人之前使用过这些,请分享你的经验…

我是jmxtrans的作者。在开发jmxtrans之前,我考虑过Jolokia。我选择使用jmxtrans进行开发,因为我考虑了不同的用例

乔洛基亚在《雄猫》中扮演战争角色。它与jmxtrans的相似之处在于它允许您查询JMX服务器,但这就是相似性的终点。您需要在Jolokia之上实现其余的jmxtrans,以实现特性奇偶校验

另一方面,jmxtrans是独立的,对Tomcat没有任何要求。我的目标受众是netops/devops角色。它配置了一个相对简单的基于JSON的结构,因此不需要工程学位来配置和使用它

其思想是使用jmxtrans持续监视通过jmx公开统计信息的服务。您可以使用jmxtrans将数据从jmx“转换”为所需的任何输出格式。一般来说,devops人员希望将他们的JVM与某种监控解决方案(如Graphite/Ganglia)集成,因此我为这些工具提供了输出编写器

jmxtrans在如何对jmx服务器进行查询方面也非常聪明,为此进行了一些优化。还有很多工作要做,比如并行处理对多个服务器的请求,以便扩展jmxtrans,用一个jmxtrans实例连续查询数百个服务器


我希望这能澄清一些事情。如果您有任何具体问题,我很乐意回答。

事实上,jmxtrans和Jolokia的关注点不同。Jmxtrans是一个完整的监控解决方案,它有一个调度器,定期查询JMX请求,并将结果发送到graphite或rrdtool等后端。它使用标准JSR-160(基于RMI)通信来查询支持JMX的Java服务器

另一方面是HTTP/JSON-JMX适配器,它允许非Java客户端轻松访问,并添加了一些纯JSR-160实现所不具备的独特功能。为了集成到监控平台中,还需要另一个软件。对于Nagios,它提供了一个功能齐全的Nagios插件,用于查询Jolokia代理

由于我是Jolokia的作者,让我强调一下Jolokia的一些亮点

  • 许多请求可以作为单个批量请求一次发送。这允许通过一次HTTP转换查询数百个属性。这在大型环境中确实会产生巨大的差异
  • 由于HTTP的使用,Jolokia允许轻松地跨防火墙边界进行查询(这在使用标准JMX连接器时是一场噩梦)
  • 通过使用普通XML策略文件,可以轻松实现细粒度授权
  • 代理不仅可用于Tomcat或任何其他Java EE容器,还可用于任何Java 6应用程序(例如ActiveMQ或Camel)
  • Jmx4Perl附带了一套不错的命令行工具(例如,基于读取行的JMX shell,具有上下文相关的命令完成功能)
  • 从Perl、Javascript、Python等访问库。。。都有
  • 。。。。有关更多信息,请参阅

总而言之,我认为当您需要一个基于JSR-160远程处理的完整监控解决方案时,应该使用jmxtrans(不过,您也可以使用Nagios和check_jmx4perl),当您需要克服JSR-160的限制或可以从其独特特性中获益时,应该使用Jolokia。人们甚至可以想象将Jolokia集成到jmxtrans中,以便与要监视的服务器进行通信,然后通过JSON/HTTP而不是JSR-160 RMI(也许这也澄清了不同的焦点和支持的用例)

让我再提出一个项目- 它使用正则表达式和变量替换查询JMX数据,还支持JDBC查询作为度量源(主要用于监视oracle db统计数据)和apache mod_qos的mod_qos。我们只需要石墨作为输出,这是它目前支持的唯一输出

顺便说一句,JMX端口在防火墙上是有问题的,因为hotspot在启动时会随机选择一个临时端口。使用jrockit,可以使用标准jvm选项指定它(到与注册表相同的端口)。要在热点上执行此操作,您需要自己编写代码(或者重用代码,例如来自tomcat jmx连接器的代码)。好的方面是,可以将两个端口设置为相同的值,因此只需要一个防火墙规则

干杯
Dimo

感谢Jon提供的详细答案以及您构建的工具。。!!嗨,乔恩,我们又见面了!你不会记得我的,我用了你的安魂叉(谢谢!)。然后我在寻找一种收集和绘制度量的方法,然后我想…为什么不直接使用JMX,然后将JMX数据发送到graphite。。。我发现了你开发的jmxtrans!:)再次感谢!:)看看JMX2。它是一个线性工具,用于轮询JMX并每X秒将其转储到Graphite。不需要配置。