Skip to content

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