Ответ
Анализ логов — это мой основной инструмент для расследования неочевидных багов, особенно в интеграционном и end-to-end тестировании. Вот ключевые аспекты, на которые я обращаю внимание:
1. Понимание структуры и уровней логирования Я знаю, как в нашем проекте настроены уровни логирования (ERROR, WARN, INFO, DEBUG, TRACE) для разных окружений (dev, staging, prod). При тестировании на staging я часто временно повышаю уровень логирования для микросервиса, который тестирую, чтобы получить больше деталей.
2. Поиск по контексту Современные логи структурированы (обычно JSON). Ключевые поля для поиска:
- Корреляционные ID:
traceId,requestId— позволяют отследить один запрос через все сервисы. - Идентификаторы пользователя и сессии:
userId,sessionId. - Метка времени:
timestamp. - Компонент/сервис:
service.name,logger.name.
Пример логирования ошибки в формате JSON, который я ищу в Kibana или Grafana Loki:
{
"timestamp": "2023-10-01T12:00:00.123Z",
"level": "ERROR",
"service": "payment-service",
"traceId": "abc-123-def-456",
"userId": "user_789",
"message": "Failed to process payment",
"error": "Insufficient funds",
"orderId": 10042
}
3. Инструменты и процесс
- Centralized Logging: Использую ELK-стек (Elasticsearch, Logstash, Kibana) или Grafana Loki для агрегации логов со всех инстансов и контейнеров.
- Поиск: Составляю запросы по
traceIdилиorderId, чтобы восстановить полную картину события. - Мониторинг в реальном времени: Настраиваю дашборды в Kibana/Grafana для отслеживания ошибок (уровень ERROR) во время выполнения тестовой сессии.
4. Практическое применение в тест-кейсах
- Воспроизведение бага: При получении шагов воспроизведения от пользователя, первым делом ищу логи по времени и действиям пользователя.
- Проверка интеграций: Если тест падает на стыке сервисов, логи показывают, где именно прервалась цепочка вызовов и с какой ошибкой.
- Валидация негативных сценариев: После отправки некорректного запроса через API проверяю, что в логах появилась ожидаемая ошибка валидации (например, с уровнем WARN), а не внутренняя ошибка сервера (ERROR).
5. Безопасность и чистота Я слежу, чтобы в логи (особенно на уровне INFO/DEBUG) не попадали чувствительные данные: пароли, полные номера карт, токены. Это проверяется как ручным review, так и автоматическими security-сканерами в пайплайне.