标签:最新 pre lse 统计 同步 awk 重定向 tail log
今有需求:需要监控每隔五分钟检测一次日志文件是否出自按某个关键字。利用过滤全部的日志信息 虽然可以过滤出来关键字告警,但是修复后,依然还是会报警,存在局限性,所以需要使用以下办法来实现需求。本想循环获取5分钟内的时间戳,然后从日志文件中grep这个时间端的信息,然后再获取关键字,但是通过查看日志文件发现时间戳与主机时间不同步,所以,这种方法不可取。
那么怎么获取最近五分钟的日志信息,再过滤关键字呢?思索了很久,又有了新思路。
将现在的文件日志重定向到一个新的文件里面
cat /var/log/xxx > /root/logs/tmp.txt9 //执行此命令,因为第一次需要手动执行,后续循环不需要再执行
然后写一个监控脚本(此脚本是被监控主机监控项的命令,五分钟获取一次信息,即五分钟执行一次脚本)
#!/bin/sh
LOG_FILE=/var/log/xxx
KEY_WORDS="guanjianzi"
if [ ! -s /var/log/xxx ];then //判断文件是否为空,为空则输出为0;不为空,则执行下一步
echo "0"
else
A=$(awk ‘{print NR}‘ /root/logs/tmp.txt9 | tail -n1) //统计将日志重定向的到此文件的行数
B=$(awk ‘{print NR}‘ /var/log/xxx | tail -n1) //统计日志的行数(此时已经比重定向里面的文件多了五分钟的信息)
C=$( echo $B - $A |bc) //获取日志文件最新五分钟的行数
tail -n $C /var/log/xxx> /root/logs/tet9 //查看最近五分钟的信息并写入一个新的文件
cat /root/logs/tet9 | grep "$KEY_WORDS" >txt9 //在最近五分钟的文件中过滤某个关键字,将输出结果写入一个新的文件
if [ -s txt9 ]; then //判断这个文件是否为空,不为空则输出1 ;为空,则输出为0
echo "1"
else
echo "0"
fi
fi
cat /var/log/xxx > /root/logs/tmp.txt9 //将此事的日志信息重定向到该文件当中去
然后五分钟后又会执行此脚本,如此循环。
当日志文件中的时间与主机时间不同步时,怎么监控每隔五分钟检测一次日志文件是否出自按某个关键字?
标签:最新 pre lse 统计 同步 awk 重定向 tail log
原文地址:http://blog.51cto.com/13858192/2336482