Linux Labs

Наблюдаемость: метрики, алерты, логи / Ступень 8 из 9

Расследование по журналам

Не запущена Запускается обычно ~20 с
Выйти из урока

Шаг 4 из 6 · на машине · 9 мин

Ядро на той же шкале

Бывает, что приложение ничего не успевает записать, — тогда причину называет ядро.

Ядро пишет в журнал свои события — диски, сеть, память; их показывает sudo journalctl -k. У службы с потолком памяти MemoryMax процесс, вышедший за потолок, завершает OOM killer ядра — строкой Memory cgroup out of memory: Killed process 1074 (python3). Записать что-то сам процесс уже не успевает, а systemd отмечает в журнале службы Failed with result 'oom-kill' и через RestartSec запускает её снова.

Пока служба перезапускается, на её порту никто не слушает, и nginx отвечает 502. В error.log он пишет connect() failed (111: Connection refused) — отказ в соединении с upstream. На одной шкале времени три источника складываются в историю: в секунду, когда в access.log пошли 502, ядро завершило процесс, а через пару секунд служба запустилась и ответы снова стали 200. journalctl без -u и -k показывает записи всех источников вперемешку, по времени, — --since и --until сужают его до нужных секунд.

Проверь себя 1 вопрос

При ответах 502 nginx записал в error.log: connect() failed (111: Connection refused) while connecting to upstream. Что это значит?

  • Запроса приложение не получило: соединение не установилось. Свой ответ приложения nginx передаёт как есть, как 500 в начале урока, и в error.log не пишет.

  • Соединение шло на 127.0.0.1:8080 — внутри машины. Отказ значит, что порт закрыт: процесса, который его слушает, нет.

  • Долгое ожидание nginx записывает как upstream timed out и отвечает 504. Здесь соединение отвергли сразу.

Connection refused — отказ в соединении: на 127.0.0.1:8080 никто не слушал, потому что процесс завершён, а новый ещё не запущен. Время этих строк и ищут в журнале ядра и службы.

Ядро завершает процессы службы каждый раз, когда она переходит потолок, — даже если в этот момент к ней никто не обращался. Поэтому одна строка Killed process ещё не объясняет конкретные 502: её время должно совпасть с временем ответов в access.log. Секунды из access.log удобно сразу превратить в отбор: --since и --until понимают время без даты — --since 04:53:27 --until 04:53:30 значит «сегодня, в эти три секунды».

Упражнение · сделать

Найди процесс, который завершило ядро

Только что сайт несколько секунд отвечал 502 и потом заработал сам. Узнай по журналам, какой процесс ядро завершило в те секунды, и запиши его PID в ~/oom-pid.txt.

Войти и начать Машина доступна после входа

Цели · 0 из 1

  • Записать в ~/oom-pid.txt PID процесса из секунд 502 ещё не выполнена

Цели шага

0 из 1
  • Записать в ~/oom-pid.txt PID процесса из секунд 502 — ещё не выполнена
Ubuntu 24.04

Цели шага

0 из 1
  • Записать в ~/oom-pid.txt PID процесса из секунд 502 — ещё не выполнена
Загрузка…