Övervaka App Service-instanser med hjälp av hälsokontroll
Kommentar
Från och med den 1 juni 2024 har alla nyligen skapade App Service-appar möjlighet att generera ett unikt standardvärdnamn med hjälp av namngivningskonventionen <app-name>-<random-hash>.<region>.azurewebsites.net
. Befintliga appnamn förblir oförändrade.
Exempel: myapp-ds27dh7271aah175.westus-01.azurewebsites.net
Mer information finns i Unikt standardvärdnamn för App Service-resurs.
Den här artikeln beskriver hur du använder hälsokontroll i Azure Portal 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 ditt webbprogram varje minut, via en sökväg som du väljer.
Observera att /api/health bara är ett exempel. Det finns ingen standardsökväg för hälsokontroll. 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älsokontroll
- När du får en sökväg i din app pingar hälsokontrollen 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 instansen inte är felfri och tar bort den från lastbalanseraren fö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.
- När instansen har tagits bort fortsätter hälsokontrollen att pinga den. 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.
- Som mest ersätts en instans per timme, med högst tre instanser per dag per App Service-plan.
- Om hälsokontrollen skickar statusen
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 harHTTPS Only
inaktiverats.
Aktivera hälsokontroll
- Om du vill aktivera hälsokontroll bläddrar du till Azure Portal och väljer din App Service-app.
- Under Övervakning väljer du Hälsokontroll.
- Välj Aktivera och ange en giltig URL-sökväg för ditt program, till exempel
/health
eller/api/health
. - 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 en 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 en funktionsapp 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 detta till exempel är inställt på 2 tas dina instanser bort efter 2 misslyckade pingar. (Standardvärdet är 10 .) |
WEBSITE_HEALTHCHECK_MAXUNHEALTHYWORKERPERCENT |
1 - 100 | För att undvika att de återstående felfria instanserna överbelastas utesluts som standard inte mer än hälften av instanserna från lastbalanseraren åt gången. 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 ett scenario där alla instanser inte är felfria utesluts ingen. Om du vill åsidosätta det här beteendet anger du den här 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 autentiserings- och auktoriseringsfunktionerna i App Service. 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 tillhandahålla säkerhet för slutpunkten 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-token
och 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
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 App Service för Windows.
Instanser
När hälsokontrollen är aktiverad kan du starta om och övervaka statusen för dina programinstanser från fliken Instanser. Fliken Instanser visar instansens namn och status för programmets instans. Du kan också starta om instansen manuellt från den här fliken.
Om statusen för programinstansen är "inte felfri" 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 möjlighet att ersätta arbetaren. (Endast en instans kan ersättas per timme.) Detta påverkar även alla program som använder samma App Service-plan.
För Windows-program kan du också 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 dem 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 ett lagringskonto eller välja ett befintligt 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 hälsostatushistorik och skapa en ny aviseringsregel. Mått för hälsokontroll aggregerar lyckade pingar och visningsfel endast när instansen bedömdes vara felaktig baserat på konfigurationen för hälsokontroll. Mer information om hur du övervakar dina webbplatser finns i kvoter och aviseringar för Azure App Service.
Begränsningar
- Hälsokontroll kan aktiveras för kostnadsfria och delade App Service-planer, så du kan ha mått på webbplatsens hälsa och konfigurera aviseringar. Men eftersom kostnadsfria och delade webbplatser inte kan skalas ut ersätts inte felaktiga instanser. Du bör skala upp till Basic-nivån eller högre så att du kan skala ut till två eller flera instanser och få full nytta av hälsokontroll. Detta rekommenderas för produktionsinriktade program eftersom det ökar appens tillgänglighet och prestanda.
- En App Service-plan 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 övervakningsfunktionen Hälsokontroll 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 hälsokontrollbegäranden via HTTP eller HTTPS?
I App Service för Windows och Linux skickas hälsokontrollbegäranden via HTTPS när ENDAST HTTPS är aktiverat på webbplatsen. Annars skickas de via HTTP.
Följer hälsokontrollen de programkodskonfigurerade omdirigeringarna 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 blir statuskoden som hälsokontrollen returnerar inte 200. Det blir en omdirigering (301), som markerar att arbetaren inte är 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 felfri i mer än en timme ersätts instansen endast om alla andra appar där hälsokontrollen är aktiverad också är inte felfri. 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. De kallas App A och App B. De har samma App Service-plan och 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 mer än en timme på dessa två instanser ersätts instanserna endast om app B också är felaktig på dessa instanser. Om app B är felfri ersätts inte instanserna.
Kommentar
Om det fanns en annan webbplats eller plats i planen (App 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?
Om alla instanser av ditt program inte är felfria tar App Service inte bort instanser från lastbalanseraren. I det här scenariot skulle ett avbrott i programmet orsakas om alla instanser av felaktiga appar tar bort från lastbalanserarens rotation. Instansersättningen kommer dock fortfarande att ske.
Fungerar hälsokontroll på App Service-miljön?
Ja, hälsokontroll ä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.