Na het 1e blok: Azure App Service web apps (link), het 2e blok: Implement Azure Functions (link), het 3e blok: Develop solutions that use Blob Storage (link), het 4e blok: Develop solutions that use Azure Cosmos DB (link), het 5e blok: Implement infrastructure as a service solutions: (link), het 6e blok Implement user authentication and authorization (link), het 7e blok Implement secure cloud solutions (link), het 8e blok: Implement API Management (link), het 9e blok: Develop event-based solutions (link), het 10e blok: Develop message-based solutions (link) is het nu tijd voor het 11e learning-block: Instrument solutions to support monitoring and logging, link.
Ook hier hebben we maar 1 module, Monitor App Performance.
Azure Monitor levert een uitgebreide oplossing voor het verzamelen, analyseren en acteren op telemetrieke gegevens uit jouw cloud en on-premise omgevingen. Hiermee kun je zien hoe je applicaties draaien en kun je pro-actief actie ondernemen.
Welke data wordt verzameld? Dat is een flinke lijst;
- Application monitoring data, data over de performance en functionaliteit van jouw code, onafhankelijk van het platform.
- Guest OS monitoring data, data over het OS waar je app op draait. Dit kan in Azure zijn, op een andere cloud of on-premise.
- Azure resource monitoring data, data over een resource van Azure. Een overzicht van welke resources kun je hier bekijken: link.
- Azure subscription monitoring data, data over operatie en management van je Azure subscription, maar ook over de huidige staat van Azure zelf (is er spul down?).
- Azure tenant monitoring data, data over de activiteiten van tenant-level Azure services, zoals Azure Active Directory.
Data die verzameld wordt valt of in de categorie metrics of in de categorie logs. Metrieken zijn numerieke waarden die een deel van het systeem beschrijven op een bepaald moment in de tijd. Dit zijn "lichtgewicht" zaken en kunnen bijna real-time zijn. Logs zijn verschillende soorten data, opgeslagen in records met verschillende eigenschappen voor elk type. Events, traces worden opgeslagen in logs zodat het later geanalyseerd kan worden.
Bij veel Azure resources zie je de metric data van Azure Monitor in het overzichtspagina in de portal. Log data kan met query's geanalyseerd worden. Met Log Analytics kun je query's maken en testen in het portal.
Sommige resource providers hebben een "curated visualisation" die je custom monitoring geeft voor een specifiek onderdeel van de dienst of diensten. Grotere schaalbare visualisaties worden "insights" genoemd;
- Application Insights, monitoren van de beschikbaarheid, performance en gebruik van je web applicaties. Hiermee kun je fouten diagnosticeren zonder te wachten dat gebruikers deze gaan melden.
- Container Insights, monitoring van de performance van container workloads die gedeployed zijn naar Kubernetes clusters gehost via Azure Kubernetes Service (AKS) en Azure Container instanties. Je ziet de performance door de metrieken van controllers, nodes en containers. Container logs worden ook verzameld.
- VM Insights, monitoren van je virtuele machines. Performance en gezondheid van je Windows en Linux VM en identificeert de verschillende processen en afhankelijkheden van externe processen.
Application Insights is een uitbreidbare Application Performance Management (APM) service voor ontwikkelaars en DevOps professionals. Gebruik het om je live applicaties te monitoren. Het detecteert automatisch performance problemen en bied sterke analytische tools om diagnoses te stellen.
Je installeert een klein instrumentation package in je code of je zet Aplication Insights aan via de Application Insights Agent (als dat ondersteund wordt: link).
Deze code houdt je app in de gaten en stuurt de data naar een Azure Application Insights Resource met een unieke GUID wat we een Instrumentation Key noemen. En dit stopt niet bij de web service, maar ook de background componenten, JavaScript in de pagina's. En het hoeft niet in Azure te draaien.
Hierbij kun je nog extra telemetrie uit de hostende omgeving opvragen, zoals performance counters, Azure diagnostics of Docker logs. Je kunt web testen opzetten die regelmatig requests naar je webservice sturen.
Alles wordt geïntegreerd in Azure Monitor. In de monitor heb je:
- Request rates, response times en failure rates: welke pagina is het populairst, op welke tijdstippen en waar zijn jouw gebruikers? Zie welke pagina's het snelst ingeladen worden. Als de responsetijd en fouten omhoog gaan bij meer requests, dan heb je een resourcing probleem.
- Dependency rates, response times en failure rates: zie of externe services jouw problemen geven.
- Exceptions: analyseer samengevoegde statistieken of pak specifieke instanties en duik in de stack trace en gerelateerde requests. Zowel excepties op de server als in de browser worden ondersteund.
- Page views and load performance: gerapporteerd door de browsers van je bezoekers.
- AJAX calls van web pagina's: rates, responsetjden en de hoeveelheid fouten.
- Use en session counts.
- Performance counters: van de machine, dus CPU, geheugen, netwerkgebruik.
- Host diagnostics: gegevens van Docker of Azure.
- Diagnostic trace logs van je app: zodat je trace-events aan requests kunt koppelen.
- Custom events en metrics: in je eigen code (zowel server als client) zaken toevoegen, om business events te traceren zoals verkochte items of gewonnen spellen.
Gebruik Application Insights. Je kunt je gratis aanmelden en kiezen voor het basic price plan: in dat geval geen kosten tot je applicatie "substantieel groot" geworden is. Dat zal vast wel ergens staan wat daar de criteria voor zijn :)
Er zijn verschillende manieren om te starten:
- tijdens run-time, voeg instrumentatie toe op de server, handig als de app al live is, hiervoor hoef je geen code aan te passen.
- tijdens development-tijd, zet het in je code.
- in je web-pagina's, voeg het toe bij page view, AJAX en andere client-side acties.
- analyseer mobiel app gebruik, integratie met Visual Studio App Center.
- beschikbaarheid tests, ping je website regelmatig vanaf onze servers.
Metrieken die binnen Application Insights als log opgeslagen worden, daarmee kun je de gezondheid van je apps monitoren, dashboards maken en alarmering instellen. Log based metrics: acher de schermen omgezet via Kusto query's van opgeslagen events: link. Of Standard metrics: opgeslagen als pre-aggregated tijdseries.
Standard metrics zijn een goede keus voor het tonen op een dashboard en te gebruiken voor alarmering. Log-based metrics hebben meer dimensies, waardoor ze superieur zijn voor data analyse en ad-hoc diagnose. Gebruik de namespace selector om te switchen tussen log-based en standard metrics: link.
Ontwikkelaars kunnen de SDK gebruiken om de events handmatig aan te maken of ze kunnen vertrouwen op de automatische verzameling van events door "auto instrumentation". Met deze logs kun je zien hoeveel keer een bepaalde URL aangeroepen is en kun je ook zien hoeveel unieke bezoekers er geweest zijn.
Maar als je een applicatie met heel, heel, heel veel verkeer kan je logdata te groot worden. Application Insights heeft standaard technieken om het volume omlaag te brengen, door sampling en filtering. Maar let op, de nauwkeurigheid wordt daardoor (natuurlijk) wel minder.
De pre-aggregated metrics worden niet als losse events met veel eigenschappen opgeslagen. Daardoor kan er sneller een query uitgevoerd worden.
De nieuwe SDK's (2.7 of hoger) voegen metrieken al samen tijdens het verzamelen: link.
Dit is van toepassing op standard metrics send by default, waardoor de nauwkeurigheid niet door sampling en filtering beïnvloed wordt: link.
Het is ook van toepassing op op maat gemaakte metrieken die via GetMetric verstuurd zijn, waardoor er minder data is en dus minder kosten: link.
Pre-aggregation wordt uitgevoerd voor ingestion sampling, dus dat proces heeft geen invloed op de nauwkeurigheid van je pre-aggregated metrieken: link.
Je kunt veel met Auto Instrumentation doen, op deze pagina kun je zien wat ondersteund wordt: link.
Distributed tracing is een equivalent voor microservices. In Azure Monitor zijn 2 weergaves voor de distributed trace data. De eerste is een transaciton diagnostics view, een soort call stack met een tijd-dimensie. Je hebt inzicht in 1 transactie/request en is een goede hulp voor het opsporen van de hoofdoorzaak van betrouwbaarheids issues en performance bottlenecks op een per request basis.
De andere weergave is een map view waarin veel transacties geaggregeerd worden om een topologische weergave te tonen van interactie tussen de systemen en wat daarbij de gemiddelde performance en error rates zijn.
Het aan zetten van distributed tracing is het toevoegen van een SDK of code-bibliotheek aan de service.
De Application Insights SDK's voor .NET, .NET Core, Java, Node.js en JavaScript ondersteunen standaard distributed tracing.
Handmatig kun je zaken "tracken" met een aanroep naar TrackDependency van de TelemetryClient.
Naast de Application Insights SDK's ondersteunt Aplication Insights ook de distributed tracing van OpenCensus. OpenCensus is een open source pakket. Dat pakket kan ook samenwerken met Redis, Memcached en MongoDB: link.
Nadat je jouw web app of website online gezet hebt kun je herhalende testen instellen om je site te testen op beschikbaarheid en responsetijden. Application Insights verstuurt die requests dan op reguliere intervallen van punten over de hele wereld. Het kan je alarmeren als de boel niet beschikbaar is of te traag is.
Deze endpoints moeten beschikbaar zijn op het publieke internet. Je kunt per Application Insights resource 100 availability testen instellen.
Er zijn 3 soorten:
- URL ping test (classic). Je kunt aangepaste succes criteria instellen, zoals het parsen van afhankelijke requests en retries toestaan.
- Standard test (preview). Lijkt op de PING test. Bevat SSL validatie, lifetime check, HTTP request verb (GET/HEA/POST), custom headers en custom data.
- Custom TrackAvailability Test. Als je een eigen test bouwt kun je de resultaten posten met de TrackAvailability() methode: link.
Er is nog een 4e type, multi-step test, maar die is alleen beschikbaar via Visual Studio 2019. Kies daarom voor Custom TrackAvailability Test in dat geval.
De URL ping test vertrouwt op publieke DNS-en om je site te bereiken.
Troubleshoot informatie staat hier: link.
Met Application Map kun je de structuur van het netwerk en afhankelijkheden zien. Elke node is een representatie van een applicatie component of afhankelijkheden en heeft een health KPI en alert status. Je kunt daar doorheen klikken om dieper erin te duiken. Hier kun je dus de slowest requests zien, maar ook query-adviezen.