是否有任何监控软件能够几乎连续地拉动并将平均值保存到数据库中?

是否有任何监控软件能够几乎连续地拉动并将平均值保存到数据库中?

再会。

就像你们大家知道的(和我都知道)一样,有很多监控软件(开源或非开源),我说的是 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 属性公开,然后可以进行查询。这应该不难编写。

相关内容