Я пытаюсь настроить сценарий, в котором генерируется предупреждение, когда в файле журнала появляется определенная строка.
Уже существующее решение выполняет поиск всего файла журнала раз в минуту и подсчитывает частоту появления строки, используя отметку времени строки журнала для подсчета только вхождений за предыдущую минуту.
Я решил, что будет намного эффективнее сделать это с хвостом, поэтому в качестве теста я попробовал следующее:
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?