Aanbevelingen voor het instrumenteren van een toepassing

Van toepassing op deze aanbeveling voor de controlelijst voor operationele uitmuntendheid van Azure Well-Architected Framework:

OE:07 Ontwerp en implementeer een bewakingssysteem om ontwerpkeuzen te valideren en toekomstige ontwerp- en bedrijfsbeslissingen te informeren. Dit systeem legt operationele telemetrie, metrische gegevens en logboeken vast en maakt deze beschikbaar die afkomstig zijn van de infrastructuur en code van de workload.

Verwante handleiding: Aanbevelingen voor het ontwerpen en maken van een bewakingssysteem

In deze handleiding worden de aanbevelingen beschreven voor het inschakelen van waarneembaarheid van uw toepassing met behulp van instrumentatie. Genereer zinvolle telemetrie die kan worden opgenomen en geïntegreerd in uw bewakingssysteem. Met behulp van instrumentatie kunt u informatie verzamelen zonder u aan te melden bij een externe productieserver om handmatig tracering of foutopsporing uit te voeren. Instrumentatiegegevens omvatten metrische gegevens en logboeken die u kunt gebruiken om prestaties te beoordelen, problemen te diagnosticeren en beslissingen te nemen over workloads.

Belangrijke ontwerpstrategieën

Als u telemetrie voor uw workload wilt optimaliseren, instrumenteert u uw toepassing om de volgende gegevens te genereren:

  • Logboeken zijn tijdstempelrecords van discrete gebeurtenissen. Er zijn drie soorten logboeken: tekst zonder opmaak, gestructureerd en binair.

  • Met gedistribueerde traceringslogboeken kunt u het pad van een aanvraag zien terwijl deze door verschillende services en onderdelen wordt verplaatst.

  • Metrische gegevens zijn numerieke waarden die een aspect van een systeem op een bepaald tijdstip beschrijven.

Notitie

U kunt hulpprogramma's zoals Application Insights, Dynatrace en Elastic Application Performance Monitoring gebruiken om uw toepassing automatisch te instrumenteren. Deze hulpprogramma's maken instrumentatie eenvoudiger, maar ze kunnen ook beperkend zijn. Als u een hulpprogramma voor automatische instrumentatie gebruikt, kunt u meer mogelijkheden toevoegen via handmatige instrumentatie.

Logboeken en gedistribueerde traceringslogboeken

Gebruik gestructureerde logboekregistratie om logboeken eenvoudig te integreren in bewakings- en analyseplatforms. Instrumenteer uw toepassing zodat de uitgebreidheidsniveaus kunnen worden gewijzigd. Constante uitgebreide logboekregistratie kan opslagresources verspillen, dus deze moet zo nodig worden in- en uitgeschakeld voor het oplossen van problemen.

Traceringslogboeken bevatten tekstgegevens of binaire gegevens die zijn gemaakt op basis van een traceringsevenement, als de toepassing event tracing for Windows (ETW) gebruikt. Systeemlogboeken genereren traceringslogboekinhoud op basis van gebeurtenissen in de infrastructuur, zoals de webserver. Tekstuele logboekinhoud is ontworpen om door mensen te kunnen worden gelezen, maar u moet ervoor zorgen dat deze is geschreven in een indeling die ook door een geautomatiseerd systeem kan worden geparseerd.

Categoriseer logboeken en gebruik afzonderlijke logboeken om de traceringsuitvoer van elk operationeel aspect van het systeem vast te leggen. Als u uw logboeken categoriseert, kunt u snel logboekberichten filteren in plaats van één lang bestand te verwerken. Schrijf nooit gegevens met verschillende beveiligingsvereisten, zoals controlegegevens en foutopsporingsgegevens, naar hetzelfde logboek.

Notitie

Een logboek kan worden geïmplementeerd als een bestand in het bestandssysteem of in een andere indeling, zoals een blob in blobopslag. Logboekgegevens kunnen ook worden opgeslagen in gestructureerde opslag, zoals rijen in een tabel.

Metrische gegevens

Metrische gegevens, of voorbeelden, zijn een telling van een bepaald aspect of resource in het systeem op een specifiek tijdstip, met een of meer bijbehorende tags of dimensies. Eén exemplaar van een metrische waarde is niet nuttig als isolatie. Metrische gegevens moeten in de loop van de tijd worden vastgelegd. Overweeg welke metrische gegevens u moet vastleggen en hoe vaak. Gegevens die te vaak worden gegenereerd, kunnen een zware belasting voor het systeem met zich meebrengen, maar onregelmatige gegevensopname kan ertoe leiden dat u de omstandigheden mist die tot een belangrijke gebeurtenis leiden. De juiste frequentie voor het vastleggen van gegevens kan variëren van metrische waarde tot metrische waarde. Het CPU-gebruik op een server kan bijvoorbeeld aanzienlijk variëren van seconde tot seconde, maar hoog gebruik wordt alleen een probleem als het gedurende vele minuten consistent is.

Informatie voor het correleren van gegevens

U kunt eenvoudig afzonderlijke prestatiemeteritems en prestatiemeteritems op systeemniveau bewaken, metrische gegevens voor resources vastleggen en toepassingstraceringsgegevens ophalen uit verschillende logboekbestanden. Voor sommige bewaking is gegevenscorrelatie vereist tijdens de analyse- en diagnosefase in de bewakingspijplijn. Deze gegevens kunnen verschillende vormen aannemen en het analyseproces moet worden voorzien van voldoende instrumentatiegegevens om deze verschillende vormen in kaart te brengen. Op het niveau van het toepassingsframework kan een thread-id bijvoorbeeld een taak identificeren. Binnen een toepassing kan hetzelfde werk worden gekoppeld aan de gebruikers-id van de gebruiker die deze taak voltooit.

Het is onwaarschijnlijk dat het een 1:1-toewijzing is tussen threads en gebruikersaanvragen, omdat asynchrone bewerkingen dezelfde threads voor meer dan één gebruiker kunnen gebruiken. Om de zaken nog ingewikkelder te maken, kan één aanvraag correleren met meer dan één thread terwijl deze door het systeem loopt. Koppel indien mogelijk elke aanvraag aan een unieke activiteits-id die wordt doorgegeven via het systeem als onderdeel van de context van de aanvraag. De techniek voor het genereren en opnemen van activiteits-id's in traceringsgegevens is afhankelijk van de technologie die wordt gebruikt om de traceringsgegevens vast te leggen.

Alle bewakingsgegevens moeten op dezelfde manier een tijdstempel hebben. Noteer alle datums en tijden met behulp van Coordinated Universal Time voor consistentie.

Notitie

Computers die in verschillende tijdzones en netwerken werken, worden mogelijk niet gesynchroniseerd. Wees niet alleen afhankelijk van tijdstempels voor het correleren van instrumentatiegegevens die meerdere computers omvatten.

Informatie die in de instrumentatiegegevens moet worden opgenomen

Houd rekening met de volgende punten wanneer u besluit welke instrumentatiegegevens u moet verzamelen.

Door mensen leesbare gegevens

Zorg ervoor dat gegevens die zijn vastgelegd door traceringsevenementen, zowel door machines als door mensen kunnen worden gelezen. Gebruik goed gedefinieerde schema's voor deze informatie om geautomatiseerde verwerking van logboekgegevens in systemen te implementeren en consistentie te bieden voor bewerkingen en technische medewerkers die de logboeken lezen.

Neem de volgende omgevingsinformatie op in uw gegevens:

  • Implementatieomgeving
  • Verwerkingsmachine
  • Details van het proces
  • Aanroepstack

Investeren in traceerbaarheid en correlatie

Geef voldoende context op, zoals een activiteits-id die is gekoppeld aan een specifiek exemplaar van een aanvraag, zodat de ontwikkelaar of beheerder de bron van elke aanvraag kan bepalen.

Gegevenscontext kan ook informatie bevatten die wordt gebruikt om een activiteit te correleren met het uitgevoerde rekenwerk en de gebruikte resources. Dit werk kan proces- en machinegrenzen overschrijden.

Voor meting moet de context direct of indirect een verwijzing bevatten naar de klant die de aanvraag heeft veroorzaakt. Deze context biedt waardevolle informatie over de status van de toepassing op het moment dat de bewakingsgegevens zijn vastgelegd.

Alle relevante gegevens vastleggen

Noteer alle aanvragen en de locaties of regio's waar ze worden gedaan. U kunt deze informatie gebruiken om locatiespecifieke hotspots te identificeren. Deze informatie kan ook nuttig zijn om te bepalen of u een toepassing opnieuw wilt partitioneren of de gegevens die worden gebruikt.

Leg de details van uitzonderingen zorgvuldig vast. Kritieke foutopsporingsinformatie gaat vaak verloren vanwege een slechte afhandeling van uitzonderingen. Leg alle uitzonderingsdetails vast die de toepassing genereert, inclusief eventuele interne uitzonderingen of andere contextuele informatie, zoals de aanroepstack, indien mogelijk.

Streven naar gegevensconsistentie

Consistente gegevens kunnen u helpen gebeurtenissen te analyseren en deze te correleren met gebruikersaanvragen. Overweeg het gebruik van een uitgebreid en configureerbaar logboekregistratiepakket om informatie te verzamelen. Met logboekregistratiepakketten kunt u voorkomen dat ontwikkelaars afhankelijk zijn van uw aanpak bij het implementeren van verschillende onderdelen van het systeem.

Verzamel gegevens, zoals het invoer-/uitvoervolume, het aantal aanvragen en het geheugen-, netwerk- en CPU-gebruik, van belangrijke prestatiemeteritems. Sommige infrastructuurservices bieden hun eigen prestatiemeteritems, zoals:

  • Het aantal verbindingen met een database.
  • De transactiesnelheid.
  • Het aantal transacties dat wel of niet lukt.

Toepassingen kunnen ook hun eigen prestatiemeteritems definiëren.

Houd rekening met externe afhankelijkheden

Registreer alle externe service-aanroepen. Externe aanroepen kunnen worden uitgevoerd naar:

  • Databasesystemen.
  • Webservices.
  • Andere services op systeemniveau die deel uitmaken van de infrastructuur.

Leg informatie vast over de duur van elke oproep en het slagen of mislukken van de oproep. Leg indien mogelijk informatie vast over alle nieuwe pogingen en mislukkingen voor tijdelijke fouten die optreden.

Compatibiliteit van telemetriesystemen garanderen

In veel gevallen wordt de instrumentatie-informatie gegenereerd als een reeks gebeurtenissen en doorgegeven aan een afzonderlijk telemetriesysteem voor verwerking en analyse. Een telemetriesysteem is doorgaans onafhankelijk van een specifieke toepassing of technologie.

Telemetriesystemen gebruiken gedefinieerde schema's om informatie te parseren. Het schema geeft een contract op dat de gegevensvelden en typen definieert die het telemetriesysteem kan opnemen. Generaliseer het schema om gegevens toe te staan die afkomstig zijn van verschillende platforms en apparaten. Een gemeenschappelijk schema moet velden bevatten die relevant zijn voor alle instrumentatiegebeurtenissen, zoals:

  • Gebeurtenisnaam.
  • Tijd van gebeurtenis.
  • IP-adres van de afzender.
  • Details die vereist zijn voor gebeurteniscorrelatie, waaronder:
    • Gebruikers-id
    • Apparaat-ID
    • Toepassings-id

Houd er rekening mee dat veel apparaten gebeurtenissen voor dezelfde toepassing kunnen genereren, dus het schema mag niet afhankelijk zijn van het apparaattype. De toepassing moet roaming of distributie tussen apparaten ondersteunen. Het schema kan ook relevante domeinvelden bevatten voor een bepaald scenario dat gebruikelijk is in toepassingen, zoals:

  • Informatie over uitzonderingen.
  • Gebeurtenissen voor het starten en beëindigen van toepassingen.
  • Geslaagde of mislukte webservice-API-aanroepen.

Stel domeinvelden in die dezelfde set gebeurtenissen produceren om een set algemene rapporten en analyses in toepassingen te maken. Mogelijk moet u een schema configureren dat aangepaste velden bevat voor het vastleggen van de details van toepassingsspecifieke gebeurtenissen.

OpenTelemetry is een leverancierneutrale verzameling API's, SDK's en andere hulpprogramma's. U kunt OpenTelemetry gebruiken om toepassingen te instrumenteren en zinvolle telemetrie te genereren in verschillende talen. OpenTelemetry is hulpprogramma-agnostisch, dus het is compatibel met veel waarneembaarheidsplatforms, waaronder opensource- en commerciële aanbiedingen. Microsoft gaat OpenTelemetry gebruiken als het standaardhulpprogramma voor instrumentatie.

Best practices voor het instrumenteren van toepassingen

De volgende lijst bevat een overzicht van de aanbevolen procedures voor het instrumenteren van een gedistribueerde toepassing die wordt uitgevoerd in de cloud:

  • Maak het gemakkelijk logboeken te lezen en te parseren. Gebruik waar mogelijk gestructureerde logboekregistratie.

  • Wees beknopt en beschrijvend in berichten in het logboek.

  • Identificeer de bron van het logboek.

  • Voeg tijdstempelgegevens toe terwijl elke logboekrecord wordt geschreven.

  • Gebruik dezelfde tijdzone en indeling voor alle tijdstempels.

  • Categoriseer logboeken en schrijf berichten op de juiste plaats.

  • Geef geen gevoelige informatie over het systeem of persoonlijke gegevens over gebruikers weer. Scrub deze informatie voordat deze wordt geregistreerd, maar bewaar alle relevante details.

  • Registreer alle kritieke uitzonderingen, maar stel de beheerder in staat om logboekregistratie zo nodig in en uit te schakelen voor minder uitzonderingen en waarschuwingen.

  • Leg alle logische gegevens voor opnieuw proberen vast en registreer deze. Deze gegevens zijn nuttig bij het bewaken van de tijdelijke status van het systeem.

  • Traceer procesoproepen, zoals aanvragen naar externe webservices of databases.

  • Combineer geen berichten in het logboek met andere beveiligingsvereisten in hetzelfde logboekbestand.

  • Zorg ervoor dat alle logboekregistratie-aanroepen fire-and-forget-bewerkingen zijn die de voortgang van bedrijfsactiviteiten niet blokkeren. Sluit controle-gebeurtenissen uit van deze regel omdat ze essentieel zijn voor het bedrijf.

  • Zorg ervoor dat logboekregistratie uitbreidbaar is en geen directe afhankelijkheden heeft van een concreet doel.

  • Zorg ervoor dat alle logboekregistratie fail-safe is en geen trapsgewijze fouten veroorzaakt.

  • Behandel instrumentatie als een doorlopend iteratief proces en bekijk regelmatig logboeken.

Overwegingen

  • Implementeer profilering alleen wanneer dat nodig is, omdat dit een aanzienlijke overhead voor het systeem kan vormen. Met behulp van instrumentatie registreert profilering een gebeurtenis, zoals een methodeaanroep, telkens wanneer deze plaatsvindt. Bij steekproeven worden echter alleen geselecteerde gebeurtenissen vastgelegd.

  • Profileringsselecties kunnen op tijd zijn gebaseerd, zoals eenmaal per n seconden, of frequenties, zoals eenmaal per n aanvragen. Als gebeurtenissen regelmatig optreden, kan profilering een te grote belasting voor het systeem veroorzaken en de algehele prestaties beïnvloeden. In dit geval verdient de steekproefbenadering de voorkeur. Als de frequentie van gebeurtenissen echter laag is, worden ze door steekproeven mogelijk gemist. In dit geval is profilering misschien de betere aanpak.

Azure-facilitering

Automatische instrumentatie is beschikbaar voor veel typen Azure- en on-premises toepassingen die worden bewaakt met Application Insights. De functie voor automatische instrumentatie configureert automatisch uw toepassing om uitgebreide telemetrie te bieden aan Application Insights en biedt eenvoudige toegang tot ervaringen zoals het toepassingsdashboard en toepassingsoverzicht. Zie Ondersteunde omgevingen, talen en resourceproviders voor ondersteunde hostingplatforms en ontwikkeltalen.

Controlelijst voor operationele uitmuntendheid

Raadpleeg de volledige set aanbevelingen.