我试图设置一个脚本,当某个字符串出现在日志文件中时会生成警报。如何将tail -f拖入awk
已经到位的解决方案里grep整个日志文件每分钟一次,并计数串出现的频率,使用日志行的时间戳来算只有前一分钟发生。
我想这将是更有效的带尾巴要做到这一点,所以我尝试了以下方面的测试:
FILENAME="/var/log/file.log"
tail -f $FILENAME | awk -F , -v var="$HOSTNAME" '
BEGIN {
failed_count=0;
}
/account failure reason/ {
failed_count++;
}
END {
printf("%saccount failure reason (Errors per Interval)=%d\n", var, failed_count);
}
'
但这只是挂不输出任何东西。有人提出这个小小的变化:
FILENAME="/var/log/file.log"
awk -F , -v var="$HOSTNAME" '
BEGIN {
failed_count=0;
}
/account failure reason/ {
failed_count++;
}
END {
printf("%saccount failure reason (Errors per Interval)=%d\n", var, failed_count);
}
' <(tail -f $FILENAME)
但这样做的事情。
我正在使用的awk(我在上面的代码中已经简化了)的工作原理,因为它用于现有脚本中,其中grep“^ $ TIMESTAMP”的结果已被传入。
我的问题是,怎样才能得到尾-f使用awk工作?
当你'tail -f'时,你的awk脚本永远不会到达END。所以你不断计算错误,但从不打印任何东西。您需要运行printf并重置计数器的另一个条件(例如,检测到它是新的一天)。向我们展示您的日志样本,我们可以提出修正建议。 – ghoti 2012-07-13 11:57:32