Что-то сломалось, а где смотреть - непонятно. Показываем journalctl на живом сервере: служба, ошибки, период, поиск и размер логов.

Сайт отвечает 502, служба не стартует, кто-то бьётся в SSH. Во всех трёх случаях сначала смотрят в журнал. В современных Ubuntu и Debian он один на всю систему, и читается одной командой journalctl. Разберём, как достать из него нужное, не утонув в тысячах строк.

Коротко. sudo journalctl -u имя_службы -n 50 покажет последние 50 записей одной службы. -p err -b оставит только ошибки с последней загрузки, --since и --until зададут период, -g найдёт текст, -f будет следить за новыми строками. Без sudo обычный пользователь видит только свои записи. Размер журнала проверяет journalctl --disk-usage, а уменьшает --vacuum-size.

Что такое журнал и откуда он берётся

Журнал (journal) - единое хранилище записей от systemd, ядра и всех служб. Его ведёт служба systemd-journald: программа пишет строку в свой вывод, journald сохраняет её вместе с именем службы, временем и важностью. Поэтому вместо десятка файлов в /var/log можно задавать вопросы одному источнику. Сначала посмотрим, сколько он занимает и сколько загрузок помнит:

Девять мегабайт на сервере, который работает неделю, - нормальная цифра. Журнал обычно постоянный, если существует каталог /var/log/journal: тогда записи переживают перезагрузку. Чтобы увидеть, сколько загрузок в памяти, выполните journalctl --list-boots. Наш сервер не перезагружали с 4 октября, поэтому в списке одна строка.

Почему без sudo вы почти ничего не видите

Если запустить journalctl обычным пользователем, вывод начнётся с подсказки:

Это не ошибка. Журнал закрыт для чужих глаз, потому что в нём бывают адреса, имена пользователей и куски запросов. Есть два пути: ставить перед командой sudo или добавить пользователя в группу systemd-journal. Для разовой диагностики хватает sudo, во всех примерах дальше он стоит.

Журнал одной службы: ключ -u

Чаще всего нужна не вся система, а одна служба: nginx, ssh, docker. Ключ -u (unit) оставляет только её записи, а -n 4 показывает последние четыре строки, иначе вы получите всю историю с начала:

Ключ --no-pager печатает всё сразу, без постраничного просмотра: так удобнее копировать и передавать дальше. Здесь видны ваши собственные входы: Accepted publickey значит, что пользователь вошёл по ключу, а следующая строка отмечает начало сессии. Но на любом сервере с открытым SSH в этом же журнале лежит и другое: чужие адреса каждые несколько минут пробуют войти под root и guest. Как это остановить, разобрано в статье про fail2ban для SSH.

Имя службы можно уточнить через systemctl list-units --type=service. На Ubuntu служба SSH называется ssh, на других системах sshd.

Только ошибки: ключ -p

У каждой записи есть важность от emerg (0) до debug (7). Ключ -p err выведет ошибки и всё серьёзнее них, а -b ограничит выборку текущей загрузкой. Так видно, что именно пошло не так с момента запуска:

Здесь все ошибки приходят от сканеров, которые бросали соединение на середине. Для здорового сервера это фон. Тревожно, когда в этом списке появляются строки про nginx, базу данных или нехватку места.

Нужный период: --since и --until

Часто вы знаете, когда сломалось: «после обеда» или «вчера вечером». Укажите границы, и лишнее отсеется. Время можно писать как "2026-10-12 11:00", как yesterday или относительно, например "-2h" и "10 min ago":

Время в записях показано по часовому поясу сервера, а не вашему. Если сравниваете со своим логом на ноутбуке, сверьте пояса командой timedatectl.

Поиск по тексту: ключ -g

Ключ -g ищет строки по шаблону и подходит, когда вы знаете фразу из ошибки. Он принимает регулярные выражения и совмещается с остальными ключами. Например, найдём неудачные входы по паролю в журнале SSH:

Эти строки датированы 4 октября: ровно в тот день сервер был переустановлен, и вход по паролю ещё был включён. Позже мы отключили пароли, и новых таких записей нет. Журнал помнит и такие вещи, поэтому им удобно проверять, что настройка безопасности сработала.

Ядро и фаервол: ключ -k

Ключ -k показывает только сообщения ядра, как dmesg, но с нормальной историей. Именно сюда попадают отказы фаервола и сообщения о нехватке памяти (OOM). Если вы настроили ufw и хотите убедиться, что он режет лишнее:

Метка [UFW BLOCK] означает, что пакет отброшен правилом фаервола. Поле SRC - откуда пришёл пакет, DPT - в какой порт он стучался. В примере это посторонние обращения к портам 8888 и 23212, которые у нас закрыты. Видите такие строки - фаервол работает.

Следить за журналом в реальном времени: ключ -f

Ключ -f (follow) работает как tail -f: команда не завершается и печатает новые записи по мере их появления. Это основной приём, когда вы перезапускаете службу и хотите сразу увидеть, что она написала:

sudo journalctl -u nginx -f

Остановить просмотр можно сочетанием Ctrl+C. Если сайт отвечает 502 или 504, откройте одно окно с -f, во втором повторите запрос и смотрите, какая строка появится. Разбор таких кодов - в статье про ошибки nginx 404, 502, 504 и 413.

Сколько места занимает журнал и как его ужать

Журнал не бесконечный, но на загруженном сервере он способен занять сотни мегабайт, а на маленьком диске это ощутимо. Размер показывает уже знакомая --disk-usage. Ужать можно разово или навсегда:

  • sudo journalctl --vacuum-size=200M удалит самые старые записи, пока журнал не станет меньше 200 МБ;
  • sudo journalctl --vacuum-time=14d оставит записи за последние 14 дней;
  • постоянный потолок задаёт строка SystemMaxUse=200M в файле /etc/systemd/journald.conf, после правки перезапустите службу: sudo systemctl restart systemd-journald.

Вручную удалять файлы из /var/log/journal не надо: можно оставить журнал в неконсистентном состоянии. Все три команды выше делают то же самое безопасно. Если место на диске всё же кончилось, причина обычно не в журнале, и сначала стоит измерить, что занимает диск.

Шпаргалка по ключам

Задача

Команда

Последние записи службы

sudo journalctl -u имя -n 50

Только ошибки с последней загрузки

sudo journalctl -p err -b

Записи за период

sudo journalctl --since "-2h" --until "-1h"

Поиск по тексту

sudo journalctl -g "текст"

Сообщения ядра и фаервола

sudo journalctl -k

Следить за новыми строками

sudo journalctl -u имя -f

Размер журнала

sudo journalctl --disk-usage

Прошлые загрузки

journalctl --list-boots, затем -b -1

Частые вопросы

Как посмотреть логи службы в Linux?

Команда sudo journalctl -u имя_службы -n 50 покажет последние 50 записей. Чтобы следить за новыми, добавьте ключ -f. Имена служб смотрите в systemctl list-units --type=service.

Как показать только ошибки?

Используйте sudo journalctl -p err -b. Ключ -p err оставляет ошибки и всё серьёзнее них, а -b ограничивает текущей загрузкой.

Можно ли очистить журнал?

Да, штатно: sudo journalctl --vacuum-size=200M или --vacuum-time=14d. Файлы в /var/log/journal руками не удаляйте.

Почему journalctl пишет «Hint: You are currently not seeing messages from other users and the system»?

Вы запустили его без прав. Добавьте sudo или включите пользователя в группу systemd-journal.

Где логи nginx, если journalctl показывает только запуск и остановку?

В журнале лежат служебные сообщения самой службы. Журнал запросов (access log) и ошибок сайта nginx по умолчанию пишет в файлы /var/log/nginx/access.log и error.log.

Итог

  • Один журнал на всю систему, читается journalctl, обычно с sudo.
  • Одна служба - -u, ошибки - -p err -b, период - --since и --until, текст - -g, ядро и фаервол - -k, онлайн - -f.
  • Фоновый шум от сканеров SSH на открытом сервере нормален, тревожны ошибки ваших служб.
  • Размер проверяем --disk-usage, ужимаем --vacuum-size или SystemMaxUse, файлы вручную не удаляем.

🎁 -40% на первый месяц нового VPS. Промокод GUIDE40
Логи проще всего освоить на своём сервере. Первый месяц со скидкой.
Введите GUIDE40 при оформлении заказа. Работает один раз на клиента.
Выбрать VPS и забрать скидку →