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

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

Введение

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

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

Изучение файлов журналов Linux и их расположения

На этом этапе вы изучите каталог /var/log и разберёте структуру типичной записи системного журнала. Системы Linux записывают действия, ошибки и события в файлы журналов, которые служат основным источником информации при устранении неполадок и мониторинге системы.

Где хранятся журналы 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/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 в этом примере)
  • программа или служба, создавшая запись
  • фактическое сообщение журнала

Структура записи журнала

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

  • Временная метка: когда произошло событие
  • Имя узла: имя компьютера
  • Служба или приложение: источник записи
  • Сообщение: сведения о произошедшем событии

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

Использование базовой команды «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. Это важный источник информации для мониторинга безопасности и устранения проблем с доступом пользователей.

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

Ядро — центральная часть операционной системы 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»

На этом этапе вы будете отслеживать файлы журналов и добавлять новые записи, чтобы сразу увидеть их в выводе. Параметр -f (сокращение от «follow», то есть «следить») оставляет файл открытым и отображает новые строки по мере их добавления. Это особенно удобно при устранении неполадок и мониторинге системы.

Как работает «tail -f»

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

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

Используем параметр -f, чтобы отслеживать системный журнал:

sudo tail -f /var/log/syslog

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

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

echo "$(date '+%b %e %T') ubuntu $(whoami): This is a test message from user $(whoami)" | sudo tee -a /var/log/syslog

Команда tee -a добавляет сообщение в учебный системный журнал. Вернитесь в первое окно терминала, где выполняется tail -f, — вы должны увидеть тестовое сообщение:

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

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

echo "$(date '+%b %e %T') ubuntu labex: System test number 2" | sudo tee -a /var/log/syslog
echo "$(date '+%b %e %T') ubuntu labex: Monitoring logs is fun!" | sudo tee -a /var/log/syslog

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

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

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

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

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

Команда будет показывать действия, связанные с аутентификацией, в реальном времени: вход пользователей, использование sudo и неудачные попытки аутентификации.

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

echo "$(date '+%b %e %T') ubuntu sudo: labex ran /usr/bin/ls /root" | sudo tee -a /var/log/auth.log

В окне с tail -f должна появиться новая запись:

May  2 10:38:23 ubuntu sudo: labex ran /usr/bin/ls /root

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

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

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

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

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

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

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

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

Использование «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.

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

echo "$(date '+%b %e %T') ubuntu labex: This is a test message for grep filtering" | sudo tee -a /var/log/syslog

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