Логирование

Описание

  • За формирование логов отвечает системный демон rsyslogd

    • Все логи записываются в var/log

  • С выпуском RHEL 7 за все системные процессы стал отвечать systemd

    • Логирование стало осуществляться за счет демона systemd-journald

    • systemd-journald концентрирует все сообщения, которые генерируются слуажбами systemd

    • Логи при этом записываются в /dev/log

    • Доступ к логам осуществляется через journalctl

    • /dev/log также связан с rsyslogd, который контролирует запись этих логов и в /var/log

    • journalctl работает только с systemd-journald, соответственно чтобы через него получать доступ к логам, необходимо для journald сформировать свой таргет логирования - /var/log/journal

Описание rsyslog

  • Для работы rsyslog необходим активный сервис rsyslogd

  • Главный конфигурационный файл хранится в /etc/rsyslog.conf

<....>
#### RULES ####

# Log all kernel messages to the console.
# Logging much else clutters up the screen.
#kern.*                                                 /dev/console

# Log anything (except mail) of level info or higher.
# Don't log private authentication messages!
*.info;mail.none;authpriv.none;cron.none                /var/log/messages

# The authpriv file has restricted access.
authpriv.*                                              /var/log/secure

# Log all the mail messages in one place.
mail.*                                                  -/var/log/maillog


# Log cron stuff
cron.*                                                  /var/log/cron

# Everybody gets emergency messages
*.emerg                                                 :omusrmsg:*
<....>
  • Snap-in файлы могут располагаться в /etc/rsyslog.d/

  • Каждая строка логгера содерит следущие значения:

    • facility - объект, для которого сформирован лог

    • severity - уровень важности, с которого должно быть осуществлено логирование

    • destination - назначение, в которое необходимо записать лог

  • Логи как правило записываются в /var/log

    • команда logger записывает в rsyslog команды вручную

Описание facility:

  • rsyslog имеет (и должен иметь) обратную совместимость с архаичным syslog сервисом

  • В syslog определено фиксированное число объектов (kern, authpriv, cron и др.)

  • Для сервисов, у которых неопределены объекты, может использоваться local facility

  • Из-за ограниченности типов объектов, некоторые службы пишут логи сами, не используя rsyslog

Systemd-journald

  • Systemd-journald - служба логирования, являющаяся частью systemd

    • Интегрирована с systemctl status <unit> (показывает последние сообщения лога в выводе статуса)

  • Для работы с systemd-journald используется команда journalctl

  • Сообщения записываются также и в rsyslog с использованием модуля imjournal для rsyslog

  • Для того, чтобы systemd-journald сохранял логи после перезагрузки необходимо создать ему директорию /var/log/journal

  • Конфигурация хранится в /etc/systemd/journald.conf

  • Вывод лога за службу

[admin@centos8 ~]$ journalctl UNIT=sshd
-- Logs begin at Fri 2020-02-14 20:35:33 MSK, end at Sat 2020-03-14 17:49:25 MSK. --
-- No entries --

Сохранение логов journald

  • По-умолчанию журнал записывается в /run/log/journal, который автоматически очищается при перезагрузке

  • Для изменения правила поведения при перезагрузке необходимо изменить настройки /etc/systemd/journald.conf

    • Изменить необходимо параметр Storage

      • persistent - переключит сохранение логов в /var/log/journal, если директория не создана - создаст

      • volatile - сохранение логов только в /run/log/journal

      • auto - сохраняет в /var/log/journal, если директория есть, если ее нет - в /run/log/journal

  • Лог перезаписывается каждый месяц

  • Журнал логов не может занимать больше 10% пространства системы

  • И также логирование останавливается, если осталось менее 15% места в системе

    • Эти настройки также могут быть изменены через /etc/systemd/journald.conf

Logrotate

  • Logrotate позволяет избежать переполнения системы логами

  • Запускается через cron.daily

  • Основные настройки хранятся в /etc/logrotate.conf, snap-in могут быть в /etc/logrotate.d/

  • По умолчанию:

    • файлы логов обнуляются еженедельно

    • логи хранятся не более, чем за 4 недели

    • после удаление лога, создается новый файл, старый переименовывается с префиксом dataext

# see "man logrotate" for details
# rotate log files weekly
weekly

# keep 4 weeks worth of backlogs
rotate 4

# create new (empty) log files after rotating old ones
create

# use date as a suffix of the rotated file
dateext

# uncomment this if you want your log files compressed
#compress

# RPM packages drop log rotation information into this directory
include /etc/logrotate.d

# system-specific logs may be also be configured here.

Last updated