Логи в Linux: journalctl, /var/log и поиск ошибок

Где современный Linux хранит логи, как фильтровать журнал systemd по службе, времени и приоритету, найти перебор паролей SSH, читать логи Nginx и не дать логам съесть диск. Ubuntu, Debian, AlmaLinux.

28 октября 2026 г.·3 мин чтения·journalctl, logs, systemd, nginx

Сайт перестал открываться, служба не стартует, сервер ведёт себя странно — первым делом в логи. Почти всё, что происходит на сервере, где-то записано. Сложность в том, чтобы знать, где именно, и уметь быстро найти нужное среди тысяч строк.

Для экспериментов подойдёт любой VPS с Ubuntu или Debian; на tanaka.host сервер можно взять на день-два, пройти инструкцию и удалить без лишних трат.

Где лежат логи

Исторически логи — текстовые файлы в /var/log, которые писала служба syslog: входы в auth.log, общие сообщения в syslog, у каждой программы свои файлы. Просто, но чтобы понять, что происходило с одной службой в определённый час, приходилось перебирать несколько файлов с разным форматом строк.

В системах с systemd есть единый журнал, его ведёт systemd-journald. Он собирает сообщения ядра, служб и всё, что службы выводят в консоль. У каждой записи есть служба-источник, приоритет и номер загрузки, поэтому фильтровать можно одной командой. Хранится журнал в двоичном виде в /var/log/journal, читается через journalctl.

На Debian 12 и минимальных образах Ubuntu классического syslog может не быть вовсе — тогда /var/log/syslog и /var/log/auth.log отсутствуют, о чём предупреждает /var/log/README. При этом многие программы по-прежнему пишут текстовые логи в /var/log: Nginx — access.log и error.log в /var/log/nginx. Итого два вида логов, и для каждого свой способ чтения.

1. Читайте журнал: journalctl

Без параметров journalctl выведет весь журнал с самого начала — слишком много. Команды, которые нужны чаще всего:

# Последние 50 строк всего журнала
journalctl -n 50

# Новые записи в реальном времени, выход по Ctrl+C
journalctl -f

# Записи конкретной службы
journalctl -u nginx

# За последний час или за промежуток
journalctl --since "1 hour ago"
journalctl --since "2026-10-21 10:00" --until "2026-10-21 10:30"

# Только с текущей загрузки сервера
journalctl -b

Параметры сочетаются: journalctl -u ssh --since today — всё по SSH за сегодня. Длинный вывод открывается в просмотрщике: стрелки листают, / ищет, q выходит.

На AlmaLinux и Rocky служба SSH называется sshd, а не ssh.

2. Найдите ошибки

У каждой записи есть приоритет. -p err оставит только ошибки и серьёзнее, -b ограничит текущей загрузкой:

journalctl -p err -b

Если не работает конкретная служба — её статус и последние строки лога:

systemctl status nginx
journalctl -u nginx -n 50

Подробнее про статусы — в статье про службы systemd.

3. Кто ломится по SSH

Любой сервер с открытым SSH круглосуточно перебирают боты. Это видно в журнале службы:

journalctl -u ssh --since "1 hour ago" | grep -E "Failed password|Invalid user"

Тысячи таких строк в сутки — обычный фон интернета, а не атака лично на вас. Но это наглядная причина заменить пароль на SSH-ключ и поставить fail2ban.

Короткая сводка неудачных и успешных входов:

lastb -n 10
last -n 10

4. Логи Nginx и других программ

У Nginx два файла:

  • access.log — строка на каждый запрос: IP посетителя, адрес, код ответа;
  • error.log — ошибки: отказ в доступе к файлу, недоступный бэкенд.
# Последние строки и слежение в реальном времени
tail -n 50 /var/log/nginx/error.log
tail -f /var/log/nginx/access.log

# Запросы, на которые сайт ответил 502
grep '" 502 ' /var/log/nginx/access.log

Текстовые логи не растут бесконечно: logrotate ежедневно переименовывает и сжимает их. Старые части лежат рядом как access.log.1 и access.log.2.gz. Сжатые читаются через zcat и zgrep.

5. Освободите место

Сколько занимают журнал и папки в /var/log:

journalctl --disk-usage
du -sh /var/log/* | sort -h | tail

Сократить журнал до размера или удалить старое — трогаются только архивные части, текущие записи остаются:

# Оставить не больше 500 МБ
journalctl --vacuum-size=500M

# Удалить записи старше двух недель
journalctl --vacuum-time=2weeks

Чтобы не разрастался впредь — предел в /etc/systemd/journald.conf:

[Journal]
SystemMaxUse=500M

и systemctl restart systemd-journald.

Не удаляйте логи через rm. Если программа держит файл открытым, после rm она продолжит писать в удалённый файл, и место не освободится до перезапуска. Большой текстовый лог обнуляйте: truncate -s 0 /var/log/nginx/access.log.

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

No such file or directory: /var/log/syslog. Службы syslog нет, системные сообщения только в журнале — читайте journalctl. Если нужны именно текстовые файлы: apt install -y rsyslog, он будет вести классические логи рядом с журналом.

journalctl показывает не всё. Обычный пользователь видит только свои записи. Запускайте от root, через sudo или добавьте пользователя в группу adm (systemd-journal на RHEL).

Время в логе не моё. Логи пишутся по часовому поясу сервера. timedatectl покажет пояс, journalctl --utc выведет записи по UTC.

Дальше: процессы и нагрузка — когда лог говорит, что что-то тормозит, но не говорит что.