我正在尝试设置一个脚本,当某个字符串出现在日志文件中时会生成警报。
已经到位的解决方案每分钟对整个日志文件进行一次 greps 并计算字符串出现的频率,使用日志行的时间戳仅计算前一分钟的出现次数。
我认为用尾巴做这件事会更有效率,所以我尝试了以下方法作为测试:
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"的结果通过管道传输到其中。
我的问题是,如何让 tail -f 与 awk 一起工作?