Nederlands
  • postmortem
  • cloud-dienst
  • incident

Postmortem: Slechte Gateway

Incidentrapport voor de Logto-service uitval op 2024-01-11 vanwege domeinnaamvernieuwing die mislukt is.

Gao
Gao
Founder

Samenvatting

Op 2024-01-11 ervoeren Logto-diensten een service-uitval met veel 502 Slechte Gateway-fouten.

  • Tijd begonnen: Rond 2024-01-11 15:28 UTC
  • Tijd opgelost: Rond 2024-01-12 00:49 UTC
  • Duur: Ongeveer 9 uur
  • Getroffen diensten: Logto-authenticatiedienst, Logto Cloud-dienst
  • Impactniveau: Kritiek
  • Hoofd oorzaak: logto.app domein verlopen, en de vernieuwing is niet voltooid.

Tijdlijn

  • 2024-01-11 15:28 UTC Gebruiker meldt 502 Slechte Gateway-fout bij het openen van Logto-authenticatiedienst.
  • 2024-01-11 15:42 UTC Meer gebruikers melden hetzelfde probleem.
  • 2024-01-11 15:50 UTC Onze teamleden beginnen het probleem te onderzoeken en bellen andere teamleden. Omdat het voor sommige teamleden laat in de nacht was, waren normale telefoontjes niet sterk genoeg om hen wakker te maken.
  • 2024-01-12 23:54 UTC We ontdekken dat de cloud-dienst verzoeken naar de authenticatiedienst stuurt, maar het verzoek mislukt door ERR_TLS_CERT_ALTNAME_INVALID fout.
  • 2024-01-12 00:36 UTC We hebben de DNS-cache gewist om te kijken of het helpt. Dat deed het niet.
  • 2024-01-12 00:38 UTC We hebben de TLS-certificaten opnieuw uitgegeven om te zien of het helpt. Dat deed het niet.
  • 2024-01-12 00:45 UTC We merkten dat het logto.app domein was verlopen. We controleerden de domeinregistrar en ontdekten dat het zich niet met succes vernieuwde en het domein was verlopen.
  • 2024-01-12 00:49 UTC De domeinvernieuwing is voltooid. Diensten komen geleidelijk weer terug naar normaal.

Incidentanalyse

Wat is er gebeurd?

Onze domeinen worden normaal automatisch vernieuwd via onze domeinregistrar. In dit geval mislukte het vernieuwing proces echter door een mogelijke verkeerde configuratie. Hierdoor is het logto.app domein verlopen en zijn de DNS records bijgewerkt om naar de parkeerpagina van de registrar te wijzen.

Op dit moment blijft de authenticatiedienst operationeel, maar de meeste verzoeken kunnen het niet bereiken. De uitzondering is de Logto beheer huurders, die aan het auth.logto.io domein zijn gekoppeld en niet door het verlopen worden beïnvloed.

Naast de authenticatiedienst hebben we ook een Clouddienst die de Logto huurders orkestreert en de Logto Cloud Console (een frontend app) bedient.

Wanneer een gebruiker de Cloud Console gebruikt, roept de app niet rechtstreeks de authenticatiedienst aan; in plaats daarvan roept het de Clouddienst aan voor alle beheershandelingen.

Om aan te sluiten bij de Logto Management API, hebben we een "Management API proxy"-endpoint ontworpen om verzoeken door te sturen naar de authenticatiedienst. De volledige flow ziet er zo uit:

Omdat het *.logto.app domein een certificaat mismatchprobleem heeft, wijst de Clouddienst (Node.js) het verzoek af en werpt een fout op.

Normaal gesproken worden verzoekfouten opgevangen om te voorkomen dat de hele dienst crasht. Maar omdat de fout werd doorgegeven vanuit de proxymodule, kon de bestaande foutafhandelingslogica deze niet opvangen, wat leidde tot een crash van de dienst.

Hoewel elke Logto-dienst minstens drie replica's heeft, crashten alle replica's gemakkelijk vanwege de fout die in bijna elk verzoek van de Cloud Console voorkwam. Het kost tijd voor het auto-herstelmechanisme om in werking te treden, waardoor de dienst enige tijd niet beschikbaar was.

Dit is de reden waarom gebruikers 502 Slechte Gateway fouten zien (alle replica's crashten). Zodra de Clouddienst weer omhoog is, komen nieuwe en opnieuw proberende Cloud Console verzoeken binnen, en de crashlus gaat verder.

Wanneer de Clouddienst niet beschikbaar is, beïnvloedt dit ook de authenticatiedienst voor bepaalde eindpunten, meestal /api/.well-known/sign-in-exp. Dit eindpunt wordt gebruikt om de sign-in ervaring configuratie op te halen, inclusief connectorinformatie die van de Clouddienst moet worden opgehaald.

Oplossing

  • Handmatig domein vernieuwen.

Les geleerd

  • Stel altijd monitoring in voor domein verlopen of koop voor een langere duur.
  • Wees je ervan bewust dat tijdzoneverschillen een vertraging in de incidentrespons kunnen veroorzaken.
  • Zorg ervoor dat monitoring alle domeinen omvat.
  • Wees voorzichtig bij interactie met modules die een fout kunnen werpen, zorg ervoor dat fouten kunnen worden opgevangen en goed worden afgehandeld.

Corrigerende en preventieve maatregelen

  • ✅ Voeg maandelijkse monitoring toe voor domein verlopen of auto-vernieuwing ingeschakeld is.
  • ✅ Voeg monitoring toe voor logto.app.
  • ✅ Update de Cloud-dienst foutafhandelingslogica om proxy fouten correct op te vangen en af te handelen.
  • ✅ Implementeer sterkere alerts die het team kunnen wekken voor incidenten voordat er een door alle tijdzones gedekte SRE-team is.