Delen via


Aanbevelingen voor het instrumenteren van een toepassing

Is van toepassing op deze controlelijst voor Azure Well-Architected Framework Operational Excellence:

OE:07 Ontwerp en implementeer een bewakingssysteem om ontwerpkeuzen te valideren en toekomstige ontwerp- en bedrijfsbeslissingen te informeren. Met dit systeem worden operationele telemetrie, metrische gegevens en logboeken vastgelegd en weergegeven die worden verzonden vanuit 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 instrumentatie kunt u informatie verzamelen zonder u aan te melden bij een externe productieserver om handmatig tracering of foutopsporing uit te voeren. Instrumentatiegegevens bevatten metrische gegevens en logboeken die u kunt gebruiken om prestaties te beoordelen, problemen te diagnosticeren en workloadbeslissingen te nemen.

Belangrijke ontwerpstrategieën

Als u telemetrie voor uw workload wilt optimaliseren, moet u uw toepassing instrumenteren 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 loopt.

  • Metrische gegevens zijn numerieke waarden die een aspect van een systeem op een bepaald moment 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 gemakkelijker, maar ze kunnen ook worden beperkt. Als u een hulpprogramma voor automatische instrumentatie gebruikt, kunt u indien nodig meer mogelijkheden toevoegen via handmatige instrumentatie.

Gestructureerde logboeken en tracering gebruiken

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 moet deze indien nodig worden in- en uitgeschakeld voor probleemoplossing.

Traceerlogboeken bevatten tekstgegevens of binaire gegevens die zijn gemaakt op basis van een tracerings gebeurtenis, als de toepassing gebruikmaakt van Event Tracing voor Windows (ETW). Systeemlogboeken genereren traceringslogboekinhoud van gebeurtenissen in de infrastructuur, zoals de webserver. Tekstuele logboekinhoud is ontworpen om door mensen leesbaar te zijn, maar u moet ervoor zorgen dat deze is geschreven in een indeling die een geautomatiseerd systeem ook kan parseren.

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 kan worden bewaard in een andere indeling, zoals een blob in blobopslag. Logboekgegevens kunnen ook worden opgeslagen in gestructureerde opslag, zoals rijen in een tabel.

Metrische gegevens van toepassingen vastleggen

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

Correlatie tussen onderdelen vergemakkelijken

U kunt eenvoudig afzonderlijke prestatiemeteritems en prestatiemeteritems op systeemniveau bewaken, metrische gegevens vastleggen voor resources en toepassingstraceringsgegevens ophalen uit verschillende logboekbestanden. Voor sommige bewakingen is gegevenscorrelatie vereist tijdens de analyse- en diagnosefase in de bewakingspijplijn. Deze gegevens kunnen verschillende vormen aannemen en het analyseproces moet voldoende instrumentatiegegevens bevatten om deze verschillende formulieren toe te wijzen. 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 voor 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 opnieuw kunnen gebruiken. Om het nog ingewikkelder te maken, kan één aanvraag correleren met meer dan één thread terwijl deze door het systeem stroomt. 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 activiteit-id's in traceringsgegevens is afhankelijk van de technologie die wordt gebruikt om de traceringsgegevens vast te leggen.

Alle bewakingsgegevens moeten op dezelfde manier worden getypt. 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. Niet alleen afhankelijk van tijdstempels voor het correleren van instrumentatiegegevens die meerdere computers omvatten.

Relevante gegevens vastleggen

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

Leesbare gegevens

Zorg ervoor dat informatie die door traceringsevenementen wordt vastgelegd, zowel machine als door mensen kan worden gelezen. Gebruik goed gedefinieerde schema's voor deze informatie om geautomatiseerde verwerking van logboekgegevens in systemen te implementeren en om 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 het meten 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 gemaakt. U kunt deze informatie gebruiken om locatiespecifieke hotspots te identificeren. Deze informatie kan ook nuttig zijn om te bepalen of een toepassing of de gegevens die worden gebruikt, opnieuw moeten worden gepartitioneren.

Leg de details van uitzonderingen zorgvuldig vast. Kritieke foutopsporingsgegevens gaan vaak verloren vanwege slechte verwerking van uitzonderingen. Leg alle uitzonderingsgegevens 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 een uitgebreid en configureerbaar logboekregistratiepakket te gebruiken om informatie te verzamelen. Met logboekregistratiepakketten kunt u afhankelijkheid van ontwikkelaars voorkomen om uw aanpak te gebruiken wanneer ze verschillende onderdelen van het systeem implementeren.

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

  • Het aantal verbindingen met een database.
  • De transactiesnelheid.
  • Het aantal transacties dat slaagt of mislukt.

Toepassingen kunnen ook hun eigen prestatiemeteritems definiëren.

Externe afhankelijkheden overwegen

Alle externe service-aanroepen registreren. Externe aanroepen kunnen worden gedaan voor:

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

Noteer informatie 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 telemetriesysteem 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 algemeen schema moet velden bevatten die relevant zijn voor alle instrumentatie-gebeurtenissen, zoals:

  • Gebeurtenisnaam.
  • Gebeurtenistijd.
  • 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 ondersteuning bieden voor roaming of distributie tussen apparaten. Het schema kan ook relevante domeinvelden bevatten voor een bepaald scenario dat gebruikelijk is voor toepassingen, zoals:

  • Informatie over uitzonderingen.
  • Begin- en eindevenementen van de toepassing.
  • 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 consistent in verschillende talen te genereren. OpenTelemetry is hulpprogrammaneutraal, dus het is compatibel met veel waarneembaarheidsplatforms, waaronder opensource- en commerciële aanbiedingen. Microsoft gaat openTelemetry gebruiken als het standaardhulpprogramma voor instrumentatie.

Instrumentatiecode optimaliseren

De volgende lijst bevat een overzicht van 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 wanneer elke logboekrecord wordt geschreven.

  • Gebruik dezelfde tijdzone en notatie voor alle tijdstempels.

  • Categoriseer logboeken en schrijf berichten op de juiste plaats.

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

  • Meld alle kritieke uitzonderingen aan, maar schakel de beheerder in en uit wanneer dat nodig is voor minder uitzonderingen en waarschuwingen.

  • Alle logicagegevens voor opnieuw proberen vastleggen en vastleggen. Deze gegevens zijn handig bij het bewaken van de tijdelijke status van het systeem.

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

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

  • Zorg ervoor dat alle aanroepen voor logboekregistratie 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 mislukt en geen trapsgewijze fouten activeert.

  • Instrumentatie behandelen als een doorlopend iteratief proces en regelmatig logboeken controleren.

Toepassingsprofilering gebruiken

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

  • Profileringsselecties kunnen tijdgebonden zijn, zoals elke n seconden of op basis van frequentie, zoals elke n aanvragen. Als gebeurtenissen vaak optreden, kan profilering te veel last van 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 mogelijk de betere aanpak.

Azure-facilitering

Automatische instrumentatie is beschikbaar voor veel soorten Azure- en on-premises toepassingen die worden bewaakt met Application Insights. De functie automatische instrumentatie configureert uw toepassing automatisch 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 hostingplatformen en ontwikkeltalen.

Controlelijst voor operationele uitmuntendheid

Raadpleeg de volledige set aanbevelingen.