ログファイルに特定の文字列が表示されたときにアラートが生成されるスクリプトを設定しようとしています。
すでに導入されているソリューションは、ログファイル全体を1分に1回取得し、ログ行のタイムスタンプを使用して前の1分間の発生のみをカウントし、文字列が表示される頻度をカウントします。
尻尾を使ってこれを行う方がはるかに効率的だと思ったので、テストとして次のことを試しました。
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で機能させるにはどうすればよいですか?