Введение / Зачем это нужно
Journalctl — это команда для доступа к журналам systemd, которая объединяет логи из различных источников, включая ядро, системные службы и приложения. В отличие от традиционных файлов логов в /var/log, journalctl предоставляет структурированный доступ с возможностью фильтрации, поиска и экспорта. Этот гайд поможет вам освоить основные операции для повседневного администрирования и диагностики.
Требования / Подготовка
Перед началом убедитесь, что:
- Ваша система использует systemd: Проверьте, выполнив
systemctl status— если команда доступна, systemd установлен. - Доступ к терминалу: Вам понадобится терминал или SSH-подключение к серверу.
- Права sudo: Для просмотра всех журналов, включая защищённые, используйте
sudo journalctl. Без sudo вы увидите только свои логи. - Пакет systemd-journald: Обычно предустановлен. Если нет, установите через менеджер пакетов (например,
apt install systemdна Debian/Ubuntu).
Шаг 1: Просмотр всех записей журнала
Базовая команда journalctl без аргументов выводит все записи от самой ранней до последней. По умолчанию используется less-подобный пейджер для навигации.
journalctl
Для вывода без паузы (прямой поток) добавьте --no-pager:
journalctl --no-pager
Чтобы увидеть только последние записи, используйте -n с количеством строк:
journalctl -n 50 # последние 50 записей
Шаг 2: Фильтрация по времени
Journalctl позволяет фильтровать записи по временному диапазону с помощью --since и --until. Время можно указывать в различных форматах.
Пример: записи с 1 января 2024 года:
journalctl --since "2024-01-01"
Диапазон: с 1 по 2 января 2024:
journalctl --since "2024-01-01" --until "2024-01-02"
Относительное время: за последний час:
journalctl --since "1 hour ago"
Или с конкретного времени суток:
journalctl --since "09:00" --until "10:00"
Шаг 3: Фильтрация по системной службе
Чтобы просмотреть логи конкретной службы systemd, используйте флаг -u с именем юнита.
Например, логи службы SSH:
journalctl -u sshd.service
Для службы Nginx:
journalctl -u nginx.service
Вы можете комбинировать с фильтрацией по времени:
journalctl -u sshd.service --since "today"
Шаг 4: Поиск по ключевым словам и уровням важности
Journalctl поддерживает фильтрацию по уровню важности (priority) с помощью -p. Уровни: emerg, alert, crit, err, warning, notice, info, debug.
Например, только ошибки (err) и критические (crit):
journalctl -p err
Для поиска по тексту используйте конвейер с grep:
journalctl | grep "failed"
Для case-insensitive поиска:
journalctl | grep -i "error"
Комбинируйте фильтры:
journalctl -u nginx.service -p err --since "1 hour ago"
Шаг 5: Экспорт и сохранение логов
Для сохранения журнала в файл перенаправьте вывод:
journalctl > all_logs.txt
Для экспорта в бинарный формат journal (можно импортировать обратно):
journalctl --output=export > logs.journal
Экспорт в JSON для обработки скриптами:
journalctl --output=json > logs.json
Ограничьте размер экспорта, указав количество записей:
journalctl -n 1000 > recent_logs.txt
Шаг 6: Управление размером журнала и очистка
С течением времени журнал может занимать много места. Используйте команды для управления.
Просмотрите текущее использование дискового пространства:
journalctl --disk-usage
Очистите старые записи, оставив только последние, например, 100 МБ:
sudo journalctl --vacuum-size=100M
Удалите записи старше определённого времени, например, 7 дней:
sudo journalctl --vacuum-time=7d
Принудительно ротируйте журнал (создайте новый, начните запись в него):
sudo journalctl --rotate
Эти операции требуют прав sudo.
Проверка результата
После выполнения команд убедитесь, что:
- Команда
journalctlвыводит ожидаемые записи (не пустой вывод, если ожидаются логи). - Фильтры работают корректно: например,
journalctl -u sshd.serviceпоказывает логи только SSH. - Экспортированные файлы созданы и содержат данные (проверьте размер).
- При управлении размером,
journalctl --disk-usageпоказывает уменьшенное использование.
Если что-то не работает, перейдите к разделу "Возможные проблемы".
Возможные проблемы
Проблема: journalctl не найден или команда не распознана.
Решение: Убедитесь, что systemd установлен. На очень старых системах или специализированных дистрибутивах может использоваться syslog. Проверьте наличие пакета systemd.
Проблема: Нет доступа к журналам, выводятся только ваши записи.
Решение: Используйте sudo journalctl для полного доступа. Если sudo недоступен, проверьте настройки прав в /etc/systemd/journald.conf (параметр SystemMaxUse и т.д., но это сложнее).
Проблема: Журнал пустой или содержит мало записей.
Решение: Проверьте, что systemd-journald запущен: systemctl status systemd-journald. Также журнал может быть ограничен в размере или настроен на запись только в память (volatile). Проверьте конфигурацию в /etc/systemd/journald.conf.
Проблема: Ошибка при очистке журнала (например, "Failed to open directory").
Решение: Убедитесь, что вы используете sudo для операций ротации и очистки. Также проверьте, не используется ли журнал в данный момент (редко, но возможно).
Проблема: Команда journalctl зависает или медленно выводит.
Решение: Добавьте --no-pager для отключения пейджера. Или ограничьте вывод с помощью -n или фильтров по времени. Большие журналы могут быть медленными.