Замена /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 с отправкой в удалённый сервер.