有没有任何监测软件能够做到几乎持续的拉动并将平均值保存到数据库?

美好的一天。

像所有你知道的,(和我)有很多监控软件(开源或不是),我正在谈论Nagios,Hyperic,OpenNM,Tivoly,微软…

像所有人都知道的那样,提取Tomcat服务器信息的最好方法是通过正确安全的JMX bean。

那么,我的问题是双重的:

第一:监视服务器的默认轮询时间太长。 五分钟拉不能检测到问题或使用高峰,甚至重新启动。

解决这个问题就像将轮询时间缩短到5秒(或更短)一样简单。

这可能会使服务器饱和,但这很容易解决。 (更多铁)

无论如何,这个投票时间导致我们2º的问题

第二:

如果我在5秒的时间间隔内取出JMx计数器,并且每个tomcat实例约有5个计数器,并且我们有15个以上的服务器…

这是每5秒375个样本。 每分钟4500个样本。 是。 数据库将增长得非常快。

原因很多样本:

我不是真的需要每个样本,但他们在给定的时间段(10分钟)的平均值。 但是如果在10分钟的时间内拉一下计数器,我就会失去很多信息,我需要检测问题,每月使用graphics…

题:

所以,这个问题很简单。 有没有什么软件可以很有效地拉动,但是只能存储特定时期的平均值?

手动解决方法

当然,这个问题有“手动”的select…也许日常任务在数据库中计算一个时期的表的平均值…

或者是一个基于perl的脚本,可以进行迭代…然后将其存储在数据库中

但是在编程之前,我正在网上查询。

提前致谢

首先,我认为你误解了监控系统的使用。 在大多数情况下,检测每个小高峰是过度的,为了检测服务器的重启,读取日志文件以及logging/绘制正常运行时间信息是更好的方法。

也就是说,像MRTG,Munin或Cacti这样的许多graphics系统都使用Tobi Oetiker的优秀rrdtool来完成你想要的function:它存储数据,例如每天一分钟(1440个值),上周5分钟的平均数据,一个月的小时平均值等。一天之后,它会覆盖日常数据库中的旧值(因此名称为“循环数据库”工具)。

我完全同意SvenW,不过我认为你可以用Zabbix (其他监控系统也可以)做到这一点。 设置信息收集间隔小至5秒似乎是可行的,Zabbix HouseKeeper守护进程将根据您放置在监视项目上的保留参数,执行之后的趋势计算。

你可能会考虑看看jmx4perl ,它带有一个非常强大的Nagios插件check_jmx4perl 。 对于你的用例,特别是jmx4perl-Agent的历史模式可能会很有趣。 它允许在代理的内存中保留最近查询的值的可configuration数量,并在每个请求中返回它们。 有了这些数据,平均值可以轻松计算,而无需客户端存储。

目前,check_jmx4perl使用这种历史模式来监视增加速率(例如,内存被分配的速度有多快),计算平均值时,没有什么可用的。 但是这将是check_jmx4perl的一个很好的补充,因此我将在下一个版本中考虑这个问题。 不过,您需要调整您的Nagios轮询时间间隔借助于所谓的批量请求,您可以一次获取某个服务器的所有计时器的值。

5s轮询间隔是否有意义仍然值得怀疑。 对于你的用例来说,安装一个MBean(也许在一个专用的servlet中)和一个内部调度(线程)会好得多,这个内部调度(线程)在内部以这么高的频率查询定时器,并且只将平均值作为一个JMX属性公开那么可以查询。 这应该不是很难编码。