Java的系统监视器

时间:2011-08-30 13:07:40

标签: java monitoring jmx monitor

我们正在为十几个客户运行服务器集群。每个客户在Jetty上都有一些应用服务器。这里重要的是:

  • 有许多Java进程需要监控。
  • 我需要能够按机器和客户对它们进行分组(切片)(一台机器可以为很多客户提供服务,每个客户都有很多机器)。
  • 我还需要收集并显示一些特定于域的每个客户数据。

我更愿意用JMX公开它们,尽管我仍然可以使用其他合理的解决方案。

我可以使用什么(最好是免费和开源)服务器进行监控?我需要能从所有这些服务器收集信息,保留历史记录,然后让我编写自定义仪表板进行演示。

我考虑过的一个解决方案是Hyperic,但它真的很笨拙,插件开发很糟糕。

4 个答案:

答案 0 :(得分:0)

您可能想尝试Nagios / Centreon这样的事情 - 您可以用Java编写插件(要么运行NRPE来运行连接到服务器的Java程序,要么运行实现NRPE协议的jNRPE,从而避免启动大量短期JVM) - 使用JMX命令行客户端(由Internet Archive等人制作)来查询JMX bean。

当然还有JConsole - 我相信你可以为此编写插件,但它可能无法胜任工作!

最后,jstat会生成很多关于GC和相关进程的很好的统计信息,您可以将它们直接传递给文件。虽然不是很图形化。

答案 1 :(得分:0)

如果您研究基于JMX的解决方案,可以尝试查看Manageengine。或者,您可以使用Graylog2来使用基于Syslog或AMQP的解决方案。

答案 2 :(得分:0)

您可以尝试使用BTrace从Jetty实例中获取所需的指标。 BTrace会将其输出记录到一组文件中,然后可以将其自动导入/导出到监视应用程序中。

我在InfoQ写了一篇关于BTrace的文章,可能对你很有帮助:http://www.infoq.com/articles/java-profiling-with-open-source

使用BTrace的好处是您可以以任何您喜欢的格式登录,并且您可以将指标分组以满足您的要求。

在文章中,它解释了如何使用EurekaJ对收集的指标进行分组,可视化和提醒。

您可以按自己喜欢的方式对指标进行分组:

  • 客户名称:机:应用:路径:到:公制
  • 机:应用程序:顾客:路径:到:公制
  • 应用程式:机器:顾客:路径:到:公制
  • 等。

使用BTrace,您可以从JVM中获得所需的任何内容,方法执行时间,内存使用情况,线程等。

答案 3 :(得分:0)

使用Nagios或其衍生物/分叉(Opsview,Icinga)

您可以设置双向监控

  1. 获取nagios以检查您的Jetty实例是否正在运行(使用URL戳它们并确保获得预期的积极响应)。有这种保持活检的标准插件
  2. 此外,如果出现问题,请让您的java进程和Web应用程序向Nagios发送警报(在Nagios中称为被动检查)(您可以使用我的库https://code.google.com/p/jsendnsca/进行此操作: - )
  3. nagios不仅会以这种方式监控您的java进程,还会监控您在您的业务中运行的任何其他服务(HTTP,FTP,SMTP服务)以及一般的健康状况(CPU,内存,负载平均值)