使用Java进行简单的服务器监控

11
我正在寻找一种解决方案,可以监控服务器的资源消耗。最好能够获取网络利用率IO以及如果可能的话CPU使用率/负载和磁盘IO等指标信息。
我唯一的其他要求是该信息可由Java获取并进行操作,并且至少可在Linux(Fedora)上运行。
我听说过一些监控工具,但我不确定最佳方法。我可能需要每30秒收集一次有关信息。
更新:再次强调,我的意思是整个系统的监控,而非仅针对Java的监控。我只想使用Java来访问这些指标。

你的问题不够清楚。当你说“服务器”时,你是指“一个服务器进程”还是指整个服务器本身?听起来你是指后者,但下面的JMX答案是从你指前者的角度写的。 - oxbow_lakes
如果我的表述不够清晰,我很抱歉——我说的是整个服务器,因为我想了解服务器的健康状况以便进行扩展。最重要的指标是网络利用率。 - MSR
2
如果网络利用率是最重要的指标,我不确定 JMX 是否能帮到你,我会考虑使用 Cacti 和 Java API 来读取 RDD 数据。 - Pascal Thivent
7个回答

3
你可以选择将监控委托给专用工具,例如CactiCentreonZenoss,但这可能对于单个应用程序有些过度。
对于简单的解决方案,JMX可能确实是更好的选择。作为起点,我建议阅读以下文章:使用JMX 1.2和JConsole监控本地和远程应用程序。然后,请查看使用JConsole监控应用程序,这是一篇非常详细的文章,展示了如何使用JConsole访问Java平台提供的几个核心监控和管理功能,包括:
  • 检测低内存
  • 启用或禁用GC和类加载详细跟踪
  • 检测死锁
  • 控制应用程序中任何记录器的日志级别
  • 访问操作系统资源-Sun的平台扩展
  • 管理应用程序的托管Bean(MBeans)

但是,据我所知,JMX无法访问网络IO,因此您可能需要结合使用这些工具。幸运的是,许多工具(例如Cacti、SmokePing)使用RDD格式,您可以使用Java API(如JRobinrdd4j)轻松操作。


2

只是想把RHQ (http://rhq-project.org/) 加入其中 :-)


2
我越来越喜欢collectd,这是一个以监控(而不是绘图)为重点的模块化 C 守护进程,并有大量的插件 似乎有几种选项可以将度量指标传递到您的Java代码中:
  • 在进程内,使用前面提到的Java插件注册一个写回调函数,以从其他各种插件接收数据
  • 通过在应用程序中嵌入jcollectd(collectd协议的Java实现)来通过网络传输
  • 间接地,通过编写CSV或RRD文件并使用各种Java RRD实现之一进行传输

1
你可以考虑使用Ganglia监控工具。它使用XML作为数据表示方式,因此我想从Java访问数据应该是相当简单的。此外,它还具有高度可扩展性的设计优势,可以记录大量机器上的服务器指标。

0

Runtime.exec("some command")有什么问题吗?


0
你最好在/proc目录下查找系统资源使用情况,/proc/cpuinfo和/proc/net/是一个不错的起点。

-1

我不确定这是否能帮助您的查询。在我看来,Cacti和Centreon似乎过于复杂,不值得花费时间去满足您如此简单的需求。 有更简单的服务器监控工具,例如New RelicSeaLion。SeaLion是我目前最喜欢的工具。它提供简单的默认命令,涵盖了大多数基本要求(可能也包括您的要求)。它也非常容易设置,并且是免费的。您可以尝试使用这些工具。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接