每次测试失败时,如何阻止 monit 运行 exec 语句?我的 monitrc 中的语句是:
check filesystem tmpfs with path /var
if space > 90% then exec "/usr/bin/logger -p daemon.crit 'MAJOR: space test'"
这看起来很奇怪,因为其他人问了一个问题,他正在发出警报,并且它具有我想要的行为。我准备开始扼杀Linux机器。
编辑:这是相反的情况重复监控警报
是不是因为他使用的是 alert 而不是 exec?
答案1
我以前曾多次处理过类似的问题。
monit
据我所知,事实是无法做到这一点。
您monit
可以处理X times
和/或Y cycles
指令,但或多或少,该exec
操作会被触发多次,具体取决于您花在解决问题上的时间。
所以,最后,我决定编写自己的检查脚本来根据标志处理所有逻辑。
我要与你们分享这个,然后你们接受或不接受,由你们自己决定。
第一的 :编写脚本来监控FS的使用情况,比如说/root/check_fsspace.sh
:
#!/bin/sh
myFS=/var
myTreshold=90
flagFile=/tmp/flag
spaceused=$(df -h | grep "$myFS" | tr -s " " | cut -d" " -f5 | cut -d"%" -f1)
if [ $spaceused -gt $myTreshold ]; then
if [ ! -f $flagFile ]; then
touch $flagFile
exit 1
else
exit 0
fi
fi
if [ $spaceused -le $myTreshold ]; then
rm -f $flagFile
exit 0
fi
我假设您能理解该脚本。如果不理解,请告诉我,我会解释。
第二 :设置您的monit
服务定义:
check program check_fs with path "/root/check_fsspace.sh"
if status != 0 then exec "/usr/bin/logger -p daemon.crit 'MAJOR: space test'"
答案2
从 Monit 5.16 版开始,“exec”操作(每次重复)的行为发生了变化
https://mmonit.com/monit/changes/
现在,exec 操作仅在状态改变时执行一次,与 alert 操作相同。
答案3
您可以使用cycles
指令来控制这一点。您希望多久记录一次?
假设 Monit 守护进程检查间隔为 60 秒,您可以说类似这样的话,“如果此操作在 X 个周期内失败,则执行脚本”。
但 Monit 很简单……每次达到此磁盘阈值时,它都会在发生故障时发出警报。这是设计使然。如果您经常达到阈值,以至于此日志记录操作令人烦恼,请尝试更改阈值。
Monit 将记录其状态循环到您的消息日志。
Mar 12 00:07:06 yo-mama monit[8577]: 'ppro' space usage 92.4% matches resource limit [space usage>85.0%]
Mar 12 00:08:06 yo-mama monit[8577]: 'ppro' space usage 92.4% matches resource limit [space usage>85.0%]
Mar 12 00:09:06 yo-mama monit[8577]: 'ppro' space usage 92.4% matches resource limit [space usage>85.0%]
Mar 12 00:09:07 yo-mama monit[8577]: 'ppro' space usage 92.4% matches resource limit [space usage>85.0%]
每次超过阈值时都会发出警报:
Resource limit matched Service ppro
Date: Wed, 12 Mar 2014 00:09:07
Action: alert
Host: yo-mama
Description: space usage 92.4% matches resource limit [space usage>85.0%]
Your faithful employee,
Monit