Логгирование

rsyslog

Последнее обновление: 21.03.2024

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

eugene@Eugene:~$ ls -l /var/log
total 49200
-rw-r--r--  1 root              root                5267 Mar 20 11:22 alternatives.log
drwxr-x---  2 root              adm                 4096 Mar 21 07:08 apache2
-rw-r-----  1 root              adm                  426 Mar 21 07:08 apport.log
drwxr-xr-x  2 root              root                4096 Mar 20 11:22 apt
-rw-r-----  1 syslog            adm               141654 Mar 21 09:17 auth.log
-rw-------  1 root              root                4020 Mar 21 07:08 boot.log
-rw-r--r--  1 root              root              111435 Oct 16 13:37 bootstrap.log
-rw-rw----  1 root              utmp                3456 Mar 18 18:36 btmp
-rw-r-----  1 syslog            adm                89237 Jan 28 14:38 cloud-init.log
-rw-r-----  1 root              adm                 6404 Jan 28 14:38 cloud-init-output.log
drwxr-xr-x  2 root              root                4096 Mar 21 07:08 cups
-rw-r-----  1 root              adm               117189 Mar 21 07:08 dmesg
-rw-r--r--  1 root              root               63644 Mar 20 11:22 dpkg.log
-rw-r--r--  1 root              root                   0 Oct 16 13:36 faillog
-rw-r--r--  1 root              root                4617 Jan 28 14:41 fontconfig.log
drwx--x--x  2 root              gdm                 4096 Jan 28 14:38 gdm3
-rw-r--r--  1 root              root               46655 Mar 21 07:08 gpu-manager.log
drwxrwx---  4 root              adm                 4096 Jan 28 14:36 installer
drwxr-sr-x+ 3 root              systemd-journal     4096 Jan 28 14:38 journal
-rw-r-----  1 syslog            adm              1770885 Mar 21 09:00 kern.log
-rw-rw-r--  1 root              utmp              292292 Mar 20 15:12 lastlog
drwxr-x---  2 root              root                4096 Oct  4 17:58 sssd
-rw-r-----  1 syslog            adm             13544272 Mar 21 09:20 syslog
-rw-r--r--  1 root              root               29673 Mar 20 08:27 ubuntu-advantage.log
drwxr-x---  2 root              adm                 4096 Mar  1 06:40 unattended-upgrades
-rw-rw-r--  1 root              utmp              187008 Mar 21 07:09 wtmp
eugene@Eugene:~$ 

Конкретное содержимое может отличаться в зависимости от системы и установленного программного обеспечния. Тем не менее здесь мы можем выделить прежде всего файл syslog (или системны лог), в который записываются основые события в системе.

Кроме процесса rsyslog в эту папку логгировать могут и другие процессы. Например, веб-сервер apache также записывает здесь свои сообщения в специальную папку. Но поскольку основным процессом, которые отвечает за логгирование в системе, является rsyslog, то соответственно большое значение имеет его конфигурация, которая позволяет определить различные аспекты логгирования.

Основной файл конфигурации rsyslog - /etc/rsyslog.conf. Помимо этого файла также конфигурацию определяют файлы из каталога /etc/rsyslog.d - cодержимое этих файлов добавляется к конфигурации, указанной в /etc/rsyslog.conf, что позволяет пакетам RPM или Debian расширять конфигурацию без изменения содержимого файла /etc/rsyslog.conf.

Посмотрим, что из себя представляет конфигурация из /etc/rsyslog.conf

eugene@Eugene:~$ cat /etc/rsyslog.conf
# /etc/rsyslog.conf configuration file for rsyslog
#
# For more information install rsyslog-doc and see
# /usr/share/doc/rsyslog-doc/html/configuration/index.html
#
# Default logging rules can be found in /etc/rsyslog.d/50-default.conf


#################
#### MODULES ####
#################

module(load="imuxsock") # provides support for local system logging
#module(load="immark")  # provides --MARK-- message capability

# provides UDP syslog reception
#module(load="imudp")
#input(type="imudp" port="514")

# provides TCP syslog reception
#module(load="imtcp")
#input(type="imtcp" port="514")

# provides kernel logging support and enable non-kernel klog messages
module(load="imklog" permitnonkernelfacility="on")

###########################
#### GLOBAL DIRECTIVES ####
###########################

# Filter duplicated messages
$RepeatedMsgReduction on

#
# Set the default permissions for all log files.
#
$FileOwner syslog
$FileGroup adm
$FileCreateMode 0640
$DirCreateMode 0755
$Umask 0022
$PrivDropToUser syslog
$PrivDropToGroup syslog

#
# Where to place spool and state files
#
$WorkDirectory /var/spool/rsyslog

#
# Include all config files in /etc/rsyslog.d/
#
$IncludeConfig /etc/rsyslog.d/*.conf
eugene@Eugene:~$ 

Структура файла состоит главным образом из двух компонентов - модули и глобальные директивы. В конце файла мы можем увидеть директиву

$IncludeConfig /etc/rsyslog.d/*.conf

Она подключает содержимое файлов с расширением .conf из каталога "/etc/rsyslog.d/". В частности, в этом каталоге мы можем найти файл 50-default.conf

eugene@Eugene:~$ ls /etc/rsyslog.d
20-ufw.conf  21-cloudinit.conf  50-default.conf
eugene@Eugene:~$ 

Файл 50-default.conf определяет базовые правила логгирования для rsyslog. Посмотрим на содержимое этого файла. Так, в моем случае он выглядит следующим образом:

eugene@Eugene:~$ 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

#
# Some "catch-all" log files.
#
#*.=debug;\
#	auth,authpriv.none;\
#	news.none;mail.none	-/var/log/debug
#*.=info;*.=notice;*.=warn;\
#	auth,authpriv.none;\
#	cron,daemon.none;\
#	mail,news.none		-/var/log/messages

#
# Emergencies are sent to everybody logged in.
#
*.emerg				:omusrmsg:*

#
# I like to have messages displayed on the console, but only on a virtual
# console I usually leave idle.
#
#daemon,mail.*;\
#	news.=crit;news.=err;news.=notice;\
#	*.=debug;*.=info;\
#	*.=notice;*.=warn	/dev/tty8
eugene@Eugene:~$ 

Правила определяют, куда будет производиться логгирования для определенного объекта (facility). В частности, можно установить правила для следующих объектов:

  • auth: обрабатывает события, связанные с аутентификацией.

  • authpriv: аналогичен auth и также обрабатывает события, связанные с аутентификацией.

  • cron: обрабатывает сообщения, созданные подсистемой cron.

  • daemon: логгирует сообщения, созданных демоном (сервисом).

  • kern: логгирует сообщения, которые относятся к ядру. Эта возможность также определяет сообщения, генерируемые брандмауэром ядра iptables.

  • lpr: логгирует сообщения, которые относятся к устаревшей системе печати lpr.

  • mail: логгирует сообщения, которые связаны с почтой.

  • news: логгирует сообщения, которые связаны с работой с протоколом NNTP (протоколом передачи сетевых новостей).

  • user: логгирует сообщения, которые относятся к пользователю.

Приоритеты

При логгировании объекты создают сообщения с заданным приоритетом. Если указан приоритет, то все сообщения с этим и более высокими уровнями приоритетов записываются в указанный файл лога. В rsyslog применяются следующие приоритеты (в порядке возрастания):

  • debug: отладочная информация, дает подробные данные обо всем, что делает объект. Например, сообщает, какие системные и библиотечные вызовы выполняет объект.

  • info: вся стандартная информация о том, что делает процесс. Например, дает информацию об открытых файлах, но не дает подробной информации о системных и библиотечных вызовах.

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

  • warn (устаревший вариант - warning): информация о предупреждениях, возникших при выполнении процесса. Предупреждение определяет ситуацию, когда нормальная функциональность нарушена, но объект продолжает работать.

  • err (устаревший вариант - error): информация об ошибках. Обычно сообщения уровня ошибки касаются ситуаций, которые нарушают нормальное функционирование объекта.

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

  • alert: информация о ситуации, которая может привести к остановке компьютера.

  • emerg (устаревший вариант - panic): указывает на прекращение нормальной работы компьютера.

Для настройки логгирования в файле конфигурации объект сочетается с приоритетом в формате:

объект.приоритет

Причем упомянутый приоритет также включает все более высокие приоритеты. Например:

kern.info

Данная запись относится к информационным сообщениям, а также к сообщениям с более высоким приоритетом, которые генерируются ядром.

Можно указать несколько объектов в одной строке через запятую. Например, следующая запись относится как к информационным сообщениям, связанным с ядром, так и к информационным сообщениям, связанным с процессом cron:

kern,cron.info

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

*.crit

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

mail.=info

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

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

mail.!info

Файлы логов

Когда происходит событие, над ним выполняется действие. Обычно это действие означает, что сообщение куда-то отправляется. Файл конфигурации позволяет определить место логгирования сообщений для различных комбинаций объектов и приоритетов. Обычно в качестве места логгирования применяюся файлы. При указании имени файла сообщения записываются в этот файл. Имя файла указывается как абсолютный путь. Чтобы каждое отдельное сообщение в файл конфигурации не записывалось немедленно, перед именем файла можно поставить знак - (дефис) . Это означает, что изменения сначала буферизуются, прежде чем они будут записаны в реальный файл конфигурации. Например:

kern.*				-/var/log/kern.log

В данном случае все сообщения (всех приоритетов), которые относятся к ядру, логгируются в файл "/var/log/kern.log" с предварительной буферизацией.

Символ ; (точка с запятой) используется в качестве разделителя, а знак \ гарантирует, что следующая часть интерпретируется как принадлежащая той же строке:

#*.=debug;\
#	auth,authpriv.none;\
#	news.none;mail.none	-/var/log/debug

Или, к примеру, в файле конфигурации есть такая строчка:

*.*;auth,authpriv.none		-/var/log/syslog

Выражение *.* указывает все объекты и все приоритеты. Но потом добавляется auth,authpriv.none. Фактически это означает, что логгирование для объекта auth/authpriv из этого правила исключается. В итоге события для всех объектов, кроме auth/authpriv (и всех приоритетов) записывааются с предварительной буферизацией в файл /var/log/syslog. Поэтому открыв этот файл, мы найдем подавляющее большинство событий системы.

logger

Команда logger позволяет отправить сообщения в rsyslog. Это позволяет использовать ее для логгирования в сценарии, где логгирование по умолчанию недоступно. И чтобы логгировать сообщение, достаточно передать команде это сообщение в виде строки:

logger hello metanit.com

После этого в файле /var/log/syslog появится строчка наподобие:

2024-03-21T09:01:15.794001+03:00 Eugene eugene: hello metanit.com

При использовании команды logger логгироемое сообщение можно помечать определенным тегом. Это в дальнейшем облегчит распознавание подобных сообщений. Для этого применяется параметр -t. Например, команда

logger -t hello hi metanit.com

пометит сообщение "hi metanit.com" в файле syslog с тегом hello, что облегчит поиск сообщений, добавленных с помощью logger. Например, строка в syslog будет выглядеть наподобие следующего:

2024-03-21T09:09:03.924923+03:00 Eugene hello: hi metanit.com
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850