• postmortem
  • cloud-service
  • incident

Postmortem: Zły Gateway

Raport dotyczący awarii usługi Logto w dniu 2024-01-11 z powodu niepowodzenia odnowienia domeny.

Gao
Gao
Founder

Podsumowanie

W dniu 2024-01-11 usługi Logto doświadczyły przerwy w działaniu z wieloma błędami 502 Zły Gateway.

  • Czas rozpoczęcia: Około 2024-01-11 15:28 UTC
  • Czas rozwiązania: Około 2024-01-12 00:49 UTC
  • Czas trwania: Około 9 godzin
  • Dotknięte usługi: Usługa autoryzacji Logto, usługa Logto Cloud
  • Poziom wpływu: Krytyczny
  • Główna przyczyna: Domena logto.app wygasła, a odnowienie nie zostało zakończone.

Oś czasu

  • 2024-01-11 15:28 UTC Użytkownik zgłasza błąd 502 Zły Gateway podczas dostępu do usługi autoryzacji Logto.
  • 2024-01-11 15:42 UTC Więcej użytkowników zgłasza ten sam problem.
  • 2024-01-11 15:50 UTC Nasi członkowie zespołu zaczynają badać problem i dzwonić do innych członków zespołu. Ponieważ niektórzy członkowie zespołu śpią, zwykłe rozmowy telefoniczne nie były wystarczająco silne, aby ich obudzić.
  • 2024-01-12 23:54 UTC Dowiadujemy się, że usługa chmury wysyła żądania do usługi autoryzacji, ale żądanie nie powiodło się z powodu błędu ERR_TLS_CERT_ALTNAME_INVALID.
  • 2024-01-12 00:36 UTC Wyczyściliśmy pamięć podręczną DNS, aby sprawdzić, czy to pomoże. Nie pomogło.
  • 2024-01-12 00:38 UTC Ponownie wydaliśmy certyfikaty TLS, aby zobaczyć, czy to pomoże. Nie pomogło.
  • 2024-01-12 00:45 UTC Zauważyliśmy, że domena logto.app mogła wygasnąć. Sprawdziliśmy rejestratora domen i odkryliśmy, że nie została odnowiona powodzeniem, a domena wygasła.
  • 2024-01-12 00:49 UTC Odnowienie domeny zakończone. Usługi stopniowo wracają do normy.

Analiza incydentu

Co się stało?

Nasze domeny są zazwyczaj automatycznie odnawiane przez naszego rejestratora domen. W tym przypadku proces odnowienia nie powiódł się z powodu potencjalnej błędnej konfiguracji. W konsekwencji domena logto.app wygasła, a rekordy DNS zostały zaktualizowane, aby wskazywały na stronę parkingową rejestratora.

Jak dotąd usługa autoryzacji pozostaje operacyjna, ale większość żądań nie może jej osiągnąć. Wyjątkiem jest administrator Logto, który jest związany z domeną auth.logto.io i nie został dotknięty wygaśnięciem.

Oprócz usługi autoryzacji mamy także usługę Cloud, która organizuje dzierżawy Logto i obsługuje konsolę Logto Cloud (aplikacja frontendowa).

Gdy użytkownik korzysta z Konsoli Cloud, aplikacja nie bezpośrednio wywołuje usługę autoryzacji; zamiast tego wywołuje usługę Cloud dla wszystkich operacji zarządzania.

Aby dostosować się do API zarządzania Logto, zaprojektowaliśmy punkt „proxy API zarządzania”, aby delegować żądania do usługi autoryzacji. Cały przepływ wygląda tak:

Ponieważ domena *.logto.app ma problem z niezgodnością certyfikatu, usługa Cloud (Node.js) odrzuca żądanie i generuje błąd.

Normalnie błędy żądań są wychwytywane, aby zapobiec awarii całej usługi. Jednak ponieważ błąd został propagowany z modułu proxy, istniejąca logika obsługi błędów nie była w stanie go wychwycić, co spowodowało awarię usługi.

Chociaż każda usługa Logto ma co najmniej trzy repliki, wszystkie repliki łatwo się zawiesiły z powodu błędu występującego podczas prawie każdego żądania z Konsoli Cloud. Mechanizm automatycznego odzyskiwania zajmuje trochę czasu, co powoduje, że usługa jest chwilowo niedostępna.

To jest powód, dla którego użytkownicy widzą błędy 502 Zły Gateway (wszystkie repliki zawieszone). Gdy usługa Cloud jest dostępna, nowe i ponawiane żądania z Konsoli Cloud wpływają, a pętla zawieszenia trwa.

Gdy usługa Cloud nie działa, ma to również wpływ na usługę autoryzacji dla niektórych punktów końcowych, głównie /api/.well-known/sign-in-exp. Ten punkt końcowy jest używany do pobierania konfiguracji doświadczenia logowania, która zawiera informacje o łącznikach, które muszą być pobrane z usługi Cloud.

Rozwiązanie

  • Ręczne odnawianie domeny.

Wnioski

  • Zawsze należy ustawić monitorowanie dla wygaśnięcia domeny lub zakupić na dłuższy okres.
  • Zwracaj uwagę, że różnice czasowe mogą powodować opóźnienia w reakcji na incydent.
  • Upewnij się, że monitorowanie obejmuje wszystkie domeny.
  • Zachowaj ostrożność podczas interakcji z modułami wywoływalnymi, zapewniając, że błędy mogą być wychwytywane i odpowiednio przetwarzane.

Środki naprawcze i zapobiegawcze

  • ✅ Dodaj miesięczne monitorowanie wygaśnięcia domeny, niezależnie od tego, czy automatyczne odnawianie jest włączone.
  • ✅ Dodaj monitorowanie dla logto.app.
  • ✅ Zaktualizuj logikę obsługi błędów usługi Cloud, aby prawidłowo wychwytywać i obsługiwać błędy proxy.
  • ✅ Wprowadź mocniejsze alerty, które mogą obudzić zespół w przypadku incydentów przed utworzeniem zespołu SRE pokrywającego wszystkie strefy czasowe.