一篇文章教你搞定脚本监控( 四 )


每次告警,我们都记录一个绝对时间戳,当下一次告警到来时,用当前时间戳减去上一次报警的时间戳,然后if判断该差值,从而确定告警动作 。
在具体脚本中定义t2为上一次告警时间戳,t1为当前时间戳,t1-t2就是我们要的判断值 。t1可以用命令直接获取,t1=`date +%s` t2 要从日志中获取 。但是还有一个问题,对于第一次告警,该t2从哪里来了,也简单,我们自己定义一个满足新异常条件的时间戳就可以,比如两小时之前 。
对于一个已发现待解决的故障,也就是对应上面时间戳差值小于一小时的情况,如果我们的脚本是一分钟执行一次,就可以做一个计数器,每发现一次,计数一次,当计数器大于10时,也就是异常持续了10分钟,这时候发送邮件一次,同时清空计时器 。
因为mail.py 脚本决定了发送邮件必须带三个参数,收件人邮箱,主题, 内容 。因此mail.sh 调用mail.py 必须传递给它三个参数,那么这三个参数最终来自哪里呢,来自监控项脚本,比如load.sh
传递顺序为 load.sh---->mail.sh----->mail.py
再解释mail.sh 第一行,log=$1 , 是一个变量赋值语句,此时的$1就是load.sh 传递过来的邮箱名称 。
在程序中我么看到后面将时间戳保存在了/tmp/$log 下面,该复制语句是为了给该日志文件取一个有意义的名称,便于以后管理 。当然可以给出其他赋值,比如log=time.txt

【一篇文章教你搞定脚本监控】


推荐阅读