我们有一个基于bash脚本的警报监视系统,该系统每5分钟通过crontab运行一次,并在发现任何错误时发送电子邮件通知。
但是由于这个原因,当发生问题时,我们的邮箱充斥着错误电子邮件。
我们的要求很简单
每分钟运行cronjob进行日志监视。
发送警报,因为它仅发生3次,但这些警报应该仅在3分钟的间隔内发生。如果警报发生的时间间隔为10分钟或更长时间,则无需暂停电子邮件警报
在3分钟的时间间隔内,一旦警报发生3次,则电子邮件通知应至少暂停或停止20分钟(以使我们的邮箱不会被淹没)。然后,监视脚本应在正常运行20分钟后重新开始运行。
我一直在研究代码,以跟踪生成警报的次数,并在警报发送3次后停止发送msg。但是我无法弄清楚如何为此添加基于时间的逻辑。
error=$(cat error.log | grep "ORA-" | wc -l)
counter=$(/tmp/counter.txt)
counterval=$(cat /tmp/counter.txt | wc -l)
if
[$error -ge 1] && [$counterval -lt 3]
then echo "errors in log file"
echo "1" >> $counter
elif
[$error -ge 1]
then echo "1" >> $counter
else
echo "Nothing to report"
if [$counterval -e 30]
then cat /dev/null > $ counter
fi