简单的服务器监控与Java

我试图find一个解决scheme,使我能够监视服务器的资源消耗。 最好,我想要获得的指标是networking利用率IO,如果可能的话,CPU利用率/负载平均值和磁盘IO。

我唯一的要求是这个信息可以通过Java获得,所以可以被操纵,至less在Linux(Fedora)上工作。

我听说过一些监控工具,但我不确定这个最好的方法。 我可能希望每隔30秒收集一次信息。

谢谢

更新:只是重新迭代,我指的是系统范围内的监控而不是Java特定的监控。 我只想用Java来访问这些指标

您可以选择将监视委托给像Cacti , Centreon或Zenoss这样的专用工具, 但这对于单个应用程序来说可能有点矫枉过正。

对于一个简单的解决方案,JMX可能确实是一个更好的解决方案 作为出发点,我建议阅读以下文章: 使用JMX 1.2和JConsole监视本地和远程应用程序 。 然后,查看使用JConsole监视应用程序 ,这是一篇非常详细的文章,展示了如何使用JConsole访问由Java平台提供的多个核心监视和管理功能,其中包括:

  • 检测低内存
  • 启用或禁用GC和类加载详细跟踪
  • 检测死锁
  • 控制应用程序中任何记录器的日志级别
  • 访问操作系统资源 – Sun的平台扩展
  • 管理应用程序的Managed Beans(MBeans)

但是,AFAIK,JMX不会让你访问网络IO,所以你可能需要结合使用这些工具。 幸运的是,许多工具(例如Cacti, SmokePing )使用RDD格式,您可以使用JRobin或rdd4j等Java API轻松进行操作。

你可以看看使用Ganglia监测工具。 它使用XML来表示数据,因此我认为从Java访问数据是相当简单的,而且还有其他优点,它被设计成具有高度可扩展性,可以记录大量的服务器指标机器。

我越来越喜欢collectd ,这是一个模块化的C守护进程,专注于监视(而不是绘制)多种插件 :

  • 读取 – 通常的CPU , I / O , 网络 , 负载 , 内存和JMX以及一些更有趣的功能,比如通过嗅探数据包来监视DNS请求 , 监视延迟/连接性 ,以及“尾部” SSH登录尝试或传入的电子邮件
  • – 发送读取到CSV文件 , 远程主机 , RRDtool , Unix套接字 , 网络服务器
  • 通知 – 通过libnotify或电子邮件
  • 绑定 – Perl , Python和(最重要的是为了您的目的) Java

似乎有几个选项可以让你的Java代码得到指标:

  • 使用前面提到的Java插件来注册写回调以接收来自各种其他插件的数据
  • 在网络上,通过将jcollectd ( collectd协议的Java实现)嵌入到您的应用程序中
  • 通过写入CSV或RRD文件并使用Java的各种RRD实现之一来间接进行

你最好的选择可能会在/ proc中查看所有的系统资源使用情况/ proc / cpuinfo和/ proc / net /是一个很好的开始。

Runtime.exec有什么问题(“一些命令”)?

我不确定这是否有助于您的查询。 恕我直言,仙人掌和Centreon似乎太复杂,不能像你的要求那么简单。 有更简单的工具用于服务器监控,如New Relic和SeaLion 。 SeaLion是我目前最喜欢的。 它提供了简单的默认命令,涵盖了大部分的基本要求(也可能涵盖你的)。 这也是非常简单的设置和免费的。 你可以试试这些。