2 min read

journalctl: нашёл причину падения сервиса за 30 секунд

journalctl: нашёл причину падения сервиса за 30 секунд

Сервис упал. Прод молчит. Логи — простыня на сто строк.

Знакомо? Это случилось со мной вчера в два ночи. Клиентский API лёг, а в journalctl — мешанина из INFO, WARNING и одного ERROR, затерянного в середине.

Предыстория

Я запускаю production-стенды через systemd. Стандартная ситуация: unit-файл, хорошая практика, всё под контролем. Пока не наступает сбой.

В эту ночь ребята из команды деплоя обновили конфиг. Через час мониторинг показал 502. Я открыл journalctl и провалился в тонну шума: куча сообщений от других юнитов, таймстемпы скачут, нужная ошибка где-то на пятой странице.

Проблема

Журнал systemd по умолчанию показывает всё подряд. Если у вас на сервере 20 сервисов — вы получите общий поток: логи nginx, sshd, cron и вашего упавшего демона перемешаны в одну кашу.

Найти конкретный ERROR без фильтрации — это как искать иголку в стоге сена. Теряешь время, растёт MTTR, растёт злость.

Почему это важно

Каждая минута простоя — это деньги. Пока вы скроллите journalctl вручную, бизнес теряет клиентов. Я видел команды, которые тратили 15-20 минут на поиск одной строчки. При цене часа простоя в $1000 — это прямые убытки.

Системный администратор должен уметь вытащить суть за пару команд. Без магии, без сторонних утилит.

Решение

Фильтруй журнал по имени юнита — это убирает 90% шума.

Я перестал смотреть общий journalctl. Теперь всегда использую ключ -u.

Вот что реально работает. Три команды, которые я применяю ежедневно:

  • 🔍 journalctl -u myapp.service — логи только одного сервиса, без соседей
  • ⏰ journalctl -u myapp.service --since '5 min ago' — срез за последние минуты до падения
  • ⚠️ journalctl -u myapp.service -p err — только ошибки и критическое

Комбинирую их. Например: journalctl -u myapp.service --since '10 min ago' -p err. Получаю 2-3 строки вместо сотни. Место падения видно сразу.

В моём случае ошибка была в неверном параметре в конфиге. Без фильтрации я бы потратил 10 минут. С фильтрацией — нашёл за 20 секунд.

Результат

Сейчас я проверяю любой сбой за минуту. Прод упал — запускаю journalctl с -u и -p err, смотрю таймстемпы, иду в конфиг. Никакой паники.

Хотите совет? Повесьте эти три команды на стену или в заметки. Когда сервис ляжет в час ночи, вы скажете спасибо.


📬 Свяжитесь с нами

Хотите внедрить это в своем бизнесе? Пишите нам!

Связаться с нами
Telegram
WhatsApp
Email