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