Представьте: сервер тормозит, служба не запускается, или вы просто видите странное сообщение в консоли. В мире Windows вы бы открыли «Просмотр событий». В современном Linux, начиная с systemd, ваш лучший друг и детектив — команда journalctl - Это не просто просмотр логов, это мощный инструмент для глубокого анализа всего, что происходит в системе. Давайте разберемся, как им пользоваться эффективно.
Что такое journalctl и почему он заменил старые логи? Раньше логи лежали в /var/log/ в виде текстовых файлов (syslog, messages, auth.log)
journalctl - Это централизованная система журналирования, тесно интегрированная с systemd. Она собирает логи не только от системных служб, но и от ядра, демонов и даже приложений. Ключевые преимущества:
Структурированность: Записи хранятся в бинарном формате с метаданными (временная метка, юнит, PID, приоритет), что позволяет делать умную фильтрацию.
📌Централизация: Все в одном месте.
📌Целостность: Защита от модификации (в определенных конфигурациях).
📌Интеграция с systemd: Просмотр логов конкретной службы делается одной командой.
Базовое использование: С чего начать?
Простой запуск sudo journalctl выведет все логи с момента загрузки системы, начиная с самых старых. Это как огромный свиток — полезно, но не всегда удобно.
Фильтрация — главная суперсила journalctl
Вот где начинается магия. Вместо grep (хотя его тоже можно использовать) journalctl предлагает встроенные фильтры.
- По службе (unit): Это самое частое действие.
plaintextjournalctl -u nginx.service journalctl -u sshd -f # -f для follow (как tail -f)
- По приоритету (уровню важности): Смотрим только на ошибки или критические сообщения.
plaintextjournalctl -p err -b # все ошибки с последней загрузки
Уровни: emerg (0), alert (1), crit (2), err (3), warning (4), notice (5), info (6), debug (7).
- По времени:
plaintextjournalctl --since "2024-01-15 09:00:00" --until "2024-01-15 18:00:00" journalctl --since yesterday journalctl --since "1 hour ago"
- По загрузке (boot):
plaintextjournalctl -b # логи текущей загрузки journalctl -b -1 # логи предыдущей загрузки journalctl -b -2 # и так далее journalctl --list-boots # показать список загрузок
- Комбинации фильтров (логическое И):
plaintextjournalctl -u mysql -p err --since today
Практические сценарии: «Как сделать…»
«Что привело к падению системы?» Смотрим логи предыдущей загрузки:
plaintextjournalctl -b -1 -p crit..emerg
«Почему не стартует моя служба?»
plaintextsudo systemctl status myapp.service # смотрим последние строчки journalctl -u myapp.service -xe # углубляемся в детали
«Кто и когда пытался залогиниться?»
plaintextjournalctl _COMM=sshd --since today | grep "Failed password"
«Найти все сообщения от ядра за последний час»:
plaintextjournalctl -k --since "1 hour ago"
Важные нюансы и настройка
- Ротация логов: По умолчанию journalctl ротирует логи автоматически. Настройки находятся:
/etc/systemd/journald.conf. Можно ограничитьSystemMaxUse=. - Постоянное хранение: Убедитесь, что в конфиге:
Storage=установлено вpersistent(логи хранятся в/var/log/journal/), иначе они пропадут после перезагрузки. - Чтение без sudo: Обычный пользователь видит только логи своих процессов. Для полного доступа нужны права root.
Заключение
journalctl - Это гораздо больше, чем tail или cat. Это полноценная система диагностики. Потратьте немного времени на освоение его фильтров (-u, -p, -b, --since) и вы начнете решать проблемы в десятки раз быстрее. Он избавляет от необходимости запоминать расположение десятков лог-файлов и предоставляет единый, мощный интерфейс для расследования любых инцидентов в вашей системе.



