Замена /var/log/syslog на journalctl в современных Linux-системах
Раньше системные логи в Linux традиционно записывались в текстовые файлы, такие как /var/log/syslog
(в Debian/Ubuntu) или /var/log/messages
(в RHEL/CentOS). Эти файлы легко читать, фильтровать с помощью grep
, tail
, less
и интегрировать с внешними инструментами.
Однако с появлением systemd
в большинстве современных дистрибутивов Linux появился новый подход к логированию — systemd-journald
. Эта служба собирает, хранит и предоставляет доступ к системным логам в бинарном формате, а основной инструмент для работы с ней — команда journalctl
.
В результате, файл /var/log/syslog
может отсутствовать по умолчанию, особенно в минимальных или свежих установках. Это вызывает недоумение у новичков и даже у опытных администраторов, привыкших к старым методам.
В этой статье мы разберём, почему /var/log/syslog
больше не всегда доступен, как работает journalctl
, и как перейти на новый способ просмотра системных логов.
Почему /var/log/syslog
может отсутствовать?
Файл /var/log/syslog
создаётся системой логирования rsyslog
или syslog-ng
, но только если:
- Служба
rsyslog
запущена. - В её конфигурации включено сохранение логов в текстовые файлы.
- Система использует традиционную модель логирования.
Однако в системах с systemd
:
journald
начинает работать с самого старта системы, даже до запускаrsyslog
.- По умолчанию
journald
хранит логи в бинарном виде в каталоге/var/log/journal/
. - Если
rsyslog
не настроен или отключён — файл/var/log/syslog
не создаётся.
🔍 Пример: В минимальной установке Ubuntu Server 22.04+ или Fedora без GUI,
/var/log/syslog
может отсутствовать, и администратор, ожидающий его увидеть, сталкивается с пустым или отсутствующим файлом.
Что такое journalctl
?
journalctl
— это утилита командной строки для просмотра и анализа логов, собранных systemd-journald
.
Она предоставляет:
- Быстрый доступ к логам с фильтрацией по времени, службам, уровням важности.
- Поддержку структурированных данных (логи — не просто строки, а набор полей: UNIT
, PRIORITY
, SYSLOG_IDENTIFIER
и др.).
- Возможность просмотра логов с момента последней загрузки, даже если система не писала в /var/log
.
Основные команды journalctl
1. Просмотр всех логов
journalctl
Выводит весь буфер логов (можно прокручивать с помощью
less
).
2. Просмотр логов в реальном времени
journalctl -f
Аналог
tail -f /var/log/syslog
.
3. Логи за сегодня
journalctl --since today
4. Логи за последний час
journalctl --since "1 hour ago"
5. Логи конкретной службы
journalctl -u ssh.service
Покажет только логи SSH-сервера (включая его перезапуски, ошибки и подключения).
6. Логи ядра (аналог dmesg
)
journalctl -k
7. Фильтрация по уровню важности
journalctl -p err
Покажет только сообщения с уровнем
error
и выше (err
,crit
,alert
,emerg
).Уровни:
emerg
,alert
,crit
,err
,warning
,notice
,info
,debug
.
8. Просмотр логов конкретного процесса
journalctl _PID=1234
9. Сохранение логов в текстовый файл (для отчётов)
journalctl --since today --output=short > daily.log
Или в JSON:
journalctl --output=json --all > logs.json
Как включить /var/log/syslog
, если он нужен?
Если вы хотите сохранить совместимость с инструментами, которые ожидают /var/log/syslog
, можно включить persistent-журнал и настроить rsyslog
.
Шаг 1: Включить постоянное хранение логов
Отредактируйте конфиг journald
:
sudo nano /etc/systemd/journald.conf
Раскомментируйте и установите:
[Journal]
Storage=persistent
Перезапустите службу:
sudo systemctl restart systemd-journald
Теперь логи будут сохраняться в /var/log/journal/
.
Шаг 2: Убедиться, что rsyslog
установлен и запущен
sudo apt install rsyslog # Ubuntu/Debian
sudo systemctl enable rsyslog
sudo systemctl start rsyslog
После этого rsyslog
начнёт читать логи из journald
и писать их в /var/log/syslog
.
Рекомендации для системных администраторов
✅ Используйте journalctl
как основной инструмент — он быстрее, удобнее и доступен всегда, даже если rsyslog
не запущен.
✅ Учитесь фильтровать по службам (-u
) и времени (--since
) — это экономит время.
✅ Не полагайтесь только на /var/log/syslog
— в современных системах он не гарантирован.
✅ Для долгосрочного хранения и централизованного логирования используйте rsyslog
+ journal
или syslog-ng
с отправкой в удалённый сервер.