Логи systemd journal на VPS: как искать причину сбоя
Узнайте, как использовать journalctl для диагностики сбоев на VPS: базовые команды, фильтры по времени и приоритету, анализ предыдущей загрузки и настройка постоянного хранения логов.
Содержание
При сбое на 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"
Как найти причину сбоя: пошаговая последовательность
В случае внезапной перезагрузки или падения сервиса следуйте такому алгоритму:
- Определите, когда произошел сбой. Чаще всего это заметно по времени последней перезагрузки.
- Проверьте журнал предыдущей загрузки:
journalctl -b -1 -p err. - Если сбой связан с конкретным приложением, добавьте фильтр по службе:
journalctl -u myservice -b -1 -p err. - Ищите сообщения, предшествующие сбою. Обратите внимание на записи о нехватке памяти, блокировках, тайм-аутах.
- Проверьте также журнал ядра:
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.
Нужен быстрый рабочий доступ?
Если сейчас важнее вернуть подключение, чем продолжать ручную диагностику, переходите к прямому сценарию оформления доступа.
Получить доступ