Application Insights inschakelen voor ASP.NET Core-toepassingen

In dit artikel wordt beschreven hoe u Application Insights inschakelt voor een ASP.NET Core toepassing die is geïmplementeerd als een Azure-web-app. Deze implementatie maakt gebruik van een SDK-benadering. Er is ook een methode voor automatische instrumentatie beschikbaar.

Application Insights kan de volgende telemetriegegevens verzamelen van uw ASP.NET Core-toepassing:

  • Aanvragen
  • Afhankelijkheden
  • Uitzonderingen
  • Prestatiemeteritems
  • Heartbeats
  • Logboeken

Voor een voorbeeldtoepassing gebruiken we een ASP.NET Core MVC-toepassing die is gericht op net6.0. U kunt deze instructies echter toepassen op alle ASP.NET Core toepassingen. Als u de Werkrolservice gebruikt, volgt u de instructies hier.

Notitie

Er is een preview van op OpenTelemetry gebaseerde .NET-aanbieding beschikbaar. Meer informatie.

Notitie

Op 31 maart 2025 eindigt de ondersteuning voor opname van instrumentatiesleutels. Opname van instrumentatiesleutels blijft werken, maar we bieden geen updates of ondersteuning meer voor de functie. Stap over op verbindingsreeksen om te profiteren van nieuwe mogelijkheden.

Ondersteunde scenario's

De Application Insights SDK voor ASP.NET Core kunt uw toepassingen bewaken, ongeacht waar en hoe ze worden uitgevoerd. Als uw toepassing wordt uitgevoerd en netwerkconnectiviteit heeft met Azure, kan Application Insights telemetrie verzamelen. Application Insights-bewaking wordt overal ondersteund waar .NET Core wordt ondersteund. De volgende scenario's worden ondersteund:

  • Besturingssysteem: Windows, Linux of Mac
  • Hostingmethode: Wordt verwerkt of niet verwerkt
  • Implementatiemethode: Framework afhankelijk of zelfstandig
  • Webserver: Internet Information Server (IIS) of Kestrel
  • Hostingplatform: de Web Apps-functie van Azure App Service, Azure VM, Docker, Azure Kubernetes Service (AKS), enzovoort
  • .NET Core-versie: alle officieel ondersteunde .NET Core-versies die niet in preview zijn
  • IDE: Visual Studio, Visual Studio Code of opdrachtregel

Vereisten

Voor deze zelfstudie hebt u het volgende nodig:

  • Visual Studio 2022
  • De volgende Visual Studio-workloads:
    • ASP.NET-ontwikkeling en webontwikkeling
    • Gegevensopslag en -verwerking
    • Azure-ontwikkeling
  • .NET 6.0
  • Azure-abonnement en gebruikersaccount (met de mogelijkheid om resources te maken en te verwijderen)

Azure-resources implementeren

Volg de richtlijnen om de voorbeeldtoepassing te implementeren vanuit de GitHub-opslagplaats.

Om resources wereldwijd unieke namen te geven, wordt aan sommige resources een achtervoegsel van zes tekens toegewezen. Noteer dit achtervoegsel voor gebruik verderop in dit artikel.

Schermopname van de lijst met geïmplementeerde Azure-resources in de Azure Portal met het achtervoegsel van zes tekens gemarkeerd.

Een Application Insights-resource maken

  1. Selecteer in de Azure Portal de resourcegroep application-insights-azure-café.

  2. Selecteer + Maken in het bovenste werkbalkmenu.

    Schermopname van de resourcegroep application-insights-azure-café in de Azure Portal met de knop + Maken gemarkeerd in het werkbalkmenu.

  3. Zoek en selecteer Application Insights in het zoekvak van Marketplace in het scherm Een resource maken.

    Schermopname van het scherm Een resource maken in de Azure Portal.

  4. Selecteer Maken in het scherm Overzicht van Application Insights-resources.

    Schermopname van het application insights-overzichtsscherm in de Azure Portal met de knop Maken gemarkeerd.

  5. Vul op het scherm Application Insights, tabblad Basisinformatie , het formulier in met behulp van de volgende tabel en selecteer vervolgens de knop Beoordelen en maken . Velden die niet in de onderstaande tabel zijn opgegeven, kunnen hun standaardwaarden behouden.

    Veld Waarde
    Naam Voer in azure-cafe-application-insights-{SUFFIX}en vervang {SUFFIX} door de juiste achtervoegselwaarde die eerder is vastgelegd.
    Regio Selecteer dezelfde regio die u hebt gekozen bij het implementeren van de artikelresources.
    Log Analytics-werkruimte Selecteer azure-café-log-analytics-workspace. U kunt ook een nieuwe Log Analytics-werkruimte maken.

    Schermopname van het tabblad Basisbeginselen van het application insights-scherm in de Azure Portal met een formulier dat is gevuld met de voorgaande waarden.

  6. Zodra de validatie is voltooid, selecteert u Maken om de resource te implementeren.

    Schermopname van het Application Insights-scherm in de Azure Portal. Het bericht met de validatie is geslaagd en de knop Maken zijn beide gemarkeerd.

  7. Zodra de resource is geïmplementeerd, gaat u terug naar de application-insights-azure-cafe resourcegroep en selecteert u de Application Insights-resource die u hebt geïmplementeerd.

    Schermopname van de resourcegroep application-insights-azure-café in de Azure Portal met de Application Insights-resource gemarkeerd.

  8. Selecteer in het scherm Overzicht van de Application Insights-resource de knop Kopiëren naar klembord om de waarde connection string te kopiëren. In de volgende sectie van dit artikel gebruikt u de waarde connection string.

    Schermopname van het scherm Overzicht van Application Insights in de Azure Portal.

De toepassingsinstelling Application Insights connection string configureren in de web-App Service

  1. Ga terug naar de application-insights-azure-cafe resourcegroep en open de resource azure-café-web-{SUFFIX} App Service.

    Schermopname van de resourcegroep application-insights-azure-café in de Azure Portal met de resource azure-café-web-{SUFFIX} gemarkeerd.

  2. Selecteer in het linkermenu onder de sectie Instellingen de optie Configuratie. Selecteer vervolgens op het tabblad Toepassingsinstellingen de optie + Nieuwe toepassingsinstelling onder de header Toepassingsinstellingen.

    Schermopname van het scherm App Service resource in de Azure Portal.

  3. Vul in het deelvenster Toepassingsinstelling toevoegen/bewerken het formulier als volgt in en selecteer OK.

    Veld Waarde
    Naam APPLICATIONINSIGHTS_CONNECTION_STRING
    Waarde Plak de waarde van Application Insights connection string die u in de vorige sectie hebt gekopieerd.

    Schermopname van het deelvenster Toepassingsinstelling toevoegen/bewerken in de Azure Portal met de voorgaande waarden ingevuld in de velden Naam en Waarde.

  4. Selecteer in het scherm App Service Configuratie de knop Opslaan in het werkbalkmenu. Wanneer u wordt gevraagd om de wijzigingen op te slaan, selecteert u Doorgaan.

    Schermopname van het scherm App Service Configuratie in de Azure Portal met de knop Opslaan gemarkeerd in het werkbalkmenu.

Het Application Insights NuGet-pakket installeren

We moeten de ASP.NET Core MVC-webtoepassing configureren om telemetrie te verzenden. Dit wordt bereikt met behulp van het NuGet-pakket Application Insights voor ASP.NET Core webtoepassingen.

  1. Open in 1 - Starter Application\src\AzureCafe.slnVisual Studio.

  2. Klik in het deelvenster Visual Studio Solution Explorer met de rechtermuisknop op het projectbestand AzureCafe en selecteer NuGet-pakketten beheren.

    Schermopname van de Visual Studio-Solution Explorer met het Azure Cafe-project geselecteerd en het contextmenu-item NuGet-pakketten beheren gemarkeerd.

  3. Selecteer het tabblad Bladeren en zoek en selecteer Microsoft.ApplicationInsights.AspNetCore. Selecteer Installeren en accepteer de licentievoorwaarden. U wordt aangeraden de nieuwste stabiele versie te gebruiken. Zie de opensource GitHub-opslagplaats voor de volledige releaseopmerkingen voor de SDK.

    Schermopname van de gebruikersinterface van NuGet Package Manager in Visual Studio.

    Houd Visual Studio geopend voor de volgende sectie van het artikel.

Telemetrie aan de serverzijde van Application Insights inschakelen

Het NuGet-pakket Application Insights voor ASP.NET Core webtoepassingen bevat functies voor het verzenden van telemetrie aan de serverzijde naar de Application Insights-resource in Azure.

  1. Open in de Visual Studio-Solution Explorer het bestand Program.cs.

    Schermopname van de Visual Studio-Solution Explorer met het bestand Program.cs gemarkeerd.

  2. Voeg de volgende code in vóór de builder.Services.AddControllersWithViews() instructie. Deze code leest automatisch de application insights-connection string waarde uit de configuratie. De AddApplicationInsightsTelemetry methode registreert de ApplicationInsightsLoggerProvider met de ingebouwde afhankelijkheidsinjectiecontainer die vervolgens wordt gebruikt om te voldoen aan ILogger - en ILogger<TCategoryName-implementatieaanvragen> .

    builder.Services.AddApplicationInsightsTelemetry();
    

    Schermopname van een codevenster in Visual Studio met het voorgaande codefragment gemarkeerd.

    Tip

    Meer informatie over de configuratieopties in ASP.NET Core.

Telemetrie aan de clientzijde inschakelen voor webtoepassingen

De voorgaande stappen zijn voldoende om u te helpen bij het verzamelen van telemetrie aan de serverzijde. De voorbeeldtoepassing heeft onderdelen aan de clientzijde. Volg de volgende stappen om te beginnen met het verzamelen van telemetriegegevens over gebruik.

  1. Open \Views\_ViewImports.cshtmlin Visual Studio Solution Explorer.

  2. Voeg de volgende code toe aan het einde van het bestaande bestand.

    @inject Microsoft.ApplicationInsights.AspNetCore.JavaScriptSnippet JavaScriptSnippet
    

    Schermopname van het bestand _ViewImports.cshtml in Visual Studio met de voorgaande coderegel gemarkeerd.

  3. Als u bewaking aan de clientzijde voor uw toepassing correct wilt inschakelen, opent \Views\Shared\_Layout.cshtml u in Visual Studio Solution Explorer de volgende code en voegt u deze direct vóór de afsluitende tag in<\head>. Dit JavaScript-fragment moet worden ingevoegd in de <head> sectie van elke pagina van uw toepassing die u wilt bewaken.

    @Html.Raw(JavaScriptSnippet.FullScript)
    

    Schermopname van het bestand _Layout.cshtml in Visual Studio met de voorgaande coderegel gemarkeerd in de hoofdsectie van het bestand.

    Tip

    Een alternatief voor het gebruik is FullScriptScriptBody. Gebruik ScriptBody als u de <script> tag wilt beheren om een inhoudsbeveiligingsbeleid in te stellen:

    <script> // apply custom changes to this script tag.
        @Html.Raw(JavaScriptSnippet.ScriptBody)
    </script>
    

Notitie

JavaScript-injectie biedt een standaardconfiguratie-ervaring. Als u configuratie nodig hebt naast het instellen van de connection string, moet u automatische injectie verwijderen zoals hierboven beschreven en de JavaScript SDK handmatig toevoegen.

Bewaking van databasequery's inschakelen

Bij het onderzoeken van oorzaken voor prestatievermindering is het belangrijk om inzichten op te nemen in databaseaanroepen. U schakelt bewaking in door de afhankelijkheidsmodule te configureren. Afhankelijkheidsbewaking, inclusief SQL, is standaard ingeschakeld.

Volg deze stappen om de volledige SQL-querytekst vast te leggen.

Notitie

SQL-tekst kan gevoelige gegevens bevatten, zoals wachtwoorden en PII. Wees voorzichtig bij het inschakelen van deze functie.

  1. Open in de Visual Studio-Solution Explorer het bestand Program.cs.

  2. Voeg bovenaan het bestand de volgende using instructie toe.

    using Microsoft.ApplicationInsights.DependencyCollector;
    
  3. Als u de tekst-instrumentatie van de SQL-opdracht wilt inschakelen, voegt u de volgende code direct na de builder.Services.AddApplicationInsightsTelemetry() code in.

    builder.Services.ConfigureTelemetryModule<DependencyTrackingTelemetryModule>((module, o) => { module.EnableSqlCommandTextInstrumentation = true; });
    

    Schermopname van een codevenster in Visual Studio met de voorgaande code gemarkeerd.

De Azure Cafe-webtoepassing uitvoeren

Nadat u de code van de webtoepassing hebt geïmplementeerd, wordt telemetrie naar Application Insights verzonden. De Application Insights SDK verzamelt automatisch binnenkomende webaanvragen voor uw toepassing.

  1. Klik in de Visual Studio-Solution Explorer met de rechtermuisknop op het project AzureCafe en selecteer Publiceren in het contextmenu.

    Schermopname van de Visual Studio-Solution Explorer met het Azure Cafe-project geselecteerd en het contextmenu-item Publiceren gemarkeerd.

  2. Selecteer Publiceren om de nieuwe code te promoveren naar de Azure App Service.

    Schermopname van het AzureCafe-publicatieprofiel met de knop Publiceren gemarkeerd.

    Wanneer de Azure Cafe-webtoepassing is gepubliceerd, wordt er een nieuw browservenster geopend met de Azure Cafe-webtoepassing.

    Schermopname van de Azure Cafe-webtoepassing.

  3. Als u telemetrie wilt genereren, volgt u deze stappen in de webtoepassing om een beoordeling toe te voegen.

    1. Als u het menu en beoordelingen van een café wilt bekijken, selecteert u Details naast een café.

      Schermopname van een gedeelte van de Azure Cafe-lijst in de Azure Cafe-webtoepassing met de knop Details gemarkeerd.

    2. Als u beoordelingen wilt weergeven en toevoegen, selecteert u op het scherm Café het tabblad Beoordelingen . Selecteer de knop Beoordeling toevoegen om een beoordeling toe te voegen.

      Schermopname van het scherm Cafe-details in de Azure Cafe-webtoepassing met de knop Beoordeling toevoegen gemarkeerd.

    3. Voer in het dialoogvenster Een beoordeling maken een naam, beoordeling en opmerkingen in en upload een foto voor de beoordeling. Wanneer u klaar bent, selecteert u Beoordeling toevoegen.

      Schermopname van het dialoogvenster Een beoordeling maken in de Azure Cafe-webtoepassing.

    4. Als u aanvullende telemetrie wilt genereren, voegt u extra beoordelingen toe.

Metrische livegegevens

U kunt live metrische gegevens gebruiken om snel te controleren of Application Insights-bewaking correct is geconfigureerd. Live Metrics toont het CPU-gebruik van het actieve proces in bijna realtime. Er kunnen ook andere telemetriegegevens worden weergegeven, zoals Aanvragen, Afhankelijkheden en Traceringen. Houd er rekening mee dat het enkele minuten kan duren voordat de telemetrie wordt weergegeven in de portal en analyse.

Het toepassingsoverzicht weergeven

De voorbeeldtoepassing roept meerdere Azure-resources aan, waaronder Azure SQL, Azure Blob Storage en de Azure Language Service (voor beoordeling van sentimentanalyse).

Diagram met de architectuur van de Azure Cafe-voorbeeldwebtoepassing.

Application Insights neemt de binnenkomende telemetriegegevens in zich op en kan een visueel overzicht genereren van de systeemintegraties die worden gedetecteerd.

  1. Open en meld u aan bij de Azure Portal.

  2. Open de resourcegroep voor de voorbeeldtoepassing, namelijk application-insights-azure-cafe.

  3. Selecteer in de lijst met resources de azure-cafe-insights-{SUFFIX} Application Insights-resource.

  4. Selecteer in het linkermenu onder de kop Onderzoekende optie Toepassingstoewijzing. Bekijk het gegenereerde toepassingsoverzicht.

    Schermopname van het Application Insights-toepassingsoverzicht in de Azure Portal.

HTTP-aanroepen en sql-opdrachttekst van database weergeven

  1. Open in de Azure Portal de Application Insights-resource.

  2. Selecteer in het linkermenu, onder de kop Onderzoeken , de optie Prestaties.

  3. Het tabblad Bewerkingen bevat details van de HTTP-aanroepen die door de toepassing zijn ontvangen. Als u wilt schakelen tussen server- en browserweergaven (clientzijde) van de gegevens, gebruikt u de wisselknop Server/browser.

    Schermopname van het scherm Prestaties in de Azure Portal.

  4. Selecteer een bewerking in de tabel en kies ervoor om in te zoomen op een voorbeeld van de aanvraag.

    Schermopname van het scherm Prestaties van Application Insights in de Azure Portal met bewerkingen en voorbeeldbewerkingen vermeld.

    De end-to-end-transactie wordt weergegeven voor de geselecteerde aanvraag. In dit geval is er een beoordeling gemaakt, inclusief een installatiekopieën, dus deze bevat aanroepen naar Azure Storage en de Language Service (voor sentimentanalyse). Het omvat ook database-aanroepen naar SQL Azure om de beoordeling voort te zetten. In dit voorbeeld geeft de eerste geselecteerde gebeurtenis informatie weer ten opzichte van de HTTP POST-aanroep.

    Schermopname van de end-to-end transactie in de Azure Portal met de HTTP Post-aanroep geselecteerd.

  5. Selecteer een SQL-item om de SQL-opdrachttekst te controleren die is uitgegeven aan de database.

    Schermopname van de end-to-end-transactie in de Azure Portal met sql-opdrachtdetails.

  6. Selecteer desgewenst de afhankelijkheidsaanvragen (uitgaande) naar Azure Storage of de taalservice.

  7. Ga terug naar het scherm Prestaties en selecteer het tabblad Afhankelijkheden om aanroepen naar externe resources te onderzoeken. U ziet dat de tabel Operations aanroepen bevat in Sentimentanalyse, Blob Storage en Azure SQL.

    Schermopname van het scherm Prestaties van Application Insights in de Azure Portal met het tabblad Afhankelijkheden geselecteerd en de tabel Operations gemarkeerd.

Toepassingslogboeken met Application Insights

Overzicht van logboekregistratie

Application Insights is een type logboekregistratieprovider die beschikbaar is voor ASP.NET Core toepassingen die beschikbaar worden voor toepassingen wanneer het Application Insights voor ASP.NET Core NuGet-pakket is geïnstalleerd en telemetrieverzameling aan de serverzijde is ingeschakeld.

Ter herinnering: de volgende code in Program.cs registreert de ApplicationInsightsLoggerProvider met de ingebouwde afhankelijkheidsinjectiecontainer.

builder.Services.AddApplicationInsightsTelemetry();

Als de ApplicationInsightsLoggerProvider app is geregistreerd als de logboekregistratieprovider, kan de app zich aanmelden bij Application Insights met behulp van constructorinjectie met ILogger of het algemene alternatief ILogger<TCategoryName>.

Notitie

De logboekregistratieprovider is standaard geconfigureerd voor het automatisch vastleggen van logboekgebeurtenissen met een ernst van LogLevel.Warning of hoger.

Bekijk de volgende voorbeeldcontroller. Het toont de injectie van ILogger, die wordt opgelost met de ApplicationInsightsLoggerProvider die is geregistreerd met de afhankelijkheidsinjectiecontainer. In de methode Ophalen ziet u dat een informatief, waarschuwing en foutbericht zijn vastgelegd.

Notitie

Standaard wordt de tracering op informatieniveau niet vastgelegd. Alleen de niveaus Waarschuwing en hoger worden vastgelegd.

using Microsoft.AspNetCore.Mvc;

[Route("api/[controller]")]
[ApiController]
public class ValuesController : ControllerBase
{
    private readonly ILogger _logger;

    public ValuesController(ILogger<ValuesController> logger)
    {
        _logger = logger;
    }

    [HttpGet]
    public ActionResult<IEnumerable<string>> Get()
    {
        //Info level traces are not captured by default
        _logger.LogInfo("An example of an Info trace..")
        _logger.LogWarning("An example of a Warning trace..");
        _logger.LogError("An example of an Error level message");

        return new string[] { "value1", "value2" };
    }
}

Zie Logboekregistratie in ASP.NET Core voor meer informatie.

Logboeken weergeven in Application Insights

De bovenstaande ValuesController wordt geïmplementeerd met de voorbeeldtoepassing en bevindt zich in de map Controllers van het project.

  1. Open de voorbeeldtoepassing met behulp van een internetbrowser. Voeg toe /api/Values in de adresbalk en druk op Enter.

    Schermopname van een browservenster met /api/Values toegevoegd aan de URL in de adresbalk.

  2. Wacht in de Azure Portal even en selecteer vervolgens de Application Insights-resource azure-café-insights-{SUFFIX}.

    Schermopname van de resourcegroep application-insights-azure-café in de Azure Portal met de Application Insights-resource gemarkeerd.

  3. Selecteer in het linkermenu van de Application Insights-resource onder de sectie Bewakingde optie Logboeken.

  4. Dubbelklik in het deelvenster Tabellen onder de Application Insights-structuur op de traceringentabel .

  5. Wijzig de query om traceringen voor de waardencontroller op te halen als volgt en selecteer vervolgens Uitvoeren om de resultaten te filteren.

    traces 
    | where operation_Name == "GET Values/Get"
    

    In de resultaten worden de logboekberichten weergegeven die aanwezig zijn in de controller. Een logboekernst van 2 geeft een waarschuwingsniveau aan en een logboekernst van 3 geeft een foutniveau aan.

  6. U kunt ook de query schrijven om resultaten op te halen op basis van de categorie van het logboek. Standaard is de categorie de volledig gekwalificeerde naam van de klasse waarin de ILogger wordt geïnjecteerd. In dit geval is de categorienaam ValuesController (als er een naamruimte is gekoppeld aan de klasse, wordt de naam voorafgegaan door de naamruimte). Schrijf de volgende query opnieuw en voer deze uit om resultaten op basis van categorie op te halen.

    traces 
    | where customDimensions.CategoryName == "ValuesController"
    

Het niveau bepalen van logboeken die naar Application Insights worden verzonden

ILogger implementaties hebben een ingebouwd mechanisme om logboekfiltering toe te passen. Met deze filtering kunt u de logboeken beheren die naar elke geregistreerde provider worden verzonden, inclusief de Application Insights-provider. U kunt het filteren gebruiken in de configuratie (met behulp van een bestand appsettings.json ) of in code. Zie de documentatie over logboekniveau voor meer informatie over logboekniveaus en richtlijnen voor het juiste gebruik ervan.

In de volgende voorbeelden ziet u hoe u filterregels toepast op de ApplicationInsightsLoggerProvider om het niveau te bepalen van logboeken die naar Application Insights worden verzonden.

Filterregels maken met configuratie

De ApplicationInsightsLoggerProvider is in configuratie alias ApplicationInsights . In de volgende sectie van een bestand appsettings.json wordt het standaardlogboekniveau voor alle providers ingesteld op LogLevel.Warning. De configuratie voor de ApplicationInsights-provider, met name voor categorieën die beginnen met 'ValuesController', overschrijft deze standaardwaarde met LogLevel.Error en hoger.

{
  //... additional code removed for brevity
  "Logging": {
    "LogLevel": { // No provider, LogLevel applies to all the enabled providers.
      "Default": "Warning"
    },
    "ApplicationInsights": { // Specific to the provider, LogLevel applies to the Application Insights provider.
      "LogLevel": {
        "ValuesController": "Error" //Log Level for the "ValuesController" category
      }
    }
  }
}

Als u de voorbeeldtoepassing implementeert met de voorgaande code in appsettings.json , wordt alleen de fouttracering naar Application Insights verzonden bij interactie met de ValuesController. Dit komt doordat het LogLevel voor de categorie ValuesController is ingesteld op Fout. Daarom wordt de waarschuwingstracering onderdrukt.

Logboekregistratie naar Application Insights uitschakelen

Als u logboekregistratie wilt uitschakelen met behulp van configuratie, stelt u alle LogLevel-waarden in op 'Geen'.

{
  //... additional code removed for brevity
  "Logging": {
    "LogLevel": { // No provider, LogLevel applies to all the enabled providers.
      "Default": "None"
    },
    "ApplicationInsights": { // Specific to the provider, LogLevel applies to the Application Insights provider.
      "LogLevel": {
        "ValuesController": "None" //Log Level for the "ValuesController" category
      }
    }
  }
}

Stel in de code ook het standaardniveau voor de ApplicationInsightsLoggerProvider en eventuele volgende logboekniveaus in op Geen.

var builder = WebApplication.CreateBuilder(args);
builder.Logging.AddFilter<ApplicationInsightsLoggerProvider>("", LogLevel.None);
builder.Logging.AddFilter<Microsoft.Extensions.Logging.ApplicationInsights.ApplicationInsightsLoggerProvider>("ValuesController", LogLevel.None);

Opensource-SDK

Zie de opmerkingen bij de release voor de meest recente updates en oplossingen voor fouten.

Volgende stappen