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

21

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

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

xkcd150
источник

Ответы:

34

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

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


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

  • --follow=name: следуйте имени файла вместо дескриптора файла
  • --retry: если файл недоступен, попробуйте позже вместо того, чтобы умереть
xkcd150
источник
Почему у них вообще есть опция "-f"? Это должно быть по умолчанию!
Доминик Черизано,
27
# 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
djhowell
источник
11

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

Джим Зайковски
источник
3
Если tail -F не ​​работает, скомпилируйте версию tail -F, которая работает. Другая альтернатива - короткая дорога в сумасшедший город.
Крис
5

хвост -F или хвост --follow = имя

retracile
источник
2

ИМХО, немного странно менять файл журнала по размеру, а не по дате. Большинство системных журналов (в Unix или Linux) чередуются еженедельно или ежемесячно, а не по размеру ... Это то, что мне нравится по разным причинам, а также то, что, если оно будет реализовано, решит вашу проблему.

Восемь лет спустя, я не знаю, о чем, черт возьми, я говорил здесь: есть тонны мест, где вы хотите вращаться по размеру, потому что ежедневные / еженедельные / ежемесячные вращения могут привести к MASSIVE-файлам, которые могут вызвать серьезные проблемы.

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

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

Satanicpuppy
источник
Я согласен, и это одна вещь, которую я понял, я должен изучить. Надеюсь, log4j это поддерживает. Благодарность!
DivideByHero
1
Одно очевидное преимущество ротации по размеру - вы можете быть уверены, что весь набор журналов будет меньше, чем какой-либо известный размер.
Джим Зайковски
1

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

tail --follow var/log/apache-access_log --retry
romble
источник
-1

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

thepocketwade
источник