我試圖設置一個腳本,當某個字符串出現在日誌文件中時會生成警報。如何將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