Monit 是否可以使用条件执行 Sysfence 样式的平均负载计算?

Monit 是否可以使用条件执行 Sysfence 样式的平均负载计算?

我即将在 RHEL Linux 机器上从 Sysfence 迁移到 Monit,我想知道是否可以在 Monit 中创建以下 sysfence 等效项。

Sysfence 配置(部分)

例如,我们的 sysfence.conf 文件声明以下内容来检查平均负载条件。

rule "high load" {
  la1 >= 5.0 and
  {
     { la5 > 3.0 }
     or
     { la15 > 2.0 }
  }
}
run '/bin/high-load.sh'
step 300

Monit 配置(尝试模拟 Sysfence 平均负载条件)

对于 monitrc 文件,我创建了以下语句,该语句通过了配置语法检查,但警报仅提供 15 分钟负载平均值的捕获值,而不是所有条件的值。一个显着的区别是使用“或”代替第二个“和”会在 monit 启动时产生语法错误,因此据我所知“或”逻辑是不允许的。

check system our.server.tld
  if loadavg (1min) > 1 and loadavg (5min) > 0.5 and loadavg (15min) > 0.25 then alert

对于测试用例,我使用更小的触发值,以便在当时使用很少的测试箱上更快地达到阈值。在这种情况下,当满足其中一个条件(15 分钟负载平均值)时,我收到了以下警报,其中没有提及 1 分钟和 5 分钟负载平均值,即使其他条件不满足,因此似乎“和”条件被忽略了。

实际负载平均值为:平均负载:0.34、0.47、0.53。我在流量很少的服务器上进行测试,并运行了寻找命令会增加系统负载。另外,似乎只允许一位小数,因此 15 分钟检查的 0.25 值显然被四舍五入了。

Monit 发送的警报电子邮件

Resource limit matched Service our.server.tld

Date:        Thu, 01 Nov 2012 11:34:58
Action:      alert
Host:        our.server.tld
Description: loadavg(15min) of 0.5 matches resource limit [loadavg(15min)>0.2]

Your faithful employee,
Monit

答案1

我想我知道你想要实现什么……

用简单的英语来说,你想说的是,

“如果 1 分钟平均负载大于或等于 5.0 并且 5 分钟平均负载大于 3.0 或 15 分钟平均负载大于 2.0,则发送警报”

这不是我希望看到的监控方法,因为它会产生很多噪音。此外,恢复的阈值如何处理?你认为真的想要阻止或收到通知?高负载且持续负载,对吗?

在 Monit 中,我会使用“cycles”关键字来控制它。

假设周期变量为 60 秒,

check system localhost
   # Send alert if 1-minute average is > 5 for 5 minutes
   if loadavg (1min) > 5 for 5 cycles then alert 

相关内容