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

Сайт перестал открываться, служба не стартует, сервер ведёт себя странно — первым делом в логи. Почти всё, что происходит на сервере, где-то записано. Сложность в том, чтобы знать, где именно, и уметь быстро найти нужное среди тысяч строк.
Для экспериментов подойдёт любой 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.
Дальше: процессы и нагрузка — когда лог говорит, что что-то тормозит, но не говорит что.