再会。
就像你们大家知道的(和我都知道)一样,有很多监控软件(开源或非开源),我说的是 Nagios、Hyperic、OpenNMs、Tivoly、Microsoft……
正如你们都知道的,提取 Tomcat 服务器信息的最佳方式是通过正确保护的 JMX bean。
嗯,我的问题是双重的:
第一的: 监控服务器的默认轮询时间太长了。五分钟的轮询无法检测到问题或使用高峰,甚至无法检测到重新启动。
解决这个问题的方法很简单,只需将轮询时间减少到 5 秒(或更短)。
这可能会使服务器饱和,但这很容易解决。(更多铁)
无论如何,这次投票时间将我们引向了第二个问题
第二:
如果我以 5 秒的间隔拉取 JMx 计数器,并且我会为每个 tomcat 实例获得大约 5 个计数器,并且我们有超过 15 台服务器...
也就是说每 5 秒有 375 个样本。每分钟有 4500 个样本。是的。数据库会增长得非常快。
原因很多样本:
我实际上不需要每个样本,而是需要给定时间段(10 分钟)内的平均值。但如果以 10 分钟为间隔拉计数器,我将丢失大量信息,而这些信息是检测问题、每月使用图表所必需的……
问题:
所以,问题很简单。是否有任何软件可以频繁提取但仅存储给定时间段内的样本平均值?
手动解决方法
当然,这个问题有“手动”选项......也许是数据库上的日常任务,计算一段时间内表的平均值......
或者基于 perl 的脚本进行迭代...然后将其存储在数据库中
但在进行编程之前,我正在网上查找并询问。
提前致谢
答案1
首先,我认为你误解了监控系统的用途。在大多数情况下,检测每个小峰值都是过度的,而对于检测服务器的重启,读取日志文件并记录/绘制正常运行时间信息可能是更好的方法。
尽管如此,许多图形系统,如 MRTG、Munin 或 Cacti,都使用了优秀的rrd工具Tobi Oetiker 开发的这款工具可以完全满足您的需求:它可以存储一天中每隔一分钟的数据(1440 个值)、上周的 5 分钟平均值、一个月的每小时平均值等等。一天之后,它将覆盖每日数据库中的旧值(因此得名:循环数据库工具)。
答案2
我完全同意 SvenW 的观点,不过我认为你可以这样做扎比克斯(其他监控系统也可以)。将信息收集间隔设置为 5 秒似乎是可行的,Zabbix HouseKeeper 守护进程随后将根据您在监控项上设置的保留参数进行趋势计算。
答案3
你可能会考虑看看jmx4perl它带有非常强大的 Nagios 插件检查_jmx4perl。对于您的用例,jmx4perl-Agent 的历史模式可能尤其有趣。它允许在代理的内存中保存可配置数量的最近查询的值,并在每次请求时返回它们。有了这些数据,可以轻松计算平均值,而无需客户端存储。
目前,check_jmx4perl 使用此历史模式来监控增长率(例如内存分配的速度),用于计算平均值,目前还没有现成的功能。但这对 check_jmx4perl 来说是一个很好的补充,所以我会考虑在下一个版本中加入它。不过,您需要调整 Nagios 轮询间隔。借助所谓的批量请求,您可以一次获取某个服务器的所有计时器的值。
5 秒的轮询间隔是否合理仍值得怀疑。对于您的用例,最好安装一个具有内部调度(线程)的 MBean(可能在专用 servlet 中),以如此高的频率在内部查询计时器,并仅将平均值作为单个 JMX 属性公开,然后可以进行查询。这应该不难编写。