Как использовать команду tail для мониторинга логов Linux.

Всем привет! После почти двух лет молчания вновь возникло желание делиться житейским опытом админских будней.

Анализ посещаемости сайта показал, что наиболее востребованными темами являются темы про Mac и Linux для начинающих, так что пожалуй на них и сделаю акцент в ближайших выпусках.

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

Согласно философии Linux, команда выполняет одно предназначение — выдачу хвостовой части файла. То есть начиная с указанного места, копирует файл на стандартный вывод. Выполним команду применительно к syslog:

1
tail /var/log/syslog

В выдаче мы получим 10 последних строк syslog, после чего команда завершит свою работу. Мы можем регулировать количество строк для выдачи через ключ —n:

1
tail -n 20 /var/log/syslog

Теперь мы видим последние 20 строк. Так-же мы можем выводить последние n байт с помощью ключа —c:

1
tail -c 25 /var/log/syslog

Отличительной чертой команды tail является ее возможность не завершаться по достижении конца вывода, а ожидать появления новых данных. Для этого добавим ключ —f:

1
tail -f /var/log/syslog

В любом из режимов она прекрасно сочетается с grep, так что мы можем выбирать только те строки, которые нужны:

1
tail -f /var/log/syslog |grep dbusp

Ключ —s позволит изменить время между итерациями проверки новых данных с ключом —f. Это существенно облегчает задачу чтения логов при больших потоках данных:

1
tail -s 10 -f /var/log/syslog

При чтении логов с ротацией, полезно будет открывать файл заново , если за последние n итераций не было изменений. Достигается это ключом —max-unchanged-stat:

1
tail -s 1 --max-unchanged-stat 3 -f /var/log/syslog

Встречается ситуация, когда отлаживается запуск софта и можно долго ждать новых логов, а сама программа, чьи логи мы читаем уже успешно терминировалась. Тут на помощь приходит ключ —pid, который при импользовании ключа -f позволяет завершать работу tail при завершении работы приложения:

1
tail --pid 1705 -f /var/log/Xorg.0.log

Как только процесс с PID 1705 завершится, tail последует за ним.

А вот теперь расскажу про одну штуку с tail, про которую не знал ни один из опрошенных мной администраторов.

Tail умеет работать с несколькими файлами, достаточно указать их через пробел. Очень полезная штука при использовании сразу нескольких логов. Обычно люди открывают несколько консолей, а тут все красиво и из коробки!

1
tail -f /var/log/Xorg.0.log /var/log/syslog

Если мы захотим видеть все без разделителей с именами файлов, достаточно добавить ключ —q:

1
tail -q -f /var/log/Xorg.0.log /var/log/syslog

Только не забывайте, что сначала отобразятся первые 10 строк одного файла, а потом 10 строк другого.

На этом на сегодня все, спасибо за внимание!


Смотрите также

comments powered by Disqus