Введение
Журналы 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». Вы освоили несколько важных навыков:
Понимание файлов журналов Linux: теперь вы знаете, где хранятся журналы, какие сведения они содержат и как устроены их записи.
Базовый просмотр журналов: вы умеете использовать команду
tailдля просмотра последних записей и задавать количество выводимых строк.Мониторинг в реальном времени: с помощью
tail -fвы можете наблюдать за обновлением журналов, отслеживать действия системы и диагностировать проблемы по мере их возникновения.Фильтрация информации журналов: объединяя
tailс такими инструментами, какgrepиawk, вы можете извлекать нужные сведения и делать анализ более эффективным.
Эти навыки необходимы всем, кто работает с системами Linux — от начинающих пользователей до опытных администраторов. Анализ журналов играет важную роль в обслуживании системы, устранении неполадок и мониторинге безопасности.
Продолжая изучать Linux, вы обнаружите, что эти методы мониторинга журналов помогают лучше понимать систему, быстрее диагностировать проблемы и поддерживать более безопасную и надёжную среду.



