Analytics Space : Отчет об инциденте: Query failed due to 403 POST

Отчет об инциденте


Описание ошибки:

При выполнении запросов к базе данных наблюдалась следующая ошибка:

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.


Причины возникновения:

  1. Изменения внесены напрямую в production-среду:

    • Обновления были сразу развернуты в production, без предварительного тестирования в development-среде.

  2. Тестирование проводилось только разработчиками:

    • Полноценное независимое тестирование не выполнялось.

    • Проверка проводилась на production.

  3. Ошибочные предположения о количестве пользователей:

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

    • Несколько тысяч запросов в минуту исчерпали лимит запросов к таблице CROSSBRAND_ALERTING.blocklist.

  4. Выявление инцидента:

    • Проблема обнаружена Data Analyst в ходе анализа текущих отчетов, в которых отсутствовали данные.

  5. Устранение ошибки:

    • Инцидент был устранен техническим отделом, проблема с запросами исправлена.


Рекомендации для предотвращения подобных случаев

  1. Разделение development и production сред:

    • Внедрить четкое разграничение между development и production средами.

    • Все тестирования и изменения выполнять в изолированной development среде.

  2. Порядок работы с изменениями:

    • Все изменения в коде или конфигурациях должны вноситься сначала в development.

    • В production изменения попадают только после успешного тестирования.

  3. Цикл тестирования:

    • На development среде необходимо проводить полный цикл тестирования, включающий:

      • Функциональное тестирование: Проверка работы скриптов и запросов к базе данных.

      • Нагрузочное тестирование: Оценка системы под большим количеством запросов, превышающих планируемые нагрузки.

      • Интеграционное тестирование: Проверка взаимодействия компонентов приложения.

      • Ручное тестирование: Проведение тестов вручную для выявления ошибок, не замеченных автоматическими средствами.

  4. Независимое тестирование:

    • Тестирование должно выполняться не только разработчиками, но и независимыми тестировщиками, которые используют утвержденные тест-кейсы.

  5. Использование тест-кейсов и юнит-тестов:

    • Тест-кейсы:

      • Должны включать проверку лимитов запросов к базе данных.

      • Учитывать реальные сценарии использования системы (например, сценарии с большим количеством пользователей).

    • Юнит-тесты:

      • Автоматическая проверка работы каждого компонента кода.

      • Обязательно покрывать критические точки (например, запросы к базе данных).

  6. Мониторинг и алертинг:

    • Инсталляция и настройка Grafana:

      • Установить Grafana для мониторинга ресурсов базы данных и серверов.

      • Настроить дашборды для отслеживания нагрузки на запросы, потребление ресурсов CPU/RAM и количества активных соединений.

    • Настройка алертинга:

      • Настроить триггеры на превышение лимитов запросов, использования CPU/RAM или других ключевых метрик.

      • Алерты должны отправляться через интеграции с почтой, Slack или другим используемым инструментом коммуникации.

    • Примеры метрик для мониторинга:

      • Количество запросов к базе данных в минуту.

      • Количество ошибок (403, 500) за последние 5 минут.

      • Использование лимитов API.


Выводы:

Ошибка возникла из-за нарушения процессов разработки, тестирования и развертывания изменений. Устранение причин требует внедрения строгого процесса управления изменениями, который включает использование development среды, привлечение независимых тестировщиков и проведение полноценного цикла тестирования перед развертыванием на production.

Внедрение мониторинга и алертинга через Grafana дополнительно снизит риск повторения подобных инцидентов, обеспечив своевременное обнаружение и предотвращение проблем.