Что-то сломалось, а где смотреть - непонятно. Показываем 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 не надо: можно оставить журнал в неконсистентном состоянии. Все три команды выше делают то же самое безопасно. Если место на диске всё же кончилось, причина обычно не в журнале, и сначала стоит измерить, что занимает диск.
Шпаргалка по ключам
Задача | Команда |
|---|---|
Последние записи службы |
|
Только ошибки с последней загрузки |
|
Записи за период |
|
Поиск по тексту |
|
Сообщения ядра и фаервола |
|
Следить за новыми строками |
|
Размер журнала |
|
Прошлые загрузки |
|
Частые вопросы
Как посмотреть логи службы в 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 и забрать скидку →
