Configuration de Sentry
Nous avons décidé d'utiliser Sentry pour le monitoring de l'utilisation et des anomalies de l'application.
A ce stade, nous n'avons pas encore assez d'expérience sur Sentry, donc nous privilégions l'utilisation de OpenTelemetry comme format de remontée (d'autre sproduits savent consommer de l'OpenTelemetry). Nous partons donc sur l'option 1. Si cela n'est pas concluant ou que nous pouvons tirer plus de valeur avec l'utilisation de Sentry via le SDK natif, nous partirons sur l'option 2
Option 1 : Installation de Sentry via OpenTelemetry
Le détail est présenté dans celle-ci : OpenTelemetry Support | Sentry for .NET
Option 2 : Installation de Sentry SDK (natif)
Installez le paquet NuGet :
Gestionnaire de paquetsCLI .NET Core
Install-Package Sentry.AspNetCore -Version 5.11.2
Configurer le SDK
Ajoutez Sentry à Program.cs via le WebHostBuilder :
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
// Ajoutez la ligne suivante :
webBuilder.UseSentry(o =>
{
o.Dsn = "https://012beec1fbd1a219527bd2957939a22a@o4509563953348608.ingest.de.sentry.io/4509563954462800";
// Lors de la première configuration, pour voir ce que fait le SDK :
o.Debug = true;
// Définissez TracesSampleRate à 1.0 pour capturer 100%
// des transactions pour le traçage.
// Nous recommandons d'ajuster cette valeur en production
o.TracesSampleRate = 1.0;
});
});
Vérification
Pour vérifier votre configuration, vous pouvez capturer un message avec le SDK :
SentrySdk.CaptureMessage("Hello Sentry");
Si vous ne voulez pas dépendre de la classe statique, le SDK enregistre un client dans le conteneur d'injection de dépendances (DI). Dans ce cas, vous pouvez prendre IHub en tant que dépendance.
Traçage
Vous pouvez mesurer la performance de vos points de terminaison (endpoints) en ajoutant un middleware dans Startup.cs :
Vous pourrez surveiller automatiquement la performance de vos actions. Pour y ajouter des spans supplémentaires, vous pouvez utiliser l'API :
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using Sentry;
public class HomeController : Controller
{
private readonly IHub _sentryHub;
public HomeController(IHub sentryHub) => _sentryHub = sentryHub;
[HttpGet("/person/{id}")]
public IActionResult Person(string id)
{
var childSpan = _sentryHub.GetSpan()?.StartChild("additional-work");
try
{
// Effectuez ici le travail à mesurer.
childSpan?.Finish(SpanStatus.Ok);
}
catch (Exception e)
{
childSpan?.Finish(e);
throw;
}
}
}