Отчет об инциденте
Описание ошибки:
При выполнении запросов к базе данных наблюдалась следующая ошибка:
ERROR:root:Query failed due to 403 POST https://bigquery.googleapis.com/upload/bigquery/v2/projects/g1-site/jobs?uploadType=multipart: Exceeded rate limits: too many api requests per user per method for this user_method (JobService.insertJob). For more information, see https://cloud.google.com/bigquery/docs/troubleshoot-quotas.
Причины возникновения:
Изменения внесены напрямую в production-среду:
Обновления были сразу развернуты в production, без предварительного тестирования в development-среде.
Тестирование проводилось только разработчиками:
Полноценное независимое тестирование не выполнялось.
Проверка проводилась на production.
Ошибочные предположения о количестве пользователей:
Неверно оценено количество пользователей, что привело к значительному росту запросов к базе данных.
Несколько тысяч запросов в минуту исчерпали лимит запросов к таблице
CROSSBRAND_ALERTING.blocklist.
Выявление инцидента:
Проблема обнаружена Data Analyst в ходе анализа текущих отчетов, в которых отсутствовали данные.
Устранение ошибки:
Инцидент был устранен техническим отделом, проблема с запросами исправлена.
Рекомендации для предотвращения подобных случаев
Разделение development и production сред:
Внедрить четкое разграничение между development и production средами.
Все тестирования и изменения выполнять в изолированной development среде.
Порядок работы с изменениями:
Все изменения в коде или конфигурациях должны вноситься сначала в development.
В production изменения попадают только после успешного тестирования.
Цикл тестирования:
На development среде необходимо проводить полный цикл тестирования, включающий:
Функциональное тестирование: Проверка работы скриптов и запросов к базе данных.
Нагрузочное тестирование: Оценка системы под большим количеством запросов, превышающих планируемые нагрузки.
Интеграционное тестирование: Проверка взаимодействия компонентов приложения.
Ручное тестирование: Проведение тестов вручную для выявления ошибок, не замеченных автоматическими средствами.
Независимое тестирование:
Тестирование должно выполняться не только разработчиками, но и независимыми тестировщиками, которые используют утвержденные тест-кейсы.
Использование тест-кейсов и юнит-тестов:
Тест-кейсы:
Должны включать проверку лимитов запросов к базе данных.
Учитывать реальные сценарии использования системы (например, сценарии с большим количеством пользователей).
Юнит-тесты:
Автоматическая проверка работы каждого компонента кода.
Обязательно покрывать критические точки (например, запросы к базе данных).
Мониторинг и алертинг:
Инсталляция и настройка Grafana:
Установить Grafana для мониторинга ресурсов базы данных и серверов.
Настроить дашборды для отслеживания нагрузки на запросы, потребление ресурсов CPU/RAM и количества активных соединений.
Настройка алертинга:
Настроить триггеры на превышение лимитов запросов, использования CPU/RAM или других ключевых метрик.
Алерты должны отправляться через интеграции с почтой, Slack или другим используемым инструментом коммуникации.
Примеры метрик для мониторинга:
Количество запросов к базе данных в минуту.
Количество ошибок (403, 500) за последние 5 минут.
Использование лимитов API.
Выводы:
Ошибка возникла из-за нарушения процессов разработки, тестирования и развертывания изменений. Устранение причин требует внедрения строгого процесса управления изменениями, который включает использование development среды, привлечение независимых тестировщиков и проведение полноценного цикла тестирования перед развертыванием на production.
Внедрение мониторинга и алертинга через Grafana дополнительно снизит риск повторения подобных инцидентов, обеспечив своевременное обнаружение и предотвращение проблем.