背景:本人就职于业务导向型的传统企业,技术部门虽有划分开发部和运行部,但运维实力仍属于基础运维。平时工作除了解决用户报障、监控服务可用性、监控服务器性能指标外,偶尔帮公司写写运维脚本,提高运维效率。
一个月前,协助领导编写了互联网IP可用性监控脚本,因告警容错度太差,巡检失败立即产生告警;在多次半夜被告警吵醒后,今天终于完成容错功能的编写,测试成功,完成上线。传送门如下:一只晨兴夜不得寐的运维人---基于SHELL脚本批量PING工具https://blog.csdn.net/weixin_42803243/article/details/120502221
按照惯例,进行需求分析:
- 多次(3次)相同的告警内容才产生告警,过滤出告警内容
- 如告警内容未在出现,则视为恢复,过滤出恢复内容
原理图:
代码详情:
#取上次脚本执行结果
failContent=/dev/shm/failContent
##### more test
failContent_old1=/dev/shm/failContent_old1
failContent_old2=/dev/shm/failContent_old2
touch $failContent_old1
touch $failContent_old2
#store old failed Content
echo -e "" > $failContent_old2
cp $failContent_old1 $failContent_old2
echo -e "" > $failContent_old1
cp $failContent $failContent_old1
#init vars 清空保存结果的变量
echo -e "" > $failContent
#=========此处执行任务逻辑,并将错误输出添加到$failContent
WriteFail() {
echo -e "$failMessage" >> $failContent
}
#=========结果判断
#取此次结果和历史第二次结果的交集,为输出
#$fail = $failContent ∩ $failContent_old2
alert=$(cat $failContent $failContent_old2 | sort | uniq -d | xargs)
#取历史第二次结果 减去此次结果,为告警恢复
#$restore = $failContent_old2 - $failContent
restore=$(sort $failContent $failContent $failContent_old2 | uniq -u | xargs)
echo "此次失败:" $failContent
echo "告警内容:" $alert
echo "告警恢复:" $restore