Övervaka App Service-instanser med hjälp av hälsokontroll

Den här artikeln använder hälsokontroll i Azure-portalen för att övervaka App Service-instanser. Hälsokontrollen ökar programmets tillgänglighet genom att omdirigera begäranden från instanser som inte är felfria och ersätta instanser om de förblir felfria. Det gör det genom att pinga varje minut en sökväg för din webbapp som du väljer.

Fel vid hälsokontroll

Observera att /api/health bara är ett exempel som lagts till i illustrationssyfte. Vi skapar ingen sökväg för hälsokontroll som standard. Du bör se till att sökvägen du väljer är en giltig sökväg som finns i ditt program

Så här fungerar hälsokontroller i App Service

  • När du får en sökväg i din app pingar hälsokontrollen den här sökvägen på alla instanser av din App Service-app med 1 minuts intervall.
  • Om en webbapp som körs på en viss instans inte svarar med en statuskod mellan 200 och 299 (inklusive) efter 10 begäranden, fastställer App Service att den inte är felfri och tar bort den från lastbalanseraren för den här webbappen. Det antal misslyckade begäranden som krävs för att en instans ska anses vara felaktig kan konfigureras till minst två begäranden.
  • Efter borttagningen fortsätter hälsokontrollen att pinga den felaktiga instansen. Om instansen börjar svara med en felfri statuskod (200–299) returneras instansen till lastbalanseraren.
  • Om webbappen som körs på en instans förblir inte felfri i en timme ersätts instansen med en ny.
  • När du skalar ut pingar App Service sökvägen Hälsokontroll för att säkerställa att nya instanser är klara.

Kommentar

  • Hälsokontrollen följer inte 302-omdirigeringar.
  • Högst en instans ersätts varje timme, med högst tre instanser per dag per App Service-plan.
  • Om hälsokontrollen ger status Waiting for health check response misslyckas kontrollen troligen på grund av en HTTP-statuskod på 307, vilket kan inträffa om du har HTTPS-omdirigering aktiverat men har HTTPS Only inaktiverats.

Aktivera hälsokontroll

Navigering för hälsokontroll i Azure-portalen

  1. Om du vill aktivera hälsokontroll bläddrar du till Azure-portalen och väljer din App Service-app.
  2. Under Övervakning väljer du Hälsokontroll.
  3. Välj Aktivera och ange en giltig URL-sökväg i ditt program, till exempel /health eller /api/health.
  4. Välj Spara.

Kommentar

  • Din App Service-plan bör skalas till två eller flera instanser för att fullt ut använda hälsokontroll.
  • Sökvägen Hälsokontroll bör kontrollera viktiga komponenter i ditt program. Om ditt program till exempel är beroende av en databas och ett meddelandesystem bör slutpunkten hälsokontroll ansluta till dessa komponenter. Om programmet inte kan ansluta till en kritisk komponent bör sökvägen returnera en svarskod på 500 nivåer för att indikera att appen inte är felfri. Om sökvägen inte returnerar ett svar inom 1 minut anses även hälsokontroll-pingen vara felaktig.
  • När du väljer sökvägen Hälsokontroll kontrollerar du att du väljer en sökväg som returnerar en statuskod på 200, endast när appen är helt uppvärmd.
  • För att kunna använda hälsokontroll i funktionsappen måste du använda en premium- eller dedikerad värdplan.
  • Information om hälsokontroll i funktionsappar finns här: Övervaka funktionsappar med hälsokontroll.

Varning

Konfigurationsändringar för hälsokontroll startar om appen. För att minimera påverkan på produktionsappar rekommenderar vi att du konfigurerar mellanlagringsplatser och byter till produktion.

Konfiguration

Förutom att konfigurera alternativen för hälsokontroll kan du även konfigurera följande appinställningar:

Namn på appinställning Tillåtna värden beskrivning
WEBSITE_HEALTHCHECK_MAXPINGFAILURES 2 - 10 Det antal misslyckade begäranden som krävs för att en instans ska anses vara felaktig och tas bort från lastbalanseraren. När du till exempel har angetts till 2tas dina instanser bort efter 2 misslyckade pingar. (Standardvärdet är 10)
WEBSITE_HEALTHCHECK_MAXUNHEALTHYWORKERPERCENT 1 - 100 Som standard undantas inte mer än hälften av instanserna från lastbalanseraren samtidigt för att undvika att de återstående felfria instanserna överbelastas. Om en App Service-plan till exempel skalas till fyra instanser och tre inte är felfria undantas två. De andra två instanserna (en felfri och en felaktig) fortsätter att ta emot begäranden. I det värsta scenariot där alla instanser inte är felfria utesluts ingen.
Om du vill åsidosätta det här beteendet anger du appinställningen till ett värde mellan 1 och 100. Ett högre värde innebär att fler instanser som inte är felfria tas bort (standardvärdet är 50).

Autentisering och säkerhet

Hälsokontrollen integreras med App Services autentiserings - och auktoriseringsfunktioner. Inga andra inställningar krävs om dessa säkerhetsfunktioner är aktiverade.

Om du använder ditt eget autentiseringssystem måste sökvägen Hälsokontroll tillåta anonym åtkomst. För att skydda slutpunkten för hälsokontroll bör du först använda funktioner som IP-begränsningar, klientcertifikat eller ett virtuellt nätverk för att begränsa programåtkomsten. När du har dessa funktioner på plats kan du autentisera hälsokontrollbegäran genom att granska rubriken x-ms-auth-internal-tokenoch verifiera att den matchar SHA256-hashen för miljövariabeln WEBSITE_AUTH_ENCRYPTION_KEY. Om de matchar är hälsokontrollbegäran giltig och kommer från App Service.

Kommentar

Specifikt för Azure Functions-autentisering måste den funktion som fungerar som slutpunkt för hälsokontroll tillåta anonym åtkomst.

using System;
using System.Text;

/// <summary>
/// Method <c>HeaderMatchesEnvVar</c> returns true if <c>headerValue</c> matches WEBSITE_AUTH_ENCRYPTION_KEY.
/// </summary>
public Boolean HeaderMatchesEnvVar(string headerValue) {
    var sha = System.Security.Cryptography.SHA256.Create();
    String envVar = Environment.GetEnvironmentVariable("WEBSITE_AUTH_ENCRYPTION_KEY");
    String hash = System.Convert.ToBase64String(sha.ComputeHash(Encoding.UTF8.GetBytes(envVar)));
    return hash == headerValue;
}

Kommentar

Huvudet x-ms-auth-internal-token är endast tillgängligt i Windows App Service.

Instanser

När hälsokontroll har aktiverats kan du starta om och övervaka statusen för dina programinstanser via fliken Instanser. Fliken Instanser visar instansens namn, status för programmets instans och ger dig möjlighet att starta om instansen manuellt.

Om statusen för programinstansen är felaktig kan du starta om instansen manuellt med hjälp av omstartsknappen i tabellen. Tänk på att alla andra program som finns i samma App Service-plan som instansen också påverkas av omstarten. Om det finns andra program som använder samma App Service-plan som instansen visas de på öppningsbladet från omstartsknappen.

Om du startar om instansen och omstartsprocessen misslyckas får du sedan möjlighet att ersätta arbetaren (endast 1 instans kan ersättas per timme). Detta påverkar även alla program som använder samma App Service-plan.

Windows-program har också möjlighet att visa processer via processutforskaren. Detta ger dig ytterligare insikter om instansens processer, inklusive antal trådar, privat minne och total CPU-tid.

Insamling av diagnostikinformation

För Windows-program har du möjlighet att samla in diagnostikinformation på fliken Hälsokontroll. När du aktiverar diagnostikinsamling läggs en regel för automatisk återställning till som skapar minnesdumpar för instanser som inte är felfria och sparar den på ett särskilt lagringskonto. Om du aktiverar det här alternativet ändras konfigurationerna för automatisk läkning. Om det finns befintliga regler för automatisk återställning rekommenderar vi att du konfigurerar detta via App Service-diagnostik.

När diagnostiksamlingen är aktiverad kan du skapa eller välja ett befintligt lagringskonto för dina filer. Du kan bara välja lagringskonton i samma region som ditt program. Tänk på att om du sparar startas programmet om. När du har sparat kan du gå till lagringskontoresursen och visa minnesdumparna om webbplatsinstanserna inte är felfria efter kontinuerlig ping.

Övervakning

När du har angett programmets sökväg för hälsokontroll kan du övervaka webbplatsens hälsotillstånd med hjälp av Azure Monitor. På bladet Hälsokontroll i portalen väljer du Mått i det övre verktygsfältet. Då öppnas ett nytt blad där du kan se webbplatsens historiska hälsostatus och alternativ för att skapa en ny aviseringsregel. Mått för hälsokontroll aggregerar lyckade pingar och visar endast fel när instansen bedömdes vara felaktig baserat på konfigurationen för hälsokontroll. Mer information om hur du övervakar dina webbplatser finns i guiden om Azure Monitor.

Begränsningar

  • Hälsokontroll kan aktiveras för kostnadsfria och delade App Service-planer så att du kan ha mått på webbplatsens hälso- och konfigurationsaviseringar, men eftersom kostnadsfria och delade webbplatser inte kan skalas ut ersätts inte eventuella felaktiga instanser. Du bör skala upp till Basic-nivån eller högre så att du kan skala ut till 2 eller fler instanser och utnyttja den fullständiga fördelen med hälsokontroll. Detta rekommenderas för produktionsinriktade program eftersom det ökar appens tillgänglighet och prestanda.
  • App Service-planen kan ha högst en instans med feltillstånd ersatt per timme och högst tre instanser per dag.
  • Det finns en icke-konfigurerbar gräns för det totala antalet instanser som ersätts av hälsokontroll per skalningsenhet. Om den här gränsen nås ersätts inga felaktiga instanser. Det här värdet återställs var 12:e timme.

Vanliga frågor och svar

Vad händer om min app körs på en enskild instans?

Om din app bara skalas till en instans och blir felaktig tas den inte bort från lastbalanseraren eftersom det skulle ta bort programmet helt. Men efter en timmes kontinuerlig fel ping ersätts instansen. Skala ut till två eller flera instanser för att få omutdelningsfördelarna med hälsokontroll. Om appen körs på en enda instans kan du fortfarande använda hälsokontrollens övervakningsfunktion för att hålla reda på programmets hälsa.

Varför visas inte hälsokontrollbegäranden i webbserverloggarna?

Begäranden om hälsokontroll skickas till din webbplats internt, så begäran visas inte i webbserverloggarna. Du kan lägga till logginstruktioner i hälsokontrollkoden för att behålla loggarna för när sökvägen för hälsokontroll pingas.

Skickas begäranden om hälsokontroll via HTTP eller HTTPS?

I Windows App Service skickas begäranden om hälsokontroll via HTTPS när endast HTTPS är aktiverat på webbplatsen. Annars skickas de via HTTP. I Linux App Service skickas hälsokontrollbegäranden endast via HTTP och kan för närvarande inte skickas via HTTPS .

Följer hälsokontrollen programkoden konfigurerade omdirigeringar mellan standarddomänen och den anpassade domänen?

Nej, funktionen Hälsokontroll pingar sökvägen till webbprogrammets standarddomän. Om det finns en omdirigering från standarddomänen till en anpassad domän kommer statuskoden som hälsokontrollen returnerar inte att vara en 200 utan en omdirigering (301), som kommer att markera arbetaren som inte felfri.

Vad händer om jag har flera appar i samma App Service-plan?

Felaktiga instanser tas alltid bort från lastbalanserarens rotation oavsett andra appar i App Service-planen (upp till den procentandel som anges i WEBSITE_HEALTHCHECK_MAXUNHEALTHYWORKERPERCENT). När en app på en instans förblir inte felfri i över en timme ersätts instansen endast om alla andra appar med hälsokontroll aktiverat också är felfria. Appar som inte har hälsokontroll aktiverat tas inte med i beräkningen.

Exempel

Anta att du har två program (eller en app med ett fack) med hälsokontrollen aktiverad, kallad App A och App B. De finns på samma App Service-plan och att planen skalas ut till fyra instanser. Om app A blir felaktig på två instanser slutar lastbalanseraren att skicka begäranden till App A på dessa två instanser. Begäranden dirigeras fortfarande till App B på dessa instanser förutsatt att app B är felfri. Om app A förblir inte felfri i över en timme på dessa två instanser ersätts dessa instanser endast om app B också är inte felfri på dessa instanser. Om app B är felfri ersätts inte instansen.

Visuellt diagram som förklarar exempelscenariot ovan.

Kommentar

Om det fanns en annan webbplats eller plats på planen (plats C) utan att hälsokontrollen var aktiverad, skulle den inte beaktas för instansersättningen.

Vad händer om alla mina instanser inte är felfria?

I scenariot där alla instanser av ditt program inte är felfria tar App Service inte bort instanser från lastbalanseraren. I det här scenariot skulle det i praktiken orsaka ett avbrott för ditt program om alla felaktiga appinstanser utelämnas från lastbalanserarens rotation. Instanser ersätts dock fortfarande.

Fungerar hälsokontroll på App Service-miljön?

Ja, hälsokontrollen är tillgänglig för App Service-miljön v3, men inte för version 1 eller 2. Om du använder de äldre versionerna av App Service-miljön kan du använda migreringsfunktionen för att migrera din App Service-miljön till version 3.

Nästa steg