Как использовать логи для выявления и уточнения ошибок?
Что проверяют
Умеете ли вы превратить «что-то упало» в баг-репорт, по которому разработчик сразу находит причину. Интервьюеру важно, где вы ищете логи, как отделяете причину от следствия и что прикладываете к задаче. Следом часто спрашивают, как понять, на чьей стороне ошибка: клиента, бэкенда или соседнего сервиса.
Как отвечать
Опишите порядок действий, а не список инструментов:
- зафиксируйте момент: время воспроизведения до секунды, часовой пояс, окружение, пользователя, версию сборки;
- найдите сквозной идентификатор:
request-idилиtrace-idиз заголовков ответа во вкладке Network. По нему находятся записи одного запроса во всех сервисах, а поиск по тексту ошибки даёт сотни чужих совпадений; - смотрите по месту: на бэкенде Kibana (KQL), Grafana Loki (LogQL) или Graylog, в контейнерах
kubectl logs, на Androidadb logcat, на iOS консоль Xcode, во фронтенде консоль браузера и HAR-файл, плюс Sentry для клиентских исключений; - ищите первую ошибку, а не последнюю: таймаут на шлюзе обычно следствие, а причина стоит раньше. В джавовом стектрейсе корень лежит в нижнем блоке
Caused by; - сузьте условия: сравните с успешным запросом, проверьте, повторяется ли ошибка у всех или на конкретных данных;
- приложите к задаче короткий фрагмент с идентификатором и временем, а не весь файл.
Тестировщик проверяет и само логирование: ошибка пишется с правильным уровнем, в логах нет паролей, токенов и персональных данных.
Если опыт есть, расскажите свой случай: что сломалось, по какому признаку нашли причину, что попало в баг-репорт. Если с логами не работали, скажите честно и опишите, как действовали бы по этой схеме.
Где спотыкаются
Фильтруют только по уровню ERROR. Причина часто записана как WARN минутой раньше, а то и в другом сервисе.
Путают часовые пояса: сервер пишет в UTC, тестировщик ищет по местному времени и ничего не находит.
Вставляют в задачу скриншот или файл на сотни мегабайт, иногда вместе с токенами авторизации, которые потом годами лежат в трекере.