Все кейсы

Bug Fixing / Production Diagnostics / Nginx

Как диагностировать сбой сайта, когда полных логов нет

Когда логи приложения не объясняют сбой, я действую по шагам: воспроизвожу сценарий ошибки, определяю тип проблемы, смотрю ответы сервера и структуру кода, вывожу данные по сбою и, насколько возможно, дописываю логирование.

Автор: Ярослав Мусатов Опубликовано: Обновлено:
НаправлениеИнфраструктура
Год2025
СрокProduction-поддержка
РольDevOps

Личная зона ответственности

Мой вклад

Здесь перечислена выполненная мной работа в рамках задачи, а не авторство всего продукта или результат всей команды.

  • Воспроизвёл сценарии сбоев и классифицировал типы ошибок.
  • Проанализировал ответы сервера и локализовал источник проблем по слоям.
  • Изучил структуру кодовой базы и обработку запросов.
  • Выводил дополнительные данные по сбоям для проверки гипотез.
  • Дописал структуру логирования, чтобы ошибки выводились адекватно.

Контекст: сбой без объяснения в логах

На работающем сайте или API может возникнуть сбой, который не виден в логах приложения: записи отсутствуют, неполны или не относятся к нужному запросу. Это типичная ситуация для проектов без настроенного мониторинга и для унаследованного кода, где логирование не закладывалось изначально.

Задача: найти причину по наблюдаемым признакам

Нужно найти причину сбоя и исправить её, опираясь только на наблюдаемые признаки: поведение сайта, ответы сервера и кодовую базу. Начинать «методом тыка», одновременно меняя конфигурацию, код и окружение, нельзя: так теряется исходная картина, а правка одной проблемы маскирует другую.

Метод: шаги диагностики при неполных логах

Шаг 1. Воспроизведение сценария. Всегда сначала проверяю сценарий, чтобы воспроизвести ошибку, баг или неполадку. Без стабильно повторяющегося сценария любые выводы — предположения.

Шаг 2. Классификация ошибки. Смотрю, какого рода проблема: ошибка запроса, ошибка рендеринга, ошибка данных или инфраструктурная неполадка. Тип ошибки определяет следующий инструмент.

Шаг 3. Анализ запросов и ответов. При ошибках с запросами смотрю ответ, который приходит от сервера: статус, заголовки, тело. По нему оцениваю, откуда растут «ноги» — от фронтенда, от API или от инфраструктуры.

Шаг 4. Структура кода. Изучаю, как реализована логика: как устроена обработка запроса, где возникают исключения, как данные проходят через слои приложения.

Шаг 5. Поголовная работа с кодовой базой. Если логов мало или они неполные, иду в код поголовно: вывожу разные данные по сбоям, обрабатываю ответ, проверяю гипотезы через временную инструментацию.

Шаг 6. Доработка логирования. По возможности дописываю структуру, чтобы выводились адекватные логи ошибок: после исправления сбоя следующая диагностика в этом проекте занимает меньше времени.

Ограничения подхода

Такой метод не заменяет полноценные логи и мониторинг — он нужен именно в момент, когда полной картины нет. Диагностика идёт через наблюдаемые признаки: HTTP-ответы, поведение интерфейса, состояние процессов и косвенные симптомы. Временная инструментация кода — диагностический инструмент, а не постоянное решение.

Как проверялся результат

Каждая проверка фиксируется, изменения вносятся по одному условию. Результат считается достигнутым, когда сценарий с ошибкой проходит без сбоев, а добавленное логирование показывает, что происходит в том месте, где раньше была «слепая зона».

Итог для проекта

Метод «воспроизведение → классификация → анализ ответа → код → инструментация» снижает количество случайных правок в production. Самое ценное долгосрочное следствие — структура логирования, которая остаётся в проекте и ускоряет следующие диагностики.

Без стабильно повторяющегося сценария любые выводы — предположения.

Стек

Ubuntu
Nginx
PM2
PHP-FPM
PostgreSQL
MySQL
SSL

Проекты, где применялся этот опыт

Подробнее о проектах: задача, интерфейс и выполненная работа.

Связанные услуги

Если у вас похожая задача, посмотрите состав работ и порядок оценки.

Масштабирование каталога под разные разделы