Найти в Дзене
Beget

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

Системным администраторам часто приходится просматривать логи Linux для устранения неполадок. Это одна из первых вещей, которую должен уметь делать системный администратор. Linux и приложения, работающие под его управлением, могут генерировать различные сообщения, которые записываются в разные файлы логов. Linux использует набор конфигурационных файлов, директорий, программ, команд и демонов для создания, хранения и обработки логируемых сообщений. Знание того, где система хранит свои лог-файлы и как использовать соответствующие команды просмотра логов, может помочь сэкономить драгоценное время при устранении неполадок.
В этой статье мы рассмотрим различные части механизма ведения логов в Linux. Команды в этой статье протестированы в “чистых” версиях Ubuntu 22.04, CentOS 9 и Debian 11. По умолчанию файлы логов в Linux хранятся в директории /var/log. Вы можете просмотреть список файлов логов в директории следующей командой: ls -l /var/log В результате выполнения команды вы увидите что-то
Оглавление

Введение

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

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

Обратите внимание!

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

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

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

ls -l /var/log

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

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

Ниже приведен список файлов логов, которые вы можете увидеть в /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 позволяет узнать историю входа пользователей в систему:

-2

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

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 результат выполнения команды может быть следующим:

-3

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

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

-4

Чтобы понять, что всё это значит, давайте рассмотрим различные типы сообщений, которые распознает 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.