Отчет о неисправности: Плохой шлюз
Отчет об инциденте для сбоя в работе сервиса Logto 11.01.2024 из-за неудачи при продлении домена.
Резюме
11.01.2024 сервисы Logto столкнулись с перебоем в работе, который сопровождался многочисленными ошибками 502 Bad Gateway.
- Время начала: Примерно 11.01.2024 в 15:28 по UTC
- Время решения: Примерно 12.01.2024 в 00:49 по UTC
- Продолжительность: Примерно 9 часов
- Затронутые сервисы: Сервис аутентификации Logto, Облачный сервис Logto
- Уровень воздействия: Критический
- Основная причина: Домен
logto.app
истек, и продление не было успешно завершено.
Хронология
- 11.01.2024 15:28 UTC Пользователь сообщает об ошибке 502 Bad Gateway при доступе к сервису аутентификации Logto.
- 11.01.2024 15:42 UTC Больше пользователей сообщают о той же проблеме.
- 11.01.2024 15:50 UTC Члены нашей команды начинают расследовать проблему и звонить другим членам команды. Поскольку для некоторых членов команды было поздно ночью, обычные звонки не были достаточно сильными, чтобы их разбудить.
- 12.01.2024 23:54 UTC Мы выясняем, что облачный сервис отправляет запросы к сервису аутентификации, но запрос завершился ошибкой ERR_TLS_CERT_ALTNAME_INVALID.
- 12.01.2024 00:36 UTC Мы очистили кэш DNS, чтобы проверить, поможет ли это. Не помогло.
- 12.01.2024 00:38 UTC Мы повторно выдали TLS-сертификаты, чтобы проверить, поможет ли это. Не помогло.
- 12.01.2024 00:45 UTC Мы заметили, что домен
logto.app
мог истечь. Мы проверили у регистратора доменов и обнаружили, что он не был успешно продлен, и домен истек. - 12.01.2024 00:49 UTC Продление домена завершено. Сервисы постепенно возвращаются к нормальной работе.
Анализ инцидента
Что произошло?
Наши домены обычно автоматически обновляются через нашего регистратора доменов. Однако в этом случае процесс продления не удался из-за возможной неправильной конфигурации. В результате домен logto.app
истек, и DNS-записи были обновлены для указания на парковочную страницу регистратора.
На данный момент сервис аутентификации остается оперативным, но большинство запросов не могут его достичь. Исключением является административный клиент Logto, который привязан к домену auth.logto.io
и не затронут истечением.
В дополнение к сервису аутентификации у нас также есть облачный сервис, который управляет клиентами Logto и обслуживает консоль Logto Cloud (frontend-приложение).
Когда пользователь работает с облачной консолью, приложение непосредственно не вызывает сервис аутентификации; вместо этого оно вызывает облачный сервис для всех операций управления.
Для согласования с Logto Management API мы разработали конечную точку "прокси API управления" для делегирования запросов в сервис аутентификации. Весь поток выглядит так:
Поскольку у *.logto.app
есть проблема несоответствия сертификата, облачный сервис (Node.js) отклоняет запрос и выдает ошибку.
Обычно ошибки запросов перехватываются, чтобы предотвратить сбой всего сервиса. Однако, поскольку ошибка была распространена от прокси-модуля, существующая логика обработки ошибок не смогла ее поймать, что привело к сбою сервиса.
Хотя у каждого сервиса Logto есть как минимум три реплики, все реплики легко выходят из строя из-за ошибки, происходящей почти в каждом запросе из облачной консоли. Механизму авто-восстановления требуется время, чтобы сработать, вызывая недоступность сервиса на некоторое время.
Это причина, по которой пользователи видят ошибки 502 Bad Gateway (все реплики падают). Как только облачный сервис работает, новые и повторные запросы из облачной консоли приходят, и цикл падения повторяется.
Когда облачный сервис недоступен, это также влияет на сервис аутентификации для определенных конечных точек, в основном /api/.well-known/sign-in-exp
. Эта конечная точка используется для получения конфигурации опыта входа, которая включает информацию о соединителе, которую необходимо получить из облачного сервиса.
Решение
- Проводить продление домена вручную.
Извлеченные уроки
- Всегда настраивайте мониторинг истечения срока действия домена или покупайте на более длительный срок.
- Имейте в виду, что разница в часовом поясе может вызвать задержку в реагировании на инцидент.
- Убедитесь, что мониторинг охватывает все домены.
- Будьте осторожны при взаимодействии с модулями, которые могут выбрасывать ошибки, чтобы гарантировать, что ошибки могут быть пойманы и правильно обработаны.
Коррективные и превентивные меры
- ✅ Добавить ежемесячный мониторинг для истечения срока действия доменов, когда включено автопродление.
- ✅ Добавить мониторинг для
logto.app
. - ✅ Обновить логику обработки ошибок в облачном сервисе, чтобы правильно перехватывать и обрабатывать ошибки прокси.
- ✅ Ввести более сильные оповещения, которые могут разбудить команду для реагирования на инциденты до наличия команды SRE, охватывающей все часовые пояса.