Журналирование и анализ логов: journalctl, rsyslog, logrotate
TIP
Эта статья — часть серии Linux administration, посвящённой самостоятельному администрированию Linux, Self-Hosting и DevOps. Логи — это “чёрный ящик” вашей системы. Умение их читать и анализировать критически важно для диагностики, безопасности и стабильности.
📌 О чём эта статья?
Логи — основной источник информации о работе системы. Когда что-то идёт не так, логи — первое, куда нужно смотреть.
В этой статье вы узнаете:
Как устроено журналирование в Linux
Как использовать journalctl (systemd)
Как настроить централизованный сбор логов с rsyslog
Как предотвратить переполнение диска с logrotate
Практические примеры фильтрации, анализа и архивации
🧩 Как работает журналирование в Linux?
Linux использует несколько уровней логирования:
Ядро — события на уровне железа и драйверов
Системные службы — systemd, sshd, nginx и др.
Приложения — веб-серверы, базы данных, пользовательские скрипты
journald работает из коробки. rsyslog — расширяет возможности (сетевой сбор, фильтрация).
Источник: systemd — The Journal
📚Журналы в Linux: Обзор
Журналы содержат подробности о всех происходящих в системе процессах и её состоянии. Большинство лог-файлов в Linux традиционно находятся в каталоге /var/log.
Типичные примеры файлов журналов включают:
/var/log/apache2/ — журналы доступа и ошибок для веб-сервера Apache.
/var/log/auth.log — сведения о входе пользrователя в систему, привилегированном доступе и удаленной проверке подлинности.
/var/log/kern.log — журналы ядра.
/var/log/messages — общая некритическая системная информация. В некоторых современных дистрибутивах, как Fedora, файл /var/log/messages может отсутствовать, и сообщения напрямую управляются systemd-journald.
/var/log/yum.log — журналы управления пакетами RPM.
Для получения дополнительной информации о расположении лог-файлов в большинстве дистрибутивов Linux можно обратиться к файлам /etc/syslog.conf или /etc/rsyslog.conf.
🔍 journalctl — работа с systemd-журналом
journalctl — интерфейс к systemd journal, который хранит логи в бинарном формате с метаданными (PID, UID, команда, время).
В современных дистрибутивах Linux, таких как Fedora, Ubuntu, CentOS и openSUSE, используется система инициализации systemd. systemd-journald — это демон, который выполняет большинство функций, связанных с регистрацией событий, и является частью журнала systemd. Он призван заменить другие подсистемы журналирования в Linux.
Особенности systemd-journald:
Двоичный формат: в отличие от syslog, который обычно сохраняет сообщения в текстовых файлах, systemd-journald хранит их в двоичном формате. Все атрибуты сообщений автоматически индексируются, что делает поиск проще и быстрее.
Источники сообщений: журнал собирает и индексирует сообщения из нескольких источников, включая сокет /dev/log (для программного обеспечения, отправляющего сообщения согласно соглашениям Syslog), файл устройства /dev/kmsg (для сообщений ядра Linux, заменяя традиционный процесс klogd), а также сокеты /run/systemd/journal/stdout и /run/systemd/journal для сервисного программного обеспечения.
Настройки хранения: опция Storage в конфигурации systemd-journald определяет, следует ли сохранять журнал на диск. Возможные значения: volatile (только в памяти), persistent (сохраняет в /var/log/journal/, создавая каталог при необходимости), auto (сохраняет в /var/log/journal/, но не создает каталог, это значение по умолчанию) и none (удаляет все данные журнала). По умолчанию auto означает, что журнал не сохраняется между перезагрузками, если каталог /var/log/journal не создан.
🔹 Основные команды
journalctl # Все логи (самые старые сначала)journalctl -f # Следить за логами в реальном времени (аналог `tail -f`)journalctl -n 50 # Последние 50 строкjournalctl --since "1 hour ago"journalctl --until "10:00"journalctl --since yesterday
Rsyslog — это полнофункциональная система регистрации событий, которая пришла на смену оригинальному демону syslogd в системах Linux. Она расширяет возможности исходной системы Syslog, но сохраняет обратную совместимость с программным интерфейсом.
Функции Rsyslog:
Гибкость: позволяет сортировать сообщения по источникам (facility) и уровню важности (severity), а также направлять их в различные пункты назначения: в журнальные файлы, на терминалы пользователей и даже на другие компьютеры.
Централизованное журналирование: одна из самых ценных особенностей Rsyslog — это её способность централизовать процедуру регистрации событий в сети, что удобно для управления и просмотра файлов журналов с множества систем, а также обеспечивает важное преимущество в безопасности.
Архитектура: сообщения журнала можно представить как поток событий, а Rsyslog — как механизм обработки этого потока. Сообщения, интерпретируемые как события, принимаются в качестве входов, обрабатываются фильтрами и пересылаются по адресу назначения. Каждый из этих этапов является конфигурируемым и модульным.
Конфигурация Rsyslog:
Основной файл конфигурации — /etc/rsyslog.conf.
Конфигурация может включать дополнительные файлы из каталога /etc/rsyslog.d/*.conf, которые обрабатываются в лексикографическом порядке.
Правила в файле rsyslog.conf имеют формат селектор действие, где селектор отделен от действия пробелами или табуляцией. Селектор состоит из источника (facility) и уровня важности (severity).
Перезагрузка конфигурации: после внесения изменений в конфигурационный файл rsyslog необходимо отправить демону rsyslogd сигнал HUP для перезагрузки настроек, используя его PID (например, sudo kill -HUP 'cat /var/run/syslogd.pid').
🔹 Конфигурация: /etc/rsyslog.conf и /etc/rsyslog.d/
Пример правила:
# Логи уровня err и выше → в отдельный файл*.err /var/log/errors.log# Логи службы nginx → в свой файл:programname, isequal, "nginx" /var/log/nginx/rsyslog.log# Отправлять логи на удалённый сервер*.* @192.168.1.100:514
TIP
Используйте /etc/rsyslog.d/50-myapp.conf для пользовательских правил.
Logrotate — это утилита, предназначенная для ротации, сжатия и удаления старых файлов журналов.
Цель Logrotate:
Предотвращение переполнения диска: журналы в Linux могут разрастаться до неприличных размеров, что приводит к снижению производительности и в некоторых случаях может вызвать переполнение дискового пространства. Logrotate предотвращает эту проблему.
Автоматизация: обеспечивает автоматическое архивирование и удаление старых журналов по достижении определенного размера или по истечении заданного времени.
Гибкость: при правильной настройке файл журнала никогда не разрастется до огромных размеров.
Работа Logrotate:
Logrotate запускается с помощью планировщика cron. В простейшей конфигурации системы FreeBSD файл /etc/crontab содержит строку, которая запускает утилиту newsyslog (аналог logrotate в FreeBSD) каждый час.
Конфигурационные файлы для logrotate обычно находятся в /etc/logrotate.conf и в подкаталоге /etc/logrotate.d/.
Важно, что при попытке сжать или выполнить ротацию журнального файла, который был открыт демоном rsyslogd для записи, необходимо отправить сигнал HUP демону rsyslogd, чтобы избежать непредсказуемых результатов.
🔹 Как работает?
logrotate:
Регулярно (ежедневно) проверяет размер логов
“Поворачивает” старый лог: переименовывает в app.log.1, создаёт новый
Сжимает старые логи (app.log.1.gz)
Удаляет логи старше N дней
🔹 Конфигурация: /etc/logrotate.conf и /etc/logrotate.d/
Убедитесь, что timedatectl set-local-rtc 0 и часовой пояс настроен
📊 Полезные команды диагностики
# Где хранятся логи?ls /var/log/# Кто потребляет больше всего места?sudo du -sh /var/log/* | sort -hr | head -10# Проверить статус rsyslogsystemctl status rsyslog# Проверить, слушает ли rsyslog портsudo ss -tuln | grep 514# Посмотреть последние ошибки в системеjournalctl -p 3 -b -1 # Ошибки в предыдущей загрузке
✅ Заключение
Теперь вы можете:
Читать и фильтровать логи с journalctl
Настроить централизованный сбор с rsyslog
Автоматически ротировать логи с logrotate
Диагностировать проблемы и предотвращать переполнение диска