Как смотреть логи сервера: journalctl, /var/log и tail -f
Логи сервера смотрят двумя путями: через journalctl (журнал systemd, куда пишут большинство сервисов) и через файлы в /var/log. Живой поток удобно ловить командой tail -f, а ошибки искать через grep. Ниже — рабочие команды на каждый день.
Где лежат логи
- journald — централизованный журнал systemd, доступен через
journalctl. - /var/log/ — текстовые файлы отдельных сервисов (nginx, mysql, почта).
- dmesg — сообщения ядра.
journalctl: основной инструмент
Показать весь журнал (с конца, с прокруткой):
journalctl -e
Живой поток в реальном времени
journalctl -f
Аналог tail -f, но для всего журнала systemd. Прервать — Ctrl+C.
Логи конкретного сервиса
journalctl -u nginx
journalctl -u ssh -f
Фильтр по времени
journalctl --since "2026-05-26 09:00" --until "2026-05-26 10:00"
journalctl --since "1 hour ago"
journalctl --since today
Только ошибки
По уровню приоритета (0 — emergency, 3 — error):
journalctl -p err -b
-b ограничивает вывод текущей загрузкой системы. Логи предыдущей загрузки:
journalctl -b -1
Логи ядра
journalctl -k
Последние N строк
journalctl -u nginx -n 50
Файлы в /var/log
Полезные файлы (зависит от дистрибутива):
| Файл | Что содержит |
|---|---|
/var/log/syslog |
Общие системные события (Debian/Ubuntu) |
/var/log/auth.log |
Аутентификация, SSH-входы |
/var/log/nginx/error.log |
Ошибки веб-сервера |
/var/log/nginx/access.log |
Запросы к сайту |
/var/log/mysql/error.log |
Ошибки MySQL/MariaDB |
/var/log/dmesg |
Сообщения ядра при старте |
tail, head, less
Живой просмотр файла:
tail -f /var/log/nginx/access.log
Последние 100 строк:
tail -n 100 /var/log/nginx/error.log
Постранично с поиском (нажмите / для поиска внутри):
less /var/log/syslog
Следить сразу за несколькими файлами:
tail -f /var/log/nginx/access.log /var/log/nginx/error.log
Поиск по логам через grep
Найти ошибки:
grep -i "error" /var/log/nginx/error.log
Показать контекст (3 строки до и после):
grep -i -C 3 "segfault" /var/log/syslog
Считать неудачные входы по SSH:
grep "Failed password" /var/log/auth.log | wc -l
Живой поток с фильтром:
tail -f /var/log/nginx/access.log | grep " 500 "
Анализ веб-логов
Топ IP-адресов по числу запросов:
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head
Топ запрашиваемых URL:
awk '{print $7}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head
Размер и ротация логов
Размер журнала systemd:
journalctl --disk-usage
Очистить старые записи, оставив последние 200 МБ или 7 дней:
journalctl --vacuum-size=200M
journalctl --vacuum-time=7d
Текстовые логи ротируются через logrotate — настройки в /etc/logrotate.d/.
Постоянное хранение журнала
По умолчанию на некоторых системах journald хранит логи только в памяти и теряет их при перезагрузке. Включите постоянное хранение:
mkdir -p /var/log/journal
systemd-tmpfiles --create --prefix /var/log/journal
systemctl restart systemd-journald
Теперь journalctl -b -1 покажет логи предыдущих загрузок — это незаменимо при разборе внезапных перезагрузок.
Фильтрация по нескольким условиям
journalctl комбинирует фильтры. Ошибки конкретного сервиса за последний час:
journalctl -u nginx -p err --since "1 hour ago"
Логи по конкретному процессу (PID):
journalctl _PID=1234
По исполняемому файлу:
journalctl /usr/sbin/sshd
Формат вывода для разбора
Для передачи в скрипты удобен JSON:
journalctl -u nginx -o json-pretty --since today
Компактный вывод без переносов и с приоритетами:
journalctl -o short-precise -p warning
Мониторинг ошибок в реальном времени
Собрать «панель тревоги» — живой поток только ошибок со всех сервисов:
journalctl -f -p err
Оставьте команду в отдельной сессии tmux/screen, чтобы сразу видеть проблемы по мере их появления. Это простая замена дашбордам, когда нужно быстро разобраться в поведении сервера.
Частые вопросы
Почему в /var/log/auth.log пусто?
На системах с journald логи могут не дублироваться в файлы. Смотрите journalctl -u ssh.
Как посмотреть логи упавшего сервиса?
journalctl -u имя_сервиса -n 100 --no-pager — покажет последние строки перед падением.
Логи занимают много места — что делать?
Ограничьте журнал через journalctl --vacuum-size и задайте SystemMaxUse в /etc/systemd/journald.conf.
Как экспортировать логи в файл?
journalctl -u nginx --since today > nginx-today.log.
В чём разница между tail -f и journalctl -f?
tail -f следит за одним файлом, journalctl -f — за всем журналом systemd с фильтрами по сервису и приоритету.
Уверенная работа с логами упрощает эксплуатацию. Разместите проект на аренде VPS или VPS для VPN и безопасности. Мониторинг и разбор инцидентов возьмёт на себя Администрирование серверов.
