Просмотр и настройка логов Linux на Ubuntu, Debian и CentOS

Введение

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

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

Обратите внимание!
Команды в этой статье протестированы в “чистых” версиях Ubuntu 22.04, CentOS 9 и Debian 11.

Стандартное расположение файлов логов

По умолчанию файлы логов в Linux хранятся в директории /var/log. Вы можете просмотреть список файлов логов в директории следующей командой:

ls -l /var/log

В результате выполнения команды вы увидите что-то похожее для Ubuntu:

root@yoemmxvrxy:~# ls -l /var/log
total 57760
-rw-r--r--  1 root      root                7376 Dec 21 06:15 alternatives.log
-rw-r--r--  1 root      root                7400 Oct 27 08:36 alternatives.log.1
drwxr-xr-x  2 root      root                4096 Dec 21 06:15 apt
-rw-r-----  1 syslog    adm              2217966 Dec 26 04:00 auth.log
-rw-r-----  1 syslog    adm              8128554 Dec 24 00:00 auth.log.1
-rw-r-----  1 syslog    adm               717955 Dec 16 23:59 auth.log.2.gz
-rw-r-----  1 syslog    adm               814945 Dec 10 00:00 auth.log.3.gz
-rw-r-----  1 syslog    adm               878113 Dec  2 23:59 auth.log.4.gz
-rw-rw----  1 root      utmp            29979648 Dec 26 03:47 btmp
-rw-rw----  1 root      utmp            10714752 Dec  1 00:00 btmp.1
-rw-r-----  1 syslog    adm               321015 Nov 27 09:32 cloud-init.log
-rw-r-----  1 root      adm                12586 Nov 27 09:32 cloud-init-output.log
drwxr-xr-x  2 root      root                4096 Aug  2 15:53 dist-upgrade
-rw-r-----  1 root      adm                47270 Nov 27 09:32 dmesg
-rw-r-----  1 root      adm                46989 Nov 22 19:16 dmesg.0

Просмотр содержимого файлов логов

Ниже приведен список файлов логов, которые вы можете увидеть в /var/log:

  • wtmp
  • utmp
  • dmesg
  • messages или syslog
  • maillog или mail.log
  • spooler
  • auth.log или secure

Файлы wtmp и utmp хранят информацию о пользователях, входящих и выходящих из системы. Вы можете напрямую вывести содержимое этих файлов на экран командой cat в терминале, но также существуют и специальные команды для отображения информации из этих файлов.

Чтобы узнать, кто в данный момент авторизован в системе, используйте команду who. Эта команда получает информацию из файла /var/run/utmp в CentOS и Debian и из файла /run/utmp в Ubuntu.

Пример для Ubuntu:

root@yoemmxvrxy:~# who
root     pts/0        2023-12-26 04:00 (5.18.96.33)

В данном конкретном случае наше подключение – единственное в системе.

Команда last позволяет узнать историю входа пользователей в систему:

root@yoemmxvrxy:~# last
root     pts/1        5.18.96.33       Tue Dec 26 04:09   still logged in
root     pts/0        5.18.96.33       Tue Dec 26 04:00   still logged in
reboot   system boot  5.15.0-89-generi Mon Nov 27 09:32   still running
root     pts/1        5.18.221.43      Thu Nov 23 11:35 - 12:36  (01:00)
root     pts/0        5.18.221.43      Thu Nov 23 11:24 - 11:52  (00:28)
root     pts/0        5.18.221.43      Wed Nov 22 19:17 - 20:17  (01:00)
reboot   system boot  5.15.0-86-generi Wed Nov 22 19:16 - 07:08 (4+11:52)
reboot   system boot  5.15.0-86-generi Fri Oct 27 08:31 - 08:39  (00:08)

wtmp begins Fri Oct 27 08:31:32 2023

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

last reboot

Результат может быть следующим в Ubuntu:

root@yoemmxvrxy:~# last reboot
reboot   system boot  5.15.0-89-generi Mon Nov 27 09:32   still running
reboot   system boot  5.15.0-86-generi Wed Nov 22 19:16 - 07:08 (4+11:52)
reboot   system boot  5.15.0-86-generi Fri Oct 27 08:31 - 08:39  (00:08)

wtmp begins Fri Oct 27 08:31:32 2023

Чтобы узнать, когда кто-то в последний раз входил в систему, используйте lastlog:

lastlog

В Ubuntu результат выполнения команды может быть следующим:

root@yoemmxvrxy:~# lastlog
Username         Port     From             Latest
root             pts/1    5.18.96.33       Tue Dec 26 04:09:54 +0000 2023
daemon                                     **Never logged in**
bin                                        **Never logged in**
sys                                        **Never logged in**
sync                                       **Never logged in**
games                                      **Never logged in**
man                                        **Never logged in**
lp                                         **Never logged in**
mail                                       **Never logged in**
news                                       **Never logged in**
uucp                                       **Never logged in**
proxy                                      **Never logged in**
www-data                                   **Never logged in**
backup                                     **Never logged in**
list                                       **Never logged in**
irc                                        **Never logged in**
gnats                                      **Never logged in**
nobody                                     **Never logged in**
…

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

В примере ниже мы выводим на экран последние 10 строк файла /var/log/syslog в Ubuntu:

root@yoemmxvrxy:~# tail /var/log/syslog
Dec 26 04:00:36 yoemmxvrxy systemd[2143424]: Reached target Sockets.
Dec 26 04:00:36 yoemmxvrxy systemd[2143424]: Reached target Basic System.
Dec 26 04:00:36 yoemmxvrxy systemd[2143424]: Reached target Main User Target.
Dec 26 04:00:36 yoemmxvrxy systemd[2143424]: Startup finished in 351ms.
Dec 26 04:00:36 yoemmxvrxy systemd[1]: Started User Manager for UID 0.
Dec 26 04:00:36 yoemmxvrxy systemd[1]: Started Session 4929 of User root.
Dec 26 04:05:01 yoemmxvrxy CRON[2143796]: (root) CMD (command -v debian-sa1 > /dev/null && debian-sa1 1 1)
Dec 26 04:09:52 yoemmxvrxy systemd[1]: Started Session 4932 of User root.
Dec 26 04:15:01 yoemmxvrxy CRON[2144469]: (root) CMD (command -v debian-sa1 > /dev/null && debian-sa1 1 1)
Dec 26 04:17:01 yoemmxvrxy CRON[2144588]: (root) CMD (   cd / && run-parts --report /etc/cron.hourly)

Использование демона rsyslog

Сердцем механизма логирования является демон rsyslog. Эта служба отвечает за прослушивание сообщений из различных частей системы Linux и маршрутизацию сообщений в соответствующий лог-файл в каталоге /var/log. Он также может перенаправлять сообщения на другой сервер Linux.

Конфигурационный файл rsyslog

Демон rsyslog настраивается с помощью конфигурационного файла rsyslog.conf, который расположен в директории /etc. В этом файле содержится конфигурация демона rsyslog, а также правила, подключающие другие конфигурационные файлы.

Например, в Ubuntu правила маршрутизации сообщений по разным лог-файлам Linux содержатся в конфигурационном файле /etc/rsyslog.d/50-default.conf, который подключается внутри /etc/rsyslog.conf.

В файле 50-default.conf для демона rsyslog задаются правила, в какие лог-файлы сохранять различные сообщения.

Каждое правило записывается на отдельной строке и состоит из двух частей – селектора и действия. Селектор и действие разделены пробелом. В селекторе указывается источник и приоритет сообщения, а в действии указывается, что делать с этим сообщением.

Сам селектор состоит из двух частей, разделенных точкой (.). Первая часть называется facility или типом сообщения, вторая часть (после точки) называется priority или приоритетом сообщения.

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

Вы можете посмотреть содержимое файла 50-default.conf в Ubuntu с помощью команды:

cat /etc/rsyslog.d/50-default.conf

Результат выполнения будет следующим:

#  Default rules for rsyslog.
#
#                       For more information see rsyslog.conf(5) and /etc/rsyslog.conf

#
# First some standard log files.  Log by facility.
#
auth,authpriv.*                 /var/log/auth.log
*.*;auth,authpriv.none          -/var/log/syslog
#cron.*                         /var/log/cron.log
#daemon.*                       -/var/log/daemon.log
kern.*                          -/var/log/kern.log
#lpr.*                          -/var/log/lpr.log
mail.*                          -/var/log/mail.log
#user.*                         -/var/log/user.log

#
# Logging for the mail system.  Split it up so that
# it is easy to write scripts to parse these files.
#
#mail.info                      -/var/log/mail.info
#mail.warn                      -/var/log/mail.warn
mail.err                        /var/log/mail.err
…

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

  • auth или authpriv – сообщения о событиях, связанных с авторизацией и безопасностью;
  • kern – сообщения, генерируемые ядром Linux;
  • mail – сообщения, генерируемые почтовой подсистемой;
  • cron – сообщения, генерируемые демоном cron;
  • daemon – сообщения, генерируемые различными демонами;
  • news – сообщения, генерируемые подсистемой сетевых новостей;
  • lpr – сообщения, генерируемые подсистемой вывода на печать;
  • user – сообщения, генерируемые пользовательскими программами;
  • с local0 по local7 – зарезервированы для локального использования.

Также рассмотрим список приоритетов в порядке уменьшения приоритета:

  • emerg – аварийные ситуации;
  • alert – серьезные ситуации, на которые необходимо срочно отреагировать;
  • crit – критические проблемы, требующие решения;
  • err – различные ошибки, возникающие во время работы;
  • warn – предупреждения, которые означают, что что-то произошло;
  • notice – оповещения, на которые стоит обратить внимание;
  • info – различные информационные сообщения, возникающие в процессе работы;
  • debug – отладочные сообщения, которые могут быть полезны при решении проблем.

Теперь рассмотрим следующую строку из файла:

…
cron.*                         /var/log/cron.log
…

Это правило указывает демону rsyslog записывать все сообщения, поступающие от демона cron, в файл /var/log/cron.log. Звездочка (*) после точки означает, что в лог-файл Linux будут записываться сообщения любой приоритетности. Аналогично если тип сообщения указан как звездочка, то это значит, что все типы сообщений будут записываться в указанный файл.

Типы сообщений и приоритеты могут быть связаны по-разному.

По умолчанию когда после точки указан только один приоритет, это означает, что все сообщения, равные или выше по приоритету, будут записываться в указанный лог-файл. Следующее правило указывает демону rsyslog записывать все сообщения с приоритетом warn или выше в указанный файл в директории /var/log:

mail.warn			/var/log/mail.warn 

Это правило значит, что сообщения от почтовой подсистемы с приоритетом warn, err, crit, alert и emerg будут записаны в файл /var/log/mail.warn

Использование знака равенства (=) после точки приведет к тому, что в лог-файл будут записываться сообщения только с указанным приоритетом. Поэтому если необходимо записывать только информационные сообщения от почтовой подсистемы, правило необходимо указать с использованием знака равенства:

mail.=info			/var/log/mail.info

Также есть возможность записывать сообщения всех приоритетов, кроме указанного:

mail.!info			/var/log/mail.info 

или

mail.!=info			/var/log/mail.info 

В первом случае в файл mail.info будут записываться все сообщения с приоритетом ниже info. Во втором случае в файл mail.info будут записываться все сообщения с приоритетом выше info.

Есть возможность указать несколько типов сообщений в одном правиле, для этого их необходимо разделить запятой:

cron,mail.* /var/log/cronanmail.log

Также в одном правиле возможно указать несколько селекторов, для этого необходимо разделить их точкой с запятой (;):

cron.warn;mail.info            /var/log/cronandmail.log

Создание собственных правил логирования

Теперь рассмотрим, как настроить логирование сообщений в отдельные лог-файлы. Для этого:

  • Добавим правила в отдельный файл custom.conf
  • Перезапустим демон rsyslog
  • Проверим настроенные правила логирования

Добавлять правила будем в отдельный файл, для разделения стандартных правил и кастомных, чтобы случайно не сломать стандартные правила. Благодаря тому, что в конфигурации rsyslog указано включать все файлы с правилами из директории /etc/rsyslog.d/ мы можем просто создать в нем файл с правилами и дополнительно ничего не настраивать.

Для внесения новых правил откройте файл custom.conf в любом удобном текстовом редакторе, например, vim:

vim /etc/rsyslog.d/custom.conf

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

local4.crit                                             /var/log/local4crit.log  
local4.=info                                            /var/log/local4info.log 

Затем перезапустите демон rsyslog командой:

systemctl restart rsyslog

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

logger -p local4.info "Это информационное сообщение от local4" 

Проверьте директорию /var/log, в ней появится новый файл, в который записано сгенерированное нами сообщение:

root@yoemmxvrxy:~# ll /var/log
…
-rw-r-----   1 syslog    adm                   70 Dec 26 05:19 local4info.log
…
root@yoemmxvrxy:~# cat /var/log/local4info.log
Dec 26 05:19:21 yoemmxvrxy root:  Это информационное сообщение от local4

Заключение

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

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

Если возникнут вопросы, напишите нам, пожалуйста, тикет из панели управления аккаунта (раздел “Помощь и поддержка”), а если вы захотите обсудить эту статью или наш хостинг с коллегами по цеху и сотрудниками Бегета – ждем вас в нашем сообществе в Telegram.

0
440