Om du vill kontrollera att program och tjänster fungerar korrekt kan du använda mönstret Hälsoslutpunktsövervakning. Det här mönstret anger användningen av funktionella kontroller i ett program. Externa verktyg kan komma åt dessa kontroller med jämna mellanrum via exponerade slutpunkter.
Kontext och problem
Det är en bra idé att övervaka webbprogram och serverdelstjänster. Övervakning hjälper till att säkerställa att program och tjänster är tillgängliga och fungerar korrekt. Affärskrav omfattar ofta övervakning.
Ibland är det svårare att övervaka molntjänster än lokala tjänster. En orsak är att du inte har fullständig kontroll över värdmiljön. En annan är att tjänsterna vanligtvis är beroende av andra tjänster som plattformsleverantörer och andra tillhandahåller.
Många faktorer påverkar molnbaserade program. Exempel är nätverksfördröjning, prestanda och tillgänglighet för underliggande beräknings- och lagringssystem samt nätverksbandbredden mellan dem. En tjänst kan misslyckas helt eller delvis på grund av någon av dessa faktorer. För att säkerställa en nödvändig tillgänglighetsnivå måste du regelbundet kontrollera att tjänsten fungerar korrekt. Ditt serviceavtal (SLA) kan ange den nivå som du behöver uppfylla.
Lösning
Implementera hälsoövervakning genom att skicka begäranden till en slutpunkt i ditt program. Programmet bör utföra nödvändiga kontroller och sedan returnera en indikation om dess status.
Det ingår vanligtvis två faktorer i hälsoövervakning:
- De kontroller (om några) som programmet eller tjänsten utför som svar på begäran till slutpunkten för hälsoverifiering
- Analys av resultaten av verktyget eller ramverket som utför hälsoverifieringskontrollen
Svarskoden anger programmets status. Alternativt kan svarskoden även ge status för komponenter och tjänster som appen använder. Övervakningsverktyget eller ramverket utför svarstids- eller svarstidskontrollen.
Följande bild ger en översikt över mönstret.
Hälsoövervakningskoden i programmet kan också köra andra kontroller för att fastställa:
- Tillgänglighets- och svarstiden för molnlagring eller en databas.
- Status för andra resurser eller tjänster som programmet använder. Dessa resurser och tjänster kan finnas i programmet eller utanför det.
Tjänster och verktyg är tillgängliga som övervakar webbprogram genom att skicka en begäran till en konfigurerbar uppsättning slutpunkter. Dessa tjänster och verktyg utvärderar sedan resultatet mot en uppsättning konfigurerbara regler. Det är relativt enkelt att skapa en tjänstslutpunkt enbart i syfte att utföra vissa funktionella tester på ett system.
Vanliga kontroller som övervakningsverktyg utför är:
- Verifiera svarskoden. Ett HTTP-svar på 200 (OK) visar t.ex. att programmet svarade utan fel. Övervakningssystemet kan också söka efter andra svarskoder för mer omfattande resultat.
- Kontrollera innehållet i svaret för att identifiera fel, även när statuskoden är 200 (OK). Genom att kontrollera innehållet kan du identifiera fel som endast påverkar ett avsnitt av den returnerade webbsidan eller tjänstsvaret. Du kan till exempel kontrollera rubriken på en sida eller leta efter en specifik fras som anger att appen returnerade rätt sida.
- Mäta svarstiden. Värdet inkluderar nätverksfördröjningen och den tid som programmet tog för att utfärda begäran. Ett ökande värde kan visa på ett kommande problem med programmet eller nätverket.
- Kontrollera resurser eller tjänster som finns utanför programmet. Ett exempel är ett nätverk för innehållsleverans som programmet använder för att leverera innehåll från globala cacheminnen.
- Söker efter förfallodatumet för TLS-certifikat.
- Mäta svarstiden för en DNS-sökning efter programmets URL. Den här kontrollen mäter DNS-svarstid och DNS-fel.
- Verifiera den URL som ett DNS-uppslag returnerar. Genom att verifiera kan du se till att posterna är korrekta. Du kan också förhindra omdirigering av skadliga begäranden som kan uppstå efter en attack på DNS-servern.
Där det är möjligt är det också användbart att köra dessa kontroller från olika lokala eller värdbaserade platser och sedan jämföra svarstider. Helst bör du övervaka program från platser som ligger nära kunderna. Sedan får du en korrekt vy över prestandan från varje plats. Den här metoden ger en mer robust kontrollmekanism. Resultaten kan också hjälpa dig att fatta följande beslut:
- Var du ska distribuera ditt program
- Om du vill distribuera det i mer än ett datacenter
För att säkerställa att programmet fungerar korrekt för alla kunder kör du tester mot alla tjänstinstanser som kunder använder. Om kundlagring till exempel är utspritt över fler än ett lagringskonto bör övervakningsprocessen kontrollera varje konto.
Problem och överväganden
Tänk på följande när du bestämmer dig för hur du implementerar det här mönstret:
Tänk på hur du validerar svaret. Ta till exempel reda på om statuskoden 200 (OK) är tillräcklig för att verifiera att programmet fungerar korrekt. Att kontrollera statuskoden är den minsta implementeringen av det här mönstret. En statuskod ger ett grundläggande mått på programmets tillgänglighet. Men en kod ger lite information om åtgärder, trender och eventuella kommande problem i programmet.
Fastställa antalet slutpunkter som ska exponeras för ett program. En metod är att exponera minst en slutpunkt för de kärntjänster som programmet använder och en annan för tjänster med lägre prioritet. Med den här metoden kan du tilldela olika nivåer av betydelse för varje övervakningsresultat. Överväg också att exponera extra slutpunkter. Du kan exponera en för varje kärntjänst för att öka övervakningskornigheten. En hälsoverifieringskontroll kan till exempel kontrollera databasen, lagringen och en extern geokodningstjänst som ett program använder. Var och en kan kräva en annan nivå av drifttid och svarstid. Geokodningstjänsten eller någon annan bakgrundsaktivitet kan vara otillgänglig i några minuter. Men programmet kan fortfarande vara felfritt.
Bestäm om du vill använda samma slutpunkt för övervakning och allmän åtkomst. Du kan använda samma slutpunkt för båda men utforma en specifik sökväg för hälsoverifieringskontroller. Du kan till exempel använda /health på den allmänna åtkomstslutpunkten. Med den här metoden kan övervakningsverktyg köra vissa funktionella tester i programmet. Exempel är att registrera en ny användare, logga in och göra en testbeställning. Samtidigt kan du även kontrollera att den allmänna åtkomstslutpunkten är tillgänglig.
Fastställa vilken typ av information som ska samlas in i tjänsten som svar på övervakningsbegäranden. Du måste också bestämma hur du ska returnera den här informationen. De flesta befintliga verktyg och ramverk studerar endast HTTP-statuskoden som slutpunkten returnerar. Om du vill returnera och validera ytterligare information kan du behöva skapa ett anpassat övervakningsverktyg eller en tjänst.
Ta reda på hur mycket information som ska samlas in. Om du utför överdriven bearbetning under kontrollen kan programmet överbelastas och påverka andra användare. Bearbetningstiden kan också överskrida tidsgränsen för övervakningssystemet. Därför kan systemet markera programmet som otillgängligt. De flesta program omfattar instrumentation, till exempel felhanterare och prestandaräknare. Dessa verktyg kan logga prestanda och detaljerad felinformation, vilket kan vara tillräckligt. Överväg att använda dessa data i stället för att returnera ytterligare information från en hälsoverifieringskontroll.
Överväg att cachelagra slutpunktsstatusen. Det kan vara dyrt att köra hälsokontrollen ofta. Om hälsostatusen till exempel rapporteras via en instrumentpanel vill du inte att varje begäran till instrumentpanelen ska utlösa en hälsokontroll. Kontrollera i stället systemets hälsotillstånd regelbundet och cachelagrat statusen. Exponera en slutpunkt som returnerar den cachelagrade statusen.
Planera hur du konfigurerar säkerhet för övervakningsslutpunkterna. Genom att konfigurera säkerhet kan du skydda slutpunkterna från offentlig åtkomst, vilket kan:
- Exponera programmet för skadliga attacker.
- Risk för exponering av känslig information.
- Dra till sig DoS-attacker (Denial of Service).
Vanligtvis konfigurerar du säkerhet i programkonfigurationen. Sedan kan du enkelt uppdatera inställningarna utan att starta om programmet. Överväg en eller flera av följande metoder:
Skydda slutpunkten genom att kräva autentisering. Om övervakningstjänsten eller verktyget stöder autentisering kan du använda en säkerhetsnyckel för autentisering i begärandehuvudet. Du kan också skicka autentiseringsuppgifter med begäran. När du använder autentisering bör du överväga hur du kommer åt slutpunkterna för hälsokontroll. Azure App Service har till exempel en inbyggd hälsokontroll som integreras med autentiserings- och auktoriseringsfunktioner i App Service.
Använd en diskret eller dold slutpunkt. Du kan till exempel exponera slutpunkten på en annan IP-adress än den som standardprogram-URL:en använder. Konfigurera slutpunkten på en HTTP-port som inte är standard. Överväg också att använda en komplex sökväg till testsidan. Du kan vanligtvis ange extra slutpunktsadresser och portar i programkonfigurationen. Om det behövs kan du lägga till poster för dessa slutpunkter till DNS-servern. Sedan undviker du att behöva ange IP-adressen direkt.
Exponera en metod på en slutpunkt som accepterar en parameter, som ett nyckelvärde eller ett värde för arbetsläge. När en begäran tas emot kan koden köra specifika tester som är beroende av parameterns värde. Koden kan returnera ett 404-fel (hittades inte) om den inte känner igen parametervärdet. Gör det möjligt att definiera parametervärden i programkonfigurationen.
Använd en separat slutpunkt som utför grundläggande funktionella tester utan att äventyra programmets funktion. Med den här metoden kan du minska effekten av en DoS-attack. Vi rekommenderar att du inte kör test som kan exponera känslig information. Ibland måste du returnera information som kan vara användbar för en angripare. I det här fallet bör du överväga hur du skyddar slutpunkten och data från obehörig åtkomst. Det räcker inte att förlita sig på dunkel. Överväg även att använda en HTTPS-anslutning och kryptera känsliga data, även om den här metoden ökar belastningen på servern.
Bestäm hur du ska se till att övervakningsagenten fungerar korrekt. En metod är att exponera en slutpunkt som returnerar ett värde från programkonfigurationen eller ett slumpmässigt värde som du kan använda för att testa agenten. Se också till att övervakningssystemet utför kontroller på sig självt. Du kan använda ett självtest eller inbyggt test för att förhindra att övervakningssystemet ger falska positiva resultat.
När du ska använda det här mönstret
Det här mönstret är användbart för:
- Övervaka webbplatser och webbprogram för att verifiera tillgänglighet.
- Övervaka webbplatser och webbprogram för att kontrollera att de fungerar.
- Övervaka mellannivå- eller delade tjänster för att identifiera och isolera fel som kan störa andra program.
- Komplettera befintlig instrumentation i programmet, till exempel prestandaräknare och felhanterare. Hälsoverifieringskontroll ersätter inte programkraven för loggning och granskning. Instrumentation kan ge information om befintliga ramverk som övervakar räknare och felloggar för att identifiera fel och andra problem. Instrumentation kan dock inte ge information om ett program inte är tillgängligt.
Design av arbetsbelastning
En arkitekt bör utvärdera hur hälsoslutpunktsövervakningsmönstret kan användas i arbetsbelastningens design för att uppfylla de mål och principer som beskrivs i grundpelarna i Azure Well-Architected Framework. Till exempel:
Grundpelare | Så här stöder det här mönstret pelarmål |
---|---|
Beslut om tillförlitlighetsdesign hjälper din arbetsbelastning att bli motståndskraftig mot fel och se till att den återställs till ett fullt fungerande tillstånd när ett fel inträffar. | Dessa slutpunkter stöder arbetsbelastningens tillförlitlighetsaviseringar och instrumentpanelsinsatser. De kan också användas som en signal för självåterställningsreparation. - RE:07 Självåterställning och självbevarelsedrift - RE:10 Strategi för övervakning och avisering |
Operational Excellence hjälper till att leverera arbetsbelastningskvalitet genom standardiserade processer och teamsammanhållning. | Genom att standardisera vilka hälsoslutpunkter som ska exponeras och detaljnivån i resultaten i arbetsbelastningen kan du få hjälp med att sortera problem. - OE:07 Övervakningssystem |
Prestandaeffektivitet hjälper din arbetsbelastning att effektivt uppfylla kraven genom optimeringar inom skalning, data och kod. | Hälsoslutpunkter förbättrar belastningsutjämningslogik genom att dirigera trafik till endast noder som är verifierade som felfria. Med ytterligare konfiguration kan du också hämta mått på tillgänglig nodkapacitet. - PE:05 Skalning och partitionering |
Som med alla designbeslut bör du överväga eventuella kompromisser mot målen för de andra pelarna som kan införas med det här mönstret.
Exempel
Du kan använda ASP.NET hälsokontroller mellanprogram och bibliotek för att rapportera hälsotillståndet för appinfrastrukturkomponenter. Det här ramverket ger ett sätt att rapportera hälsokontroller på ett konsekvent sätt. Den implementerar många av de metoder som beskrivs i den här artikeln. Till exempel omfattar ASP.NET hälsokontroller externa kontroller som databasanslutning och specifika begrepp som liveness och beredskapsavsökningar.
Det finns flera exempelimplementeringar som använder ASP.NET hälsokontroller på GitHub.
Övervaka slutpunkter i Azure-värdbaserade program
Alternativen för att övervaka slutpunkter i Azure-program är:
- Använd de inbyggda övervakningsfunktionerna i Azure, till exempel Azure Monitor.
- Använd en tjänst från tredje part eller ett ramverk som Microsoft System Center Operations Manager.
- Skapa ett anpassat verktyg eller en tjänst som körs på din egen server eller en värdbaserad server.
Även om Azure tillhandahåller omfattande övervakningsalternativ kan du använda ytterligare tjänster och verktyg för att ge extra information. Application Insights, en funktion i Monitor, är utformad för utvecklingsteam. Den här funktionen hjälper dig att förstå hur din app fungerar och hur den används. Application Insights övervakar begärandefrekvenser, svarstider, felfrekvenser och beroendefrekvenser. Det kan hjälpa dig att avgöra om externa tjänster saktar ner dig.
De villkor som du kan övervaka beror på vilken värdmekanism du väljer för ditt program. Alla alternativ i det här avsnittet stöder aviseringsregler. En aviseringsregel använder en webbslutpunkt som du anger i inställningarna för din tjänst. Den här slutpunkten bör svara förhållandevis snabbt, så att varningssystemet kan identifiera att programmet fungerar. Mer information finns i Skapa en ny aviseringsregel.
Om det uppstår ett större avbrott bör klienttrafiken vara dirigerbar till en programdistribution som är tillgänglig i andra regioner eller zoner. Den här situationen är ett bra argument för anslutningar mellan platser och global belastningsutjämning. Valet beror på om programmet är internt eller externt. Tjänster som Azure Front Door, Azure Traffic Manager eller innehållsleveransnätverk kan dirigera trafik mellan regioner baserat på data som hälsoavsökningar tillhandahåller.
Traffic Manager är en routnings- och belastningsutjämningstjänst. Den kan använda ett antal regler och inställningar för att distribuera begäranden till specifika instanser av ditt program. Förutom routningsbegäranden kan Traffic Manager regelbundet pinga en URL, port och relativ sökväg. Du anger ping-målen med målet att avgöra vilka instanser av ditt program som är aktiva och svara på begäranden. Om Traffic Manager identifierar en statuskod på 200 (OK) markerar den programmet som tillgängligt. Vid andra statuskoder markerar Traffic Manager programmet som otillgängligt. Traffic Manager-konsolen visar status för varje program. Du kan konfigurera varje regel för att omdirigera begäranden till andra instanser av programmet som svarar.
Traffic Manager väntar en viss tid på att få ett svar från övervaknings-URL:en. Kontrollera att din hälsoverifieringskod körs under den här tiden. Tillåt nätverksfördröjning för tur och retur från Traffic Manager till ditt program och tillbaka igen.
Nästa steg
Följande vägledning är användbar för att implementera det här mönstret:
- Vägledning för hälsoövervakning i mikrotjänstbaserade program
- Övervakning av programhälsa för tillförlitlighet, en del av Azure Well-Architected Framework
- Skapa en ny aviseringsregel