Djup diagnostik för webbappar och tjänster med Application Insights

Den här artikeln beskriver hur Application Insights passar in i DevOps-cykeln.

Varför behöver jag Application Insights?

Application Insights övervakar din webbapp som körs. Den berättar om fel och prestandaproblem och hjälper dig att analysera hur kunder använder din app. Det fungerar för appar som körs på plattformar som ASP.NET, Java EE och Node.js. Den finns i molnet eller lokalt.

Bild som visar aspekter av komplexiteten i att leverera webbappar.

Det är viktigt att övervaka ett modernt program medan det körs. Du vill identifiera fel innan dina kunder gör det. Du vill också identifiera och åtgärda prestandaproblem som gör saker långsammare eller orsakar olägenheter för användarna. När systemet presterar till din belåtenhet vill du också veta vad användarna gör med det. Använder de till exempel den senaste funktionen? Lyckas de med det?

Moderna webbprogram utvecklas i en cykel av kontinuerlig leverans:

  • Släpp en ny funktion eller förbättring.
  • Observera hur bra det fungerar för användarna.
  • Planera nästa steg i utvecklingen baserat på den kunskapen.

En viktig del av den här cykeln är observationsfasen. Application Insights innehåller verktyg för att övervaka ett webbprogram för prestanda och användning.

Den viktigaste aspekten av den här processen är diagnostik och diagnostik. Om programmet misslyckas går verksamheten förlorad. Övervakningsramverkets främsta roll är att:

  • Identifiera fel på ett tillförlitligt sätt.
  • Meddela dig omedelbart.
  • Presentera den information som behövs för att diagnostisera problemet.

Application Insights utför dessa uppgifter.

Var kommer buggar ifrån?

Fel i webbsystem beror vanligtvis på konfigurationsproblem eller dåliga interaktioner mellan deras många komponenter. Den första uppgiften när du tar itu med en live-platsincident är att identifiera problemets locus. Vilken komponent eller relation är orsaken?

I en enklare tidsålder kördes ett datorprogram på en dator. Utvecklare testade det noggrant innan de fraktade det, och efter leveransen såg eller tänkte de sällan på det igen. Användare var tvungna att stå ut med eventuella kvarvarande buggar i många år.

Processen är mycket annorlunda nu. Din app har en mängd olika enheter att köra på, och det kan vara svårt att garantera exakt samma beteende på var och en. Att vara värd för appar i molnet innebär att buggar kan åtgärdas snabbt. Men det innebär också att det finns kontinuerlig konkurrens och förväntningar på nya funktioner med jämna mellanrum.

Under dessa förhållanden är automatiserad enhetstestning det enda sättet att hålla fast kontroll över antalet buggar. Det är omöjligt att manuellt testa allt på varje leverans. Enhetstest är nu en vanlig del av byggprocessen. Verktyg som Xamarin Test Cloud hjälper till genom att tillhandahålla automatiserad UI-testning på flera webbläsarversioner. Med de här testregimerna kan vi hoppas att antalet buggar som finns i en app kan hållas till ett minimum.

Vanliga webbprogram har många livekomponenter. Tillsammans med klienten (i en webbläsare eller enhetsapp) och webbservern kommer det sannolikt att ske betydande serverdelsbearbetning. Kanske är serverdelen en pipeline med komponenter eller en lös samling samarbetande delar. Många av dem kommer inte att vara i din kontroll. De är externa tjänster som du är beroende av.

I konfigurationer som dessa kan det vara svårt och oekonomiskt att testa för, eller förutse, alla möjliga fellägen, förutom i själva livesystemet.

Frågor

Här följer några frågor att ställa när du utvecklar ett webbsystem:

  • Kraschar din app?
  • Vad exakt hände? Om en begäran misslyckades vill du veta hur den kom dit. Du behöver en spårning av händelser.
  • Är din app tillräckligt snabb? Hur lång tid tar det att svara på vanliga begäranden?
  • Kan servern hantera belastningen? Håller svarstiden stadigt när antalet begäranden ökar?
  • Hur dynamiska är dina beroenden, till exempel REST-API:er, databaser och andra komponenter som appen anropar? I synnerhet om systemet är långsamt, är det din komponent eller får du långsamma svar från någon annan?
  • Är appen upp eller ned? Kan det ses från hela världen? Du måste veta om det slutar.
  • Vad är rotorsaken? Var felet i komponenten eller ett beroende? Är det ett kommunikationsproblem?
  • Hur många användare påverkas? Om du har mer än en fråga att ta itu med, vilket är det viktigaste?

Vad är Application Insights?

Bild som visar ett grundläggande arbetsflöde med Application Insights.

  1. Application Insights instrumenterar din app och skickar telemetri om den medan appen körs. Antingen kan du skapa Application Insights SDK i appen eller använda instrumentation vid körning. Den tidigare metoden är mer flexibel eftersom du kan lägga till din egen telemetri i de vanliga modulerna.
  2. Telemetrin skickas till Application Insights-portalen, där den lagras och bearbetas. Även om Application Insights finns i Azure kan den övervaka alla webbappar, inte bara Azure-appar.
  3. Telemetrin presenteras för dig i form av diagram och tabeller med händelser.

Det finns två huvudsakliga typer av telemetri: aggregerade och råa instanser.

  • Instansdata kan innehålla en rapport om en begäran som har tagits emot av webbappen. Du hittar och kontrollerar information om en begäran med hjälp av sökverktyget i Application Insights-portalen. Instansen kan innehålla data som hur lång tid det tog för din app att svara på begäran och den begärda URL:en och klientens ungefärliga plats.
  • Aggregerade data innehåller antal händelser per enhetstid så att du kan jämföra antalet begäranden med svarstiderna. Den innehåller också medelvärden för mått som svarstider för begäran.

De viktigaste kategorierna av data är:

  • Begäranden till din app (vanligtvis HTTP-begäranden) med data om URL, svarstid och lyckade eller misslyckade.
  • Beroenden som REST- och SQL-anrop som görs av din app, även med URI, svarstider och framgång.
  • Undantag, inklusive stackspårningar.
  • Sidvisningsdata, som kommer från användarnas webbläsare.
  • Mått som prestandaräknare och mått som du skriver själv.
  • Anpassade händelser som du kan använda för att spåra affärshändelser.
  • Loggspårningar som används för felsökning.

Fallstudie: Real Madrid F.C.

Webbtjänsten för Real Madrid Football Club betjänar cirka 450 miljoner fans runt om i världen. Fans kommer åt det via webbläsare och klubbens mobilappar. Fans kan boka biljetter och även få tillgång till information och videoklipp om resultat, spelare och kommande spel. De kan söka med filter som antal gjorda mål. Det finns också länkar till sociala medier. Användarupplevelsen är mycket personlig och är utformad som en dubbelriktad kommunikation för att engagera fans.

Lösningen är ett system med tjänster och program i Azure. Skalbarhet är ett viktigt krav. Trafiken är variabel och kan nå höga volymer under och runt matchningar.

För Real Madrid är det viktigt att övervaka systemets prestanda. Application Insights ger en omfattande vy över hela systemet för att säkerställa en tillförlitlig och hög servicenivå.

Klubben får också djupgående förståelse för sina fans som var de är (endast 3% är i Spanien), vilket intresse de har för spelare, historiska resultat och kommande spel och hur de svarar på matchresultat.

De flesta av dessa telemetridata samlas automatiskt in utan extra kod, vilket förenklar lösningen och minskar driftskomplexiteten. För Real Madrid hanterar Application Insights 3,8 miljarder telemetripunkter varje månad.

Real Madrid använder Power BI-modulen för att visa sin telemetri.

Skärmbild som visar en Power BI-vy över Application Insights-telemetri.

Smart identifiering

Proaktiv diagnostik är en ny funktion. Utan någon särskild konfiguration av dig identifierar och varnar Application Insights dig automatiskt om ovanliga ökningar av felfrekvenser i din app. Det är smart nog att ignorera en bakgrund av tillfälliga fel och även ökningar som helt enkelt står i proportion till en ökning av begäranden.

Det kan till exempel uppstå ett fel i någon av de tjänster som du är beroende av. Eller så fungerar inte den nya versionen som du distribuerade bra. Du kommer att känna till det så fort du tittar på din e-post. Det finns också webhooks så att du kan utlösa andra appar.

En annan aspekt av den här funktionen utför en daglig djupgående analys av din telemetri och letar efter ovanliga prestandamönster som är svåra att upptäcka. Den kan till exempel hitta långsamma prestanda som är associerade med ett visst geografiskt område eller med en viss webbläsarversion.

I båda fallen visar aviseringen de symptom som identifieras. Det ger dig också de data som du behöver för att diagnostisera problemet, till exempel relevanta undantagsrapporter.

Skärmbild som visar e-post från proaktiv diagnostik.

Kunden Samtec sa: "Under en nyligen genomförd funktionsbegränsning hittade vi en underskalad databas som nådde sina resursgränser och orsakade tidsgränser. Proaktiva identifieringsaviseringar gick igenom bokstavligen när vi granskade problemet, mycket nära realtid enligt annonsering. Den här aviseringen tillsammans med Azure-plattformsaviseringar hjälpte oss nästan omedelbart att åtgärda problemet. Total stilleståndstid <10 minuter."

Live-ström med mätvärden

Att distribuera den senaste versionen kan vara en orolig upplevelse. Om det finns några problem vill du veta om dem direkt så att du kan backa ur om det behövs. Live Metrics Stream ger dig viktiga mått med en svarstid på ungefär en sekund.

Skärmbild som visar livemått.

Med den kan du omedelbart granska ett exempel på eventuella fel eller undantag.

Skärmbild som visar händelser med livefel.

Programkarta

Programkarta identifierar automatiskt programtopologin. Den lägger prestandainformationen ovanpå kartan så att du enkelt kan identifiera flaskhalsar i prestanda och problematiska flöden i din distribuerade miljö. Med Programkarta kan du identifiera programberoenden i Azure-tjänster.

Du kan sortera ett problem genom att förstå om det är kodrelaterat eller beroenderelaterat. Från en enda plats kan du gå in på den relaterade diagnostikupplevelsen. Ditt program kan till exempel misslyckas på grund av prestandaförsämring på en SQL-nivå. Med Programkarta kan du se den direkt och gå in på SQL Index Advisor- eller Query Insights-upplevelsen.

Skärmbild som visar en programkarta.

Application Insights Log Analytics

Med Log Analytics kan du skriva godtyckliga frågor på ett kraftfullt SQL-liknande språk. Det blir enkelt att diagnostisera hela appstacken när olika perspektiv ansluts. Sedan kan du ställa rätt frågor för att korrelera tjänstprestanda med affärsmått och kundupplevelse.

Du kan fråga alla telemetriinstanser och måttrådata som lagras i portalen. Språket innehåller filter, koppling, aggregering och andra åtgärder. Du kan beräkna fält och utföra statistisk analys. Tabellvisualiseringar och grafiska visualiseringar är tillgängliga.

Skärmbild som visar ett analysfråge- och resultatdiagram.

Det är till exempel enkelt att:

  • Segmentera programmets prestandadata för förfrågningar efter kundnivåer för att förstå deras upplevelse.
  • Sök efter specifika felkoder eller anpassade händelsenamn under undersökningar av livewebbplatser.
  • Öka detaljnivån för specifika kunders appanvändning för att förstå hur funktioner förvärvas och antas.
  • Spåra sessioner och svarstider för specifika användare så att support- och driftteam kan ge omedelbar kundsupport.
  • Fastställ vanliga appfunktioner för att besvara frågor om funktionsprioritering.

Kunden DNN sa: "Application Insights har gett oss den saknade delen av ekvationen för att kunna kombinera, sortera, fråga och filtrera data efter behov. Att låta vårt team använda sin egen uppfinningsrikedom och erfarenhet för att hitta data med ett kraftfullt frågespråk har gjort det möjligt för oss att hitta insikter och lösa problem som vi inte ens visste att vi hade. Många intressanta svar kommer från frågorna som börjar med "Jag undrar om...".

Integrering av utvecklingsverktyg

Application Insights integreras med utvecklingsverktyg.

Konfigurera Application Insights

Visual Studio och Eclipse har verktyg för att konfigurera rätt SDK-paket för projektet du utvecklar. Det finns ett menykommando för att lägga till Application Insights.

Om du råkar använda ett ramverk för spårningsloggning, till exempel Log4N, NLog eller System.Diagnostics.Trace, får du möjlighet att skicka loggarna till Application Insights tillsammans med den andra telemetrin så att du enkelt kan korrelera spårningarna med begäranden, beroendeanrop och undantag.

Sök telemetri i Visual Studio

När du utvecklar och felsöker en funktion kan du visa och söka i telemetrin direkt i Visual Studio. Du kan använda samma sökmöjligheter som i webbportalen.

När Application Insights loggar ett undantag kan du visa datapunkten i Visual Studio och gå direkt till relevant kod.

Skärmbild som visar en Visual Studio-sökning.

Under felsökningen kan du behålla telemetrin på utvecklingsdatorn. Du kan visa den i Visual Studio utan att skicka den till portalen. Det här lokala alternativet undviker att blanda felsökning med produktionstelemetri.

Arbetsobjekt

När en avisering aktiveras kan Application Insights automatiskt skapa ett arbetsobjekt i ditt arbetsspårningssystem.