Назад | Перейти на главную страницу

Постоянно контролировать бревна с хвостом, который иногда поворачивается

Мы используем tail для постоянного мониторинга нескольких журналов, но когда журнал вращается, хвост для этого файла прекращается.

Насколько я понимаю, проблема в том, что при ротации журнала создается новый файл, а запущенный хвостовой процесс ничего не знает об этом новом дескрипторе файла.

Ах, для этого есть флаг.

Вместо того, чтобы использовать tail -f /var/log/file мы должны использовать tail -F /var/log/file


tail -F переводится на tail --follow=name --retry как в;

  • --follow=name: следовать имени файла вместо дескриптора файла
  • --retry: если файл недоступен, попробуйте еще раз позже, вместо того, чтобы умереть
# tail --follow=mylog.log

Из хвост человека:

With --follow (-f), tail defaults to  following  the  file  descriptor,
       which  means that even if a tail’ed file is renamed, tail will continue
       to track its end.  This default behavior  is  not  desirable  when  you
       really want to track the actual name of the file, not the file descrip‐
       tor (e.g., log rotation).  Use --follow=name in that case.  That causes
       tail  to track the named file by reopening it periodically to see if it
       has been removed and recreated by some other program.

Итак, в этом случае использование -F вариант будет правильным.

-F     same as --follow=name --retry

Точный ответ зависит от вашей ОС, но во многих случаях tail -F поступит правильно.

tail -F или tail --follow = имя

IMHO, немного странно менять файл журнала по РАЗМЕРУ, а не по дате. Большинство системных журналов (в unix или linux) меняются еженедельно или ежемесячно, а не в зависимости от размера ... Это то, что мне нравится по разным причинам, а также то, что, если оно будет реализовано, решит вашу проблему.

Восемь лет спустя я не знаю, о чем, черт возьми, я здесь говорил: есть масса мест, где вы хотите чередовать по размеру, потому что ежедневные / еженедельные / ежемесячные ротации могут привести к МАССИВНЫМ файлам, которые могут вызвать серьезные проблемы.

С более опытной точки зрения, реальный вопрос заключается в том, почему вы хотите сидеть и постоянно следить за файлом, который растет так быстро, что вы вращаете его чаще, чем ежедневно ... Это было бы похоже на просмотр потока Matrix.

В наши дни вам было бы лучше изучить некоторую агрегацию журналов больших данных, такую ​​как Splunk или Sumologic, где они могут фильтровать события журнала по классам и запускать их на основе определенных значений журнала ... Нет необходимости вообще смотреть журналы в реальном времени.

Я использую команду на своем производственном сервере:

tail --follow var/log/apache-access_log --retry

Кроме того, он может быть слишком тяжелым для ваших целей, но у splunk есть хвостовая функция, позволяющая делать именно то, что вы хотите. Это бесплатно до 500 МБ в день, но если ваши данные превышают этот размер, это не окупится.