Как отслеживать изменения в реальном времени в файле журнала Linux с помощью 'tail'

LinuxBeginner
Практиковаться сейчас

Введение

Журналы Linux являются краеугольным камнем мониторинга и устранения неполадок в системе, предоставляя бесценную информацию о внутренней работе вашей системы. В этом руководстве мы рассмотрим основные концепции журналов Linux и то, как эффективно отслеживать их с помощью универсальной команды 'tail'.

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

Понимание файлов журналов Linux и их расположения

Системы Linux ведут подробные записи различных действий, ошибок и событий в специализированных текстовых файлах, называемых файлами журналов (log files). Эти журналы служат основным источником информации при устранении неполадок или мониторинге работоспособности системы.

Где хранятся журналы Linux?

Большинство дистрибутивов Linux, включая Ubuntu 22.04, хранят файлы журналов в каталоге /var/log. Давайте рассмотрим этот каталог, чтобы увидеть, какие файлы журналов доступны в вашей системе.

Откройте свой терминал и введите следующую команду:

ls -l /var/log

Вы должны увидеть вывод, похожий на этот:

total 1048
drwxr-x---  2 root   adm      4096 May  2 09:52 apache2
drwxr-xr-x  2 root   root     4096 Apr 30 15:27 apt
-rw-r-----  1 syslog adm    183867 May  2 10:18 auth.log
-rw-r--r--  1 root   root     1112 Nov 17  2022 alternatives.log
drwxr-xr-x  2 root   root     4096 Apr 20  2022 cups
-rw-r-----  1 syslog adm    308342 May  2 10:18 kern.log
-rw-rw-r--  1 root   utmp        0 Apr 20  2022 lastlog
drwxr-xr-x  2 root   root     4096 Nov  8  2022 nginx
-rw-r-----  1 syslog adm    473079 May  2 10:18 syslog

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

Общие файлы журналов и их содержимое

Вот некоторые из наиболее важных файлов журналов, с которыми вы столкнетесь:

  • /var/log/syslog: Содержит общие системные сообщения
  • /var/log/auth.log: Записывает попытки аутентификации и управление пользователями
  • /var/log/kern.log: Содержит сообщения и ошибки ядра
  • /var/log/apt: Каталог, содержащий журналы управления пакетами

Давайте рассмотрим содержимое одного из этих файлов. Поскольку мы изучаем мониторинг журналов, начнем с базового просмотра системного журнала:

sudo head -n 20 /var/log/syslog

Команда head отображает первые несколько строк файла (в данном случае 20). Мы используем sudo, потому что некоторые файлы журналов могут быть прочитаны только пользователями с правами администратора.

Вы должны увидеть вывод, похожий на:

May  2 08:23:15 ubuntu systemd[1]: Started Daily apt download activities.
May  2 08:23:15 ubuntu systemd[1]: Starting Daily apt upgrade and clean activities...
May  2 08:23:15 ubuntu systemd[1]: apt-daily-upgrade.service: Deactivated successfully.
May  2 08:23:15 ubuntu systemd[1]: Finished Daily apt upgrade and clean activities.
May  2 08:37:16 ubuntu systemd[1]: Starting Message of the Day...
May  2 08:37:16 ubuntu systemd[1]: motd-news.service: Deactivated successfully.
May  2 08:37:16 ubuntu systemd[1]: Finished Message of the Day.
...

Обратите внимание на формат каждой записи журнала:

  • Дата и время
  • Имя хоста (ubuntu в этом примере)
  • Программа или служба, генерирующая журнал
  • Фактическое сообщение журнала

Понимание структуры записи журнала

Большинство записей журнала следуют стандартному формату, что упрощает их чтение и обработку. Типичный формат включает:

  1. Timestamp (временная метка): Когда произошло событие
  2. Hostname (имя хоста): Имя машины
  3. Service/Application (служба/приложение): Что сгенерировало журнал
  4. Message (сообщение): Фактическая информация о том, что произошло

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

Использование базовой команды 'tail' для просмотра файлов журналов

В то время как команда head показывает начало файла, команда tail показывает конец файла. Это особенно полезно для файлов журналов, так как самые последние записи обычно находятся в конце.

Базовое использование команды 'tail'

Базовый синтаксис команды tail:

tail [options] [file]

По умолчанию tail отображает последние 10 строк файла. Давайте попробуем это с системным журналом:

sudo tail /var/log/syslog

Вы должны увидеть 10 самых последних записей журнала:

May  2 10:15:32 ubuntu systemd[1]: Starting Clean php session files...
May  2 10:15:32 ubuntu systemd[1]: phpsessionclean.service: Deactivated successfully.
May  2 10:15:32 ubuntu systemd[1]: Finished Clean php session files.
May  2 10:17:01 ubuntu CRON[8752]: (root) CMD (   cd / && run-parts --report /etc/cron.hourly)
May  2 10:18:14 ubuntu sshd[8755]: Accepted password for labex from 192.168.1.5 port 52413 ssh2
May  2 10:18:14 ubuntu sshd[8755]: pam_unix(sshd:session): session opened for user labex(uid=1000) by (uid=0)
May  2 10:18:14 ubuntu systemd-logind[698]: New session 4 of user labex.
May  2 10:18:14 ubuntu systemd[1]: Started Session 4 of User labex.
May  2 10:18:15 ubuntu sshd[8789]: Received disconnect from 192.168.1.5 port 52413:11: disconnected by user
May  2 10:18:15 ubuntu sshd[8789]: Disconnected from user labex 192.168.1.5 port 52413

Просмотр пользовательского количества строк

Иногда 10 строк недостаточно, чтобы получить необходимый контекст. Вы можете указать, сколько строк отображать, используя опцию -n:

sudo tail -n 5 /var/log/syslog

Это отобразит только последние 5 строк файла:

May  2 10:18:14 ubuntu sshd[8755]: pam_unix(sshd:session): session opened for user labex(uid=1000) by (uid=0)
May  2 10:18:14 ubuntu systemd-logind[698]: New session 4 of user labex.
May  2 10:18:14 ubuntu systemd[1]: Started Session 4 of User labex.
May  2 10:18:15 ubuntu sshd[8789]: Received disconnect from 192.168.1.5 port 52413:11: disconnected by user
May  2 10:18:15 ubuntu sshd[8789]: Disconnected from user labex 192.168.1.5 port 52413

Просмотр журналов аутентификации

Файл /var/log/auth.log содержит информацию о аутентификации пользователей и событиях, связанных с безопасностью. Давайте посмотрим на самые последние записи:

sudo tail -n 15 /var/log/auth.log

Вы можете увидеть вывод, похожий на:

May  2 10:18:14 ubuntu sshd[8755]: Accepted password for labex from 192.168.1.5 port 52413 ssh2
May  2 10:18:14 ubuntu sshd[8755]: pam_unix(sshd:session): session opened for user labex(uid=1000) by (uid=0)
May  2 10:18:14 ubuntu systemd-logind[698]: New session 4 of user labex.
May  2 10:18:15 ubuntu sshd[8789]: Received disconnect from 192.168.1.5 port 52413:11: disconnected by user
May  2 10:18:15 ubuntu sshd[8789]: Disconnected from user labex 192.168.1.5 port 52413
May  2 10:18:15 ubuntu sshd[8755]: pam_unix(sshd:session): session closed for user labex
May  2 10:18:15 ubuntu systemd-logind[698]: Session 4 logged out. Waiting for processes to exit.
May  2 10:18:15 ubuntu systemd-logind[698]: Removed session 4.
May  2 10:20:01 ubuntu sudo:    labex : TTY=pts/0 ; PWD=/home/labex ; USER=root ; COMMAND=/usr/bin/tail /var/log/syslog
May  2 10:20:01 ubuntu sudo: pam_unix(sudo:session): session opened for user root(uid=0) by labex(uid=1000)
May  2 10:20:01 ubuntu sudo: pam_unix(sudo:session): session closed for user root
May  2 10:21:15 ubuntu sudo:    labex : TTY=pts/0 ; PWD=/home/labex ; USER=root ; COMMAND=/usr/bin/tail -n 5 /var/log/syslog
May  2 10:21:15 ubuntu sudo: pam_unix(sudo:session): session opened for user root(uid=0) by labex(uid=1000)
May  2 10:21:15 ubuntu sudo: pam_unix(sudo:session): session closed for user root

Этот журнал показывает попытки входа пользователей, открытие и закрытие сессий, а также использование команды sudo. Это важный журнал для мониторинга безопасности и устранения неполадок, связанных с доступом пользователей.

Просмотр журналов ядра

Ядро (kernel) является ядром операционной системы Linux. Файл /var/log/kern.log содержит сообщения, сгенерированные ядром, которые полезны для диагностики проблем с оборудованием и драйверами:

sudo tail -n 10 /var/log/kern.log

Вывод может выглядеть так:

May  2 09:15:02 ubuntu kernel: [16789.456123] USB 1-1: new high-speed USB device number 3 using xhci_hcd
May  2 09:15:02 ubuntu kernel: [16789.605432] usb 1-1: New USB device found, idVendor=0781, idProduct=5571, bcdDevice= 1.00
May  2 09:15:02 ubuntu kernel: [16789.605436] usb 1-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
May  2 09:15:02 ubuntu kernel: [16789.605438] usb 1-1: Product: Ultra
May  2 09:15:02 ubuntu kernel: [16789.605440] usb 1-1: Manufacturer: SanDisk
May  2 09:15:02 ubuntu kernel: [16789.605442] usb 1-1: SerialNumber: 4C530001211124120222
May  2 09:15:02 ubuntu kernel: [16789.606521] usb-storage 1-1:1.0: USB Mass Storage device detected
May  2 09:15:02 ubuntu kernel: [16789.606705] scsi host3: usb-storage 1-1:1.0
May  2 09:15:03 ubuntu kernel: [16790.624553] scsi 3:0:0:0: Direct-Access     SanDisk  Ultra            1.00 PQ: 0 ANSI: 6
May  2 09:15:03 ubuntu kernel: [16790.625045] sd 3:0:0:0: Attached scsi generic sg1 type 0

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

Мониторинг журналов в реальном времени с помощью 'tail -f'

Одной из самых мощных функций команды tail является ее способность отслеживать файлы в реальном времени, используя опцию -f (сокращение от "follow" - следить). Это особенно полезно для наблюдения за файлами журналов по мере добавления новых записей, что помогает при устранении неполадок и мониторинге.

Понимание 'tail -f'

Опция -f указывает tail держать файл открытым и непрерывно отображать новые строки по мере их добавления в файл. Это создает представление файла журнала в реальном времени, позволяя вам видеть события по мере их возникновения.

Мониторинг системных журналов в реальном времени

Давайте используем опцию -f для мониторинга системного журнала в реальном времени:

sudo tail -f /var/log/syslog

После выполнения этой команды вы увидите самые последние записи в файле журнала, и терминал останется открытым, отображая новые записи по мере их появления.

Чтобы сгенерировать несколько записей журнала, давайте откроем новое окно терминала (нажмите Ctrl+Alt+T, чтобы открыть новый терминал) и выполним несколько базовых команд:

logger "This is a test message from user $(whoami)"

Команда logger отправляет сообщение в системный журнал. Теперь вернитесь в первое окно терминала, где вы запускаете tail -f, и вы должны увидеть, как ваше тестовое сообщение появится в журнале:

May  2 10:34:45 ubuntu labex: This is a test message from user labex

Попробуйте запустить команду logger еще несколько раз с разными сообщениями, чтобы увидеть, как они появляются в реальном времени:

logger "System test number 2"
logger "Monitoring logs is fun!"

Каждое из этих сообщений должно появиться в вашем окне вывода tail -f по мере их записи в журнал.

Когда вы закончите наблюдение за журналом, нажмите Ctrl+C, чтобы остановить команду tail -f и вернуться к приглашению командной строки.

Мониторинг активности аутентификации

Давайте отслеживать журнал аутентификации, чтобы наблюдать события, связанные со входом в систему и аутентификацией:

sudo tail -f /var/log/auth.log

Это покажет вам активность аутентификации в реальном времени, такую как входы пользователей, использование команды sudo и сбои аутентификации.

Чтобы сгенерировать несколько записей журнала аутентификации, откройте новый терминал и выполните команду sudo:

sudo ls /root

Вы должны увидеть новые записи, появляющиеся в вашем окне tail -f, показывающие активность sudo:

May  2 10:38:23 ubuntu sudo:    labex : TTY=pts/1 ; PWD=/home/labex ; USER=root ; COMMAND=/usr/bin/ls /root
May  2 10:38:23 ubuntu sudo: pam_unix(sudo:session): session opened for user root(uid=0) by labex(uid=1000)
May  2 10:38:23 ubuntu sudo: pam_unix(sudo:session): session closed for user root

Опять же, нажмите Ctrl+C, чтобы остановить команду tail -f, когда вы закончите наблюдение.

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

Мониторинг журналов в реальном времени невероятно полезен в нескольких сценариях:

  1. Устранение неполадок: Когда что-то не работает, наблюдение за журналами в реальном времени может помочь выявить проблему.
  2. Мониторинг безопасности: Наблюдение за журналами аутентификации может помочь обнаружить несанкционированные попытки доступа.
  3. Отладка приложений: Разработчики могут наблюдать за журналами приложений, чтобы понять, что происходит во время тестирования.
  4. Администрирование системы: Администраторы могут отслеживать системные журналы во время обслуживания или изменений конфигурации.

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

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

Фильтрация информации из журналов для лучшего анализа

Файлы журналов могут быть очень большими и содержать много информации. Чтобы сделать анализ журналов более управляемым, вы можете объединить команду tail с другими инструментами, такими как grep, для фильтрации и поиска конкретной информации.

Использование 'grep' с 'tail'

Команда grep ищет шаблоны в тексте. В сочетании с tail она позволяет фильтровать записи журнала по определенным ключевым словам или шаблонам. Базовый синтаксис:

tail [options] [file] | grep "pattern"

Давайте рассмотрим несколько практических примеров:

Поиск сообщений об ошибках

Чтобы найти сообщения об ошибках в системном журнале, вы можете отфильтровать по слову "error":

sudo tail -n 100 /var/log/syslog | grep -i "error"

Опция -i с grep делает поиск нечувствительным к регистру, поэтому он будет соответствовать "error", "Error", "ERROR" и т. д. Вы можете увидеть вывод, подобный:

May  2 09:23:45 ubuntu systemd[1]: Failed to start Apache HTTP Server: Job failed with error code.
May  2 09:45:12 ubuntu kernel: [12345.678901] Buffer I/O error on device sdb1, logical block 123456

Если вы не видите никаких результатов, это означает, что в последних 100 строках журнала нет сообщений об ошибках.

Мониторинг конкретных служб

Вы также можете фильтровать журналы для мониторинга определенной службы или программы. Например, для мониторинга активности, связанной с SSH:

sudo tail -n 100 /var/log/auth.log | grep "sshd"

Это покажет только записи, связанные с SSH, в журнале аутентификации:

May  2 10:18:14 ubuntu sshd[8755]: Accepted password for labex from 192.168.1.5 port 52413 ssh2
May  2 10:18:14 ubuntu sshd[8755]: pam_unix(sshd:session): session opened for user labex(uid=1000) by (uid=0)
May  2 10:18:15 ubuntu sshd[8789]: Received disconnect from 192.168.1.5 port 52413:11: disconnected by user
May  2 10:18:15 ubuntu sshd[8789]: Disconnected from user labex 192.168.1.5 port 52413
May  2 10:18:15 ubuntu sshd[8755]: pam_unix(sshd:session): session closed for user labex

Фильтрация мониторинга в реальном времени

Вы также можете объединить мониторинг в реальном времени с фильтрацией, чтобы отслеживать определенные события по мере их возникновения:

sudo tail -f /var/log/syslog | grep --line-buffered "test"

Опция --line-buffered гарантирует, что grep выводит каждую соответствующую строку немедленно, а не буферизует их, что важно при использовании tail -f.

Теперь, в другом терминале, сгенерируйте тестовое сообщение журнала:

logger "This is a test message for grep filtering"

В вашем первом терминале вы должны увидеть только это сообщение (и никакие другие сообщения журнала) из-за фильтра grep для "test".

Расширенная фильтрация с несколькими шаблонами

Вы также можете искать несколько шаблонов, используя оператор ИЛИ (|) в grep:

sudo tail -n 100 /var/log/syslog | grep -E "error|warning|critical"

Опция -E включает расширенные регулярные выражения, позволяя использовать оператор ИЛИ. Эта команда покажет строки, содержащие любое из слов "error", "warning" или "critical".

Извлечение конкретной информации с помощью 'awk'

Для более продвинутой фильтрации и форматирования вы можете использовать команду awk. Например, чтобы извлечь только время и сообщение из syslog:

sudo tail -n 10 /var/log/syslog | awk '{print $3, $5, $6, $7, $8, $9, $10}'

Это извлекает определенные поля из каждой записи журнала, что упрощает фокусировку на наиболее релевантной информации.

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

Заключение

Поздравляем с завершением этой лабораторной работы по мониторингу изменений в файлах журналов Linux в реальном времени с помощью команды 'tail'. Вы изучили несколько важных навыков:

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

  2. Базовый просмотр журналов: Вы можете использовать команду tail для просмотра последних записей в файлах журналов и указания количества отображаемых строк.

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

  4. Фильтрация информации из журналов: Объединив tail с такими инструментами, как grep и awk, вы можете извлекать конкретную информацию из журналов, делая анализ более эффективным.

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

Продолжая свой путь в Linux, вы обнаружите, что эти методы мониторинга журналов помогут вам лучше понимать свою систему, быстрее диагностировать проблемы и поддерживать более безопасную и надежную среду.