Симптом
docker logs <сервис> показывает последнюю запись часовой давности и не двигается, хотя health-check у сервиса настроен раз в 15 секунд. Напрашивается вывод: приложение упало или зависло.
Причина
Зависнуть может сам json-log-драйвер Docker, а не приложение. Поток логов застревает на одной строке, тогда как backend продолжает штатно работать и обслуживать запросы. Ловушка выглядит убедительно: «логи молчат 15 минут при health-check каждые 15 секунд» — и рождается ложный вывод «сервис лёг».
Решение
Живость проверять по реальному поведению, а не по хвосту логов:
- прямой запрос к API или health-эндпоинту: свежий
timestamp, разумныйuptime, здоровые метрики вроде задержки цикла событий (~20 мс — норма); - смежные признаки: свежее поле «обновлено» у зависимых сущностей. Для панели управления нодами это свежий
updatedAtу нод — значит, опрос идёт.
Хвост docker logs — вспомогательный индикатор, не первичный.
Вывод. Отсутствие логов — не доказательство смерти процесса. Логирование само может отказать (драйвер, буфер, ротация, зависший дескриптор) независимо от рабочего пути приложения. Определяйте живость активной пробой того, что сервис должен делать — обработать запрос, — а не пассивным наблюдением за побочным каналом, который может врать в обе стороны.