Delen via


Diepe diagnostische gegevens voor web-apps en services met Application Insights

In dit artikel wordt uitgelegd hoe Application Insights in de DevOps-cyclus past.

Waarom heb ik Application Insights nodig?

Application Insights bewaakt uw actieve web-app. U krijgt informatie over fouten en prestatieproblemen en u kunt analyseren hoe klanten uw app gebruiken. Het werkt voor apps die worden uitgevoerd op platforms zoals ASP.NET, Java EE en Node.js. Het wordt gehost in de cloud of on-premises.

Afbeelding met aspecten van de complexiteit van het leveren van web-apps.

Het is essentieel om een moderne toepassing te bewaken terwijl deze wordt uitgevoerd. U wilt fouten detecteren voordat uw klanten dat doen. U wilt ook prestatieproblemen detecteren en oplossen die dingen vertragen of ongemak veroorzaken voor uw gebruikers. Wanneer het systeem naar uw tevredenheid presteert, wilt u ook weten wat de gebruikers ermee doen. Gebruiken ze bijvoorbeeld de nieuwste functie? Slagen ze ermee?

Moderne webtoepassingen worden ontwikkeld in een cyclus van continue levering:

  • Een nieuwe functie of verbetering vrijgeven.
  • Bekijk hoe goed het werkt voor gebruikers.
  • Plan de volgende stap van ontwikkeling op basis van die kennis.

Een belangrijk onderdeel van deze cyclus is de observatiefase. Application Insights biedt de hulpprogramma's voor het bewaken van de prestaties en het gebruik van een webtoepassing.

Het belangrijkste aspect van dit proces is diagnose en diagnose. Als de toepassing uitvalt, gaat het bedrijf verloren. De belangrijkste rol van een bewakingsframework is:

  • Fouten betrouwbaar detecteren.
  • U onmiddellijk op de hoogte stellen.
  • Geef u de informatie die nodig is om het probleem vast te stellen.

Application Insights voert deze taken uit.

Waar komen bugs vandaan?

Fouten in websystemen worden meestal veroorzaakt door configuratieproblemen of slechte interacties tussen de vele onderdelen. De eerste taak bij het aanpakken van een live site-incident is het identificeren van de locatie van het probleem. Welk onderdeel of welke relatie is de oorzaak?

In een eenvoudiger tijdperk werd een computerprogramma op één computer uitgevoerd. Ontwikkelaars hebben het grondig getest voordat ze het verschepen, en na verzending hebben ze het zelden opnieuw gezien of erover nagedacht. Gebruikers moesten zich jarenlang met eventuele resterende bugs vervelen.

Het proces is nu heel anders. Uw app heeft een groot aantal verschillende apparaten om op uit te voeren en het kan lastig zijn om exact hetzelfde gedrag te garanderen op elk apparaat. Het hosten van apps in de cloud betekent dat bugs snel kunnen worden opgelost. Maar het betekent ook dat er voortdurend concurrentie is en dat er regelmatig nieuwe functies worden verwacht.

In deze omstandigheden is geautomatiseerde eenheidstests de enige manier om de controle over het aantal fouten te behouden. Het is onmogelijk om alles bij elke levering handmatig opnieuw te testen. Eenheidstest is nu een normaal onderdeel van het buildproces. Hulpprogramma's zoals Xamarin Test Cloud helpen door geautomatiseerde ui-tests te bieden in meerdere browserversies. Met deze testregimes kunnen we hopen dat de snelheid van fouten die in een app worden gevonden, tot een minimum kan worden beperkt.

Typische webtoepassingen hebben veel live-onderdelen. Samen met de client (in een browser of apparaat-app) en de webserver is er waarschijnlijk sprake van aanzienlijke back-endverwerking. Misschien is de back-end een pijplijn van onderdelen of een losse verzameling samenwerkende onderdelen. Veel van hen zullen niet onder jouw controle staan. Het zijn externe services waarvan u afhankelijk bent.

In configuraties zoals deze kan het lastig en oneconomisch zijn om op elke mogelijke foutmodus te testen of te voorzien, behalve in het livesysteem zelf.

Vragen

Hier volgen enkele vragen die u kunt stellen wanneer u een websysteem ontwikkelt:

  • Loopt uw app vast?
  • Wat is er precies gebeurd? Als een aanvraag is mislukt, wilt u weten hoe deze daar is gekomen. U hebt een tracering van gebeurtenissen nodig.
  • Is uw app snel genoeg? Hoe lang duurt het om te reageren op typische aanvragen?
  • Kan de server de belasting verwerken? Wanneer het aantal aanvragen toeneemt, blijft de reactietijd dan stabiel?
  • Hoe responsief zijn uw afhankelijkheden, zoals de REST API's, databases en andere onderdelen die uw app aanroept? Met name als het systeem traag is, is het uw onderdeel of krijgt u trage reacties van iemand anders?
  • Is uw app up of down? Is het overal ter wereld te zien? Je moet weten of het stopt.
  • Wat is de hoofdoorzaak? Is de fout opgetreden in uw onderdeel of een afhankelijkheid? Is het een communicatieprobleem?
  • Hoeveel gebruikers treft het probleem? Als u meer dan één probleem moet aanpakken, wat is dan het belangrijkste?

Wat is Application Insights?

Afbeelding met een eenvoudige werkstroom van Application Insights.

  1. Application Insights instrumenteert uw app en verzendt er telemetrie over terwijl de app wordt uitgevoerd. U kunt de Application Insights SDK inbouwen in de app of u kunt instrumentatie toepassen tijdens runtime. De eerste methode is flexibeler omdat u uw eigen telemetrie kunt toevoegen aan de reguliere modules.
  2. De telemetrie wordt verzonden naar de Application Insights-portal, waar deze wordt opgeslagen en verwerkt. Hoewel Application Insights wordt gehost in Azure, kunnen alle web-apps worden bewaakt, niet alleen Azure-apps.
  3. De telemetrie wordt aan u gepresenteerd in de vorm van grafieken en tabellen met gebeurtenissen.

Er zijn twee hoofdtypen telemetrie: geaggregeerde en onbewerkte exemplaren.

  • Instantiegegevens kunnen een rapport bevatten van een aanvraag die is ontvangen door uw web-app. U kunt de details van een aanvraag vinden en controleren met behulp van het hulpprogramma Zoeken in de Application Insights-portal. Het exemplaar kan gegevens bevatten zoals hoe lang uw app heeft geduurd om te reageren op de aanvraag en de aangevraagde URL en de geschatte locatie van de client.
  • Geaggregeerde gegevens omvatten het aantal gebeurtenissen per tijdseenheid, zodat u de frequentie van aanvragen kunt vergelijken met de reactietijden. Het bevat ook gemiddelden van metrische gegevens, zoals reactietijden van aanvragen.

De belangrijkste gegevenscategorieën zijn:

  • Aanvragen naar uw app (meestal HTTP-aanvragen) met gegevens over URL, reactietijd en geslaagd of mislukt.
  • Afhankelijkheden zoals REST- en SQL-aanroepen van uw app, ook met URI, reactietijden en geslaagde aanroepen.
  • Uitzonderingen, waaronder stack-traceringen.
  • Paginaweergavegegevens, die afkomstig zijn van de browsers van gebruikers.
  • Metrische gegevens zoals prestatiemeteritems en metrische gegevens die u zelf schrijft.
  • Aangepaste gebeurtenissen die u kunt gebruiken om zakelijke gebeurtenissen bij te houden.
  • Logboektraceringen die worden gebruikt voor foutopsporing.

Casestudy: Real Madrid F.C.

De webservice van Real Madrid Football Club bedient ongeveer 450 miljoen fans over de hele wereld. Fans hebben er toegang toe via webbrowsers en de mobiele apps van de club. Fans kunnen tickets boeken en ook toegang krijgen tot informatie en videoclips over resultaten, spelers en aankomende wedstrijden. Ze kunnen zoeken met filters zoals het aantal gescoorde doelpunten. Er zijn ook koppelingen naar sociale media. De gebruikerservaring is zeer gepersonaliseerd en is ontworpen als een tweerichtingscommunicatie om fans te betrekken.

De oplossing is een systeem van services en toepassingen in Azure. Schaalbaarheid is een belangrijke vereiste. Verkeer is variabel en kan tijdens en rond overeenkomsten grote volumes bereiken.

Voor Real Madrid is het essentieel om de prestaties van het systeem te controleren. Application Insights biedt een uitgebreid overzicht van het hele systeem om een betrouwbaar en hoog serviceniveau te garanderen.

De club krijgt ook diepgaand inzicht in zijn fans, zoals waar ze zijn (slechts 3% in Spanje), welke interesse ze hebben in spelers, historische resultaten en toekomstige wedstrijden, en hoe ze reageren op resultaten van wedstrijden.

De meeste telemetriegegevens worden automatisch verzameld zonder toegevoegde code, waardoor de oplossing wordt vereenvoudigd en de operationele complexiteit wordt verminderd. Voor Real Madrid verwerkt Application Insights elke maand 3,8 miljard telemetriepunten.

Real Madrid gebruikt de Power BI-module om de telemetrie weer te geven.

Schermopname van een Power BI-weergave van Application Insights-telemetrie.

Slimme detectie

Proactieve diagnose is een recente functie. Zonder een speciale configuratie door u detecteert Application Insights automatisch en waarschuwt u over ongebruikelijke toenamen van het aantal fouten in uw app. Het is slim genoeg om een achtergrond van incidentele fouten en stijgingen te negeren die eenvoudigweg in verhouding staan tot een toename van aanvragen.

Er kan bijvoorbeeld een fout optreden in een van de services waarvan u afhankelijk bent. Of misschien werkt de nieuwe build die u hebt geïmplementeerd niet goed. U weet dit zodra u uw e-mail bekijkt. Er zijn ook webhooks, zodat u andere apps kunt activeren.

Een ander aspect van deze functie voert een dagelijkse diepgaande analyse van uw telemetrie uit, op zoek naar ongebruikelijke prestatiepatronen die moeilijk te ontdekken zijn. Het kan bijvoorbeeld trage prestaties vinden die zijn gekoppeld aan een bepaald geografisch gebied of met een specifieke browserversie.

In beide gevallen worden met de waarschuwing de symptomen aangegeven die zijn gedetecteerd. Het biedt u ook de gegevens die u nodig hebt om het probleem te diagnosticeren, zoals relevante uitzonderingsrapporten.

Schermopname van e-mail van proactieve diagnostische gegevens.

Klant Samtec zei: "Tijdens een recente functie-cutover hebben we een te beperkte database gevonden die de resourcelimieten heeft bereikt en time-outs veroorzaakt. Proactieve detectiewaarschuwingen kwamen letterlijk door toen we het probleem aan het uit de weg gingen, zeer dicht bij realtime zoals aangekondigd. Deze waarschuwing in combinatie met de Azure-platformwaarschuwingen heeft ons geholpen het probleem vrijwel direct op te lossen. Totale downtime <10 minuten.'

Live Metrics Stream

Het implementeren van de nieuwste build kan een angstige ervaring zijn. Als er problemen zijn, wilt u deze meteen weten, zodat u indien nodig kunt teruggaan. Live Metrics Stream biedt u belangrijke metrische gegevens met een latentie van ongeveer één seconde.

Schermopname van live metrische gegevens.

Hiermee kunt u onmiddellijk een steekproef van eventuele fouten of uitzonderingen inspecteren.

Schermopname van live-foutgebeurtenissen.

Toepassingskaart

Toepassingsoverzicht detecteert automatisch uw toepassingstopologie. Het legt de prestatie-informatie boven op de kaart, zodat u eenvoudig prestatieknelpunten en problematische stromen in uw gedistribueerde omgeving kunt identificeren. Met Toepassingsoverzicht kunt u toepassingsafhankelijkheden van Azure-services detecteren.

U kunt een probleem sorteren door te begrijpen of het code of afhankelijkheidsgerelateerd is. Vanaf één locatie kunt u inzoomen op de gerelateerde diagnostische ervaring. Uw toepassing kan bijvoorbeeld mislukken vanwege prestatievermindering in een SQL-laag. Met Toepassingsoverzicht kunt u het onmiddellijk zien en inzoomen op de SQL Index Advisor- of Query Insights-ervaring.

Schermopname van een toepassingsoverzicht.

Application Insights Log Analytics

Met Log Analytics kunt u willekeurige query's schrijven in een krachtige SQL-achtige taal. Het diagnosticeren van de hele app-stack wordt eenvoudig naarmate verschillende perspectieven met elkaar worden verbonden. Vervolgens kunt u de juiste vragen stellen om serviceprestaties te correleren met zakelijke metrische gegevens en klantervaring.

U kunt een query uitvoeren op al uw telemetrie-exemplaar en onbewerkte metrische gegevens die zijn opgeslagen in de portal. De taal omvat filter-, join-, aggregatie- en andere bewerkingen. U kunt velden berekenen en statistische analyses uitvoeren. Er zijn tabellaire en grafische visualisaties beschikbaar.

Schermopname van een analysequery en een grafiek met resultaten.

Het is bijvoorbeeld eenvoudig om het volgende te doen:

  • Segmenteer de aanvraagprestatiegegevens van uw toepassing op klantlagen om inzicht te hebben in hun ervaring.
  • Zoek naar specifieke foutcodes of aangepaste gebeurtenisnamen tijdens live site-onderzoeken.
  • Zoom in op het app-gebruik van specifieke klanten om te begrijpen hoe functies worden verkregen en gebruikt.
  • Houd sessies en reactietijden bij voor specifieke gebruikers, zodat ondersteunings- en operationele teams direct klantondersteuning kunnen bieden.
  • Bepaal veelgebruikte app-functies om vragen over prioriteitsbepaling van functies te beantwoorden.

Klant-DNN zei: "Application Insights heeft ons het ontbrekende deel van de vergelijking gegeven om gegevens te kunnen combineren, sorteren, opvragen en filteren als dat nodig is. Door ons team toe te staan hun eigen vindingrijkheid en ervaring te gebruiken om gegevens te vinden met een krachtige querytaal, hebben we inzichten kunnen vinden en problemen kunnen oplossen die we niet eens wisten. Veel interessante antwoorden komen uit de vragen die beginnen met 'Ik vraag me af of...'.

Integratie van ontwikkelhulpprogramma's

Application Insights kan worden geïntegreerd met ontwikkelhulpprogramma's.

Application Insights configureren

Visual Studio en Eclipse hebben hulpprogramma's voor het configureren van de juiste SDK-pakketten voor het project dat u ontwikkelt. Er is een menuopdracht om Application Insights toe te voegen.

Als u toevallig een framework voor traceringslogboekregistratie gebruikt, zoals Log4N, NLog of System.Diagnostics.Trace, krijgt u de optie om de logboeken samen met de andere telemetriegegevens naar Application Insights te verzenden, zodat u de traceringen eenvoudig kunt correleren met aanvragen, afhankelijkheidsaanroepen en uitzonderingen.

Telemetrie zoeken in Visual Studio

Wanneer u een functie ontwikkelt en fouten in een functie opspoort, kunt u de telemetrie rechtstreeks in Visual Studio bekijken en doorzoeken. U kunt dezelfde zoekmogelijkheden gebruiken als in de webportal.

Wanneer Application Insights een uitzondering registreert, kunt u het gegevenspunt in Visual Studio bekijken en rechtstreeks naar de relevante code gaan.

Schermopname van een zoekopdracht in Visual Studio.

Tijdens foutopsporing kunt u de telemetrie in uw ontwikkelcomputer bewaren. U kunt deze weergeven in Visual Studio zonder het naar de portal te verzenden. Met deze lokale optie voorkomt u dat foutopsporing wordt vermengd met productietelemetrie.

Werkitems

Wanneer een waarschuwing wordt gegenereerd, kan Application Insights automatisch een werkitem maken in uw werktraceringssysteem.