背景:
公司某微服务异常崩溃后其守护进程会将其拉起,此时日志内容中会有记录Load()字段。
当出现崩溃重启后,可能进程监视器轮询时间不一定能够覆盖到,特可以是用日志监控的方式。
而日志监控的方式若不进行过滤筛选,则可能消耗大量系统资源。
所以写一个脚本,主要逻辑是:
find查找程序所在路径的logs目录,对修改时间为一小时内的日志文件进行操作,操作是查询倒数1000行日志内容中是否包含Load()字段,并对结果进行统计,如果不为0则代表为有发生服务重启。
但是大家可能发现,怎么还有一个B5的过滤,-B5的含义是过滤到Load()后再显示前五行内容。此处的设计意义是前五行内容当中会有时间字段,可以与之匹配,从而减少误报。
因为可能1000行中会有前几天的日志内容也说不定呢。通过-B5与当前脚本执行的小时进行匹配,可以大大减少误报可能。
脚本:
TimeDate="$(date +%Y-%m-%d) $(date +%H)"
N=$(find /home/jemma/log/ -mmin -60 -type f -name '*.log' |xargs tail -n 1000 |grep -B5 "Load()" |grep "$TimeDate"|wc -l)
echo $N