Диагностика и исправление Администрирование Обновлено 7 Linux, VPS

Логи systemd journal на VPS: как искать причину сбоя

Узнайте, как использовать journalctl для диагностики сбоев на VPS: базовые команды, фильтры по времени и приоритету, анализ предыдущей загрузки и настройка постоянного хранения логов.

systemdjournalжурналжурналдиагностикаVPSсбои
Содержание
КороткоВ статье объясняется, как использовать systemd journal для диагностики сбоев VPS. Рассмотрены основные команды journalctl, фильтры по приоритету и времени, анализ предыдущей загрузки, а также настройка постоянного хранения журнала. Приведены типичные ошибки и ответы на частые вопросы.

При сбое на VPS первое, что нужно сделать, — посмотреть логи. В современных дистрибутивах Linux системные журналы собирает systemd-journald, а просматриваются они утилитой journalctl. В этой статье разберем, как правильно искать причину сбоя, какие команды использовать и как не потерять данные журнала после перезагрузки.

Что такое systemd journal?

Systemd journal — это централизованная система журналирования, которая хранит сообщения ядра, служб, приложений и самого systemd в бинарном формате. Логи автоматически структурированы, содержат точные временные метки и информацию об источнике. Это удобнее, чем классические текстовые файлы в /var/log, так как журнал поддерживает фильтрацию и работает даже на этапе ранней загрузки.

По умолчанию журнал хранится в памяти (/run/log/journal) и не переживает перезагрузку. Для серьезной диагностики полезно включить постоянное хранение, чтобы логи предыдущей загрузки были доступны после сбоя.

Базовые команды journalctl

Утилита journalctl предоставляет множество опций. Основные из них:

  • journalctl — показать весь журнал;
  • journalctl -f — следить за новыми записями (как tail -f);
  • journalctl -b — журнал текущей загрузки;
  • journalctl -b -1 — журнал предыдущей загрузки (если доступно постоянное хранение);
  • journalctl -u имя_службы — записи только для конкретной службы;
  • journalctl -p err — записи уровня err и выше;
  • journalctl --since "2025-04-10 12:00:00" — записи за последнее время.

Начните с journalctl -xe. Эта команда показывает последние записи с развернутыми пояснениями и позволяет быстро обнаружить ошибку.

Поиск ошибок по приоритету и времени

Журнал имеет уровни важности (0-7): emerg, alert, crit, err, warning, notice, info, debug. Для поиска проблемы чаще всего достаточно уровня err (3). Используйте фильтры:

journalctl -p err -b
journalctl -p err -b -1
journalctl -p err --since "1 hour ago"

Чтобы сузить окно поиска, комбинируйте --since и --until. Например, если сбой произошел в 14:30, запросите журнал с 14:25 до 14:35:

journalctl --since "2025-04-10 14:25" --until "2025-04-10 14:35"

Как найти причину сбоя: пошаговая последовательность

В случае внезапной перезагрузки или падения сервиса следуйте такому алгоритму:

  1. Определите, когда произошел сбой. Чаще всего это заметно по времени последней перезагрузки.
  2. Проверьте журнал предыдущей загрузки: journalctl -b -1 -p err.
  3. Если сбой связан с конкретным приложением, добавьте фильтр по службе: journalctl -u myservice -b -1 -p err.
  4. Ищите сообщения, предшествующие сбою. Обратите внимание на записи о нехватке памяти, блокировках, тайм-аутах.
  5. Проверьте также журнал ядра: journalctl -k -b -1.

Для удобства выгрузите логи в текстовый файл и проанализируйте их локально:

journalctl -b -1 -p err > crash.log

Настройка постоянного хранения журнала

Чтобы журнал переживал перезагрузки, отредактируйте конфигурационный файл /etc/systemd/journald.conf:

[Journal]
Storage=persistent

Затем перезапустите службу:

sudo systemctl restart systemd-journald

Теперь логи будут храниться в /var/log/journal. Проверьте размер журнала:

journalctl --disk-usage

При необходимости ограничьте размер, задав параметры в journald.conf, например SystemMaxUse=200M.

Заключение

Systemd journal — мощный инструмент для диагностики сбоев на VPS. Освоив базовые команды journalctl и настроив постоянное хранение, вы сможете быстро находить причины неполадок и предотвращать их повторение.

Мини-чеклист

  • Настроить постоянное хранение journal (Storage=persistent)
  • Проверить логи предыдущей загрузки: журнал -b -1 -p err
  • Использовать фильтры по времени и приоритету для сужения поиска
  • Проверить логи конкретной службы через -u
  • Проверить журнал ядра (-k)
  • Выгрузить журнал в файл при необходимости

Частые ошибки

  • Просмотр только текущей загрузки без -b -1 при перезапуске VPS
  • Игнорирование уровней приоритета (использование всего журнала без фильтра)
  • Отсутствие постоянного хранения журнала, из-за чего логи пропадают после перезагрузки
  • Поиск ошибок во всех логих, а не в конкретной службе сбоя
  • Неиспользование --since/--until для точного окна времени

Источники и документация

FAQ

Где хранятся логи systemd journal по умолчанию?

По умолчанию журнал хранится в оперативной памяти в /run/log/journal и очищается при перезагрузке. Для постоянного хранения нужно установить Storage=persistent в /etc/systemd/journald.conf.

Как узнать размер журнала journald?

Используйте команду journalctl --disk-usage. Она покажет общий размер журнала и его расположение.

Что делать, если journalctl не показывает логи предыдущей загрузки?

Скорее всего, не включено постоянное хранение. Настройте Storage=persistent в /etc/systemd/journald.conf и перезапустите systemd-journald. После этого логи будут сохраняться на диске.

Как ограничить рост журнала journald?

В /etc/systemd/journald.conf задайте параметры SystemMaxUse или SystemMaxFileSize для ограничения размера. Например, SystemMaxUse=200M. После изменения перезапустите systemd-journald.

Нужен быстрый рабочий доступ?

Если сейчас важнее вернуть подключение, чем продолжать ручную диагностику, переходите к прямому сценарию оформления доступа.

Получить доступ

Дальше по теме

Связанные статьи